首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为json减缓apache响应时间(已解决)

为json减缓apache响应时间(已解决)
EN

Server Fault用户
提问于 2018-05-04 07:19:09
回答 1查看 1.6K关注 0票数 0

我有一个Apache服务器托管了几个json API。

此服务器正在使用Apache和Mysql运行Ubuntu16.04.4LTS。

所有API的响应时间都非常好,除了一个!从特定API获得json响应需要花费大约5s,而其他API则需要毫秒。

我检查了多个没有成功的东西:

1) SQL查询几乎立即运行(有和没有缓存--我尝试了这两种方法)

2)我们的开发人员添加了一个自定义头,以了解API生成json响应所需的时间: 2-3 ms。

3)使用wget从远程计算机或服务器本地调用API,结果是相同的:需要5s才能得到答复。根据浏览器开发模式,5s是“等待”。谷歌Chrome说“等待第一个字节”。然后,根据开发模式(几毫秒),数据传输速度似乎较快。

4) apache似乎没有被https请求淹没,请参见屏幕截图显示服务器状态页服务器状态

5)对https API的访问是通过多个防火墙完成的,但不存在反向代理。

作为调试过程的一部分,我试图提高服务器性能:

  • 我将vm移动到了一个最不繁忙的VMware主机上。
  • 我将这个vm移动到一个基于SSD的数据存储中。

你知道为什么Apache的回复速度这么慢吗?你知道如何解决这个问题吗?

谢谢你的帮助

托马斯

EN

回答 1

Server Fault用户

发布于 2018-05-09 14:01:01

几天前,我发现了以下线程:Apache在响应之前有很长的延迟.,这个问题看起来像我的,但听起来与IPv6有关。由于IPv6在我的服务器上是禁用的,我认为这个解决方案不适合解决我的问题。

在解决这个问题的最后一次绝望尝试中,我还是尝试了所描述的解决方案:我只是在/etc/serv.conf中添加了“选项单请求-重新打开”,然后5s延迟消失了。

此时,我真的不明白为什么这个设置解决了我的性能问题,因为我的服务器上禁用了IPv6。

此外,在Apache中禁用主机名查找。

经过近距离的调查…。

1)这个新的Json使用Google进行身份验证,这意味着访问Google服务需要DNS解析。我把这个忘在我以前的调查…里了我以为DNS在这里不会有问题。我错了。

2) IPv4 4专用服务器上的IPv6查询

基本上,Linux服务器依赖getaddrinfo来解析dns。根据手册页(gai.conf,它是getaddrinfo配置文件):

“调用getaddrinfo(3)可能返回多个答案。根据RFC 3484,必须对这些答案进行排序,以使成功率最高的答案在列表中居第一位。RFC为排序提供了一个算法。“

根据RFC 3484:

“默认策略表的另一个效果是更喜欢使用IPv6地址的通信,而不是使用IPv4地址的通信。

返回“单次请求-重新打开”:

“解析器对A和AAAA请求使用相同的套接字。一些硬件错误地只发送了一个回复。当这种情况发生时,客户端系统将坐着等待第二次答复。打开此选项会更改此行为,以便如果来自同一端口的两个请求没有得到正确处理,它将关闭套接字并在发送第二个请求之前打开一个新的套接字。“

我想我的服务器在等待第二个回复…花了5秒。“单次请求-重新开放”让我绕过了这个问题。

3)优先处理IPv4 dns查询:

我还更改了getaddinfo行为,以确保IPv4通信是首选的,参见/etc/gai.conf

代码语言:javascript
复制
# For sites which prefer IPv4 connections change the last line to

#

precedence ::ffff:0:0/96  100

托马斯

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/910691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档