apache php closewait,apache-2.2 – 找出导致与Apache&PHP和Mysql的CLOSE_WAIT连接的原因

我认为你有一个查询,锁定一个表/一些其他mysql连接尝试更新的行超过它应该更新.当发生这种情况时,所有传入的请求都会叠加在它后面,直到你达到最大连接数.

由于请求进入并且没有收到响应(由于数据库上的查询被阻止),Apache端也发生了同样的情况. PHP与数据库有一个开放的连接;它已经提出了一个查询,但尚未收到回复. Apache正在等待答案,因此你可以期待它做什么.

Apache似乎挂在外面(您的浏览器/移动应用程序/等),因为所有服务器上可用的所有子服务器都在等待数据库回复.实际上没有更多可用的连接. (这也可能是您的负载均衡器上设置的连接限制).如果您还没有,请在负载均衡器上开始记录状态更改.当“雷鸣般的群体”问题(稍后解释)发生时,您可能会看到每个Web服务器反复上下移动.

我相信您在CLOSE_WAIT中的连接是一种症状,而不是问题.在我处理更明显的可能问题(数据库)之前,我不会花费任何时间来解决这个问题.一旦你解决了大量CLOSE_WAIT将会消失的可能性.

要在数据库端开始故障排除,您应该启用slow query log(如果尚未启用).让它记录请求超过1秒左右,看看出现问题时会出现什么.

注意:在查询完成之前,慢查询日志不会记录查询.不要假设问题开始时出现的第一个查询是问题查询.它可能是也可能不是.

现在,一旦有问题的查询阻止其他查询完成,您可能会期望网站恢复正常…

不是这样.如果您有500个请求/秒定期进入并且可以处理总共1000个请求/秒,并且您的查询将数据库锁定10秒钟.除了500 /秒之外,现在还有5,000个请求处理等待处理.这被称为Thundering Herd problem.

您的问题可能完全不同,但这些问题与我多次处理的问题完全相同,在大多数情况下,问题是阻止其他查询的数据库查询.唯一的另一次我遇到这个问题不是由于数据库是在CentOS上(RHEL也有问题)6.不幸的是,Red Hat有知识库文章讨论这个问题仅供订阅者使用,但还有其他参考如果你搜索他们周围.如果你认为这种情况可能就是这样的话,那就很容易测试了.你只需要add a single line to your resolv.conf.

如果问题似乎出现在相同/接近当天发生的同一时间

你应该检查你的cron作业(或其他任何按照设定的时间表运行)以查看是否正在从中发送问题查询.

最后,如果您确定您被雷鸣般的群体问题所困扰,我建议您对负载均衡器设置限制.您应该对服务器进行基准测试,以大致确定它可以同时处理的最大请求数,并限制负载均衡器超过每个后端Web服务器的连接数.

祝好运.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值