【问题标题】:apache stop responding then crashesapache停止响应然后崩溃
【发布时间】:2018-02-14 18:10:53
【问题描述】:

Apache (2.4.25 FPM/FastCGI) 在我的 wordpress 多站点网站上停止响应并在一段时间后崩溃。

由于某种原因,它曾经运行良好几天,直到我使用此脚本 github.com/interconnectit/Search-Replace-DB 更改了 wordpress(mu) 域(可能不是原因)。

重新启动后,它可以工作大约一个小时,然后再次窒息。

我添加了一个mysql慢查询日志,但是它是空的。

Apache error_log 有多个类似这样的错误:

[Wed Sep 06 08:50:27.941819 2017] [proxy_fcgi:error] [pid 25444:tid 140610719610624] (70007)The timeout specified has expired: [client x.x.x.x:53398] AH01075: Error dispatching request to : (polling)

偶尔也会出现这个错误:

[Wed Sep 06 09:13:33.296777 2017] [core:notice] [pid 10710:tid 140611211331392] AH00051: child pid 25582 exit signal Segmentation fault (11), possible coredump in /opt/bitnami/apache2

另一个偶然错误(预计由于多个 AH01075 超时错误):

[Mon Sep 04 20:18:58.758718 2017] [mpm_event:error] [pid 19928:tid 140675798046528] AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

停止 mysql 服务器会杀死我的网站,但似乎可以让 apache 正常工作,至少在我一直在测试的一两个小时内。

下面进程列表中mysqld.bin的457452值正常吗? (ps -e -orss=,args= | 排序 -b -k1,1n | pr -TW$COLUMNS)

2128 /sbin/init
2400 php-fpm: master process (/opt/bitnami/php/etc/php-fpm.conf)
3840 -bash
4244 sshd: ubuntu [priv]
6928 /usr/bin/gonit
11036 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -DDISABLE_BANNER
11320 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -DDISABLE_BANNER
11364 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -DDISABLE_BANNER
11592 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -DDISABLE_BANNER
20592 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -DDISABLE_BANNER
57668 php-fpm: pool wordpress
57716 php-fpm: pool wordpress
65252 php-fpm: pool wordpress
67608 php-fpm: pool wordpress
68776 php-fpm: pool wordpress
457452 /opt/bitnami/mysql/bin/mysqld.bin --defaults-file=/opt/bitnami/mysql/my.cnf --basedir=/opt/bi

PHP 版本 5.6.30

mysql.bin Ver 14.14 Distrib 5.6.36

Ubuntu 14.04.5(AWS 上的 bitnami 映像)

apache 无响应时的内存使用情况:已使用:883mb of 992mb

php.ini 脚本 memory_limit = 128M

【问题讨论】:

  • 哪个操作系统?崩溃时的内存使用情况如何,最后,您是否在内核日志中看到任何错误?
  • 该值(如果有)非常低。但是由于您的错误看起来确实像非 OOMkilled 内存短缺......有多少内存可用?
  • @LSerni 总共 1GB,php 脚本 memory_limit = 128M,由于某种原因,它曾经运行良好几天,直到我使用此脚本 github.com/interconnectit/Search-Replace-DB 更改了 wordpress 域(可能不是原因)
  • @Anthony'Runt'Cleaves Ubuntu 14.04.5(AWS 上的 bitnami 映像)内存使用情况,而 apache 无响应:已使用:883mb of 992mb
  • 有趣,我只看到内存不足时出现分段错误。我建议增加 memory_limit 以查看这是否有助于您解决问题,但在您的另一篇文章中您说您已接近最大值。

标签: php mysql wordpress apache


【解决方案1】:

把它放在评论中有点长,所以回复作为答案。

您是否记录了任何 php 错误?从您目前所介绍的情况来看,我的理论是:

  1. 您使用该脚本对 db 进行搜索和替换,但它执行不佳,导致数据格式错误或损坏。
  2. 这导致依赖于 mysql 的 php 脚本由于格式错误或损坏的数据而失控。
  3. 因为您在 fcgi 上的 php 没有响应,所以您的 apache 等待它并保留资源。
  4. 所有请求都挂起,现在您的资源耗尽并开始出现 seg-faulting。
  5. 然后愚蠢的阿帕奇,看到你没有孩子数,要求你提高它,却没有意识到你已经超出了合理的物理资源。典型的 apache...
  6. 因为 apache 现在没有空闲子节点,它不能再接受请求,而且看起来好像所有 apache 都被破坏了,即使它只是被错误的 fcgi 进程阻塞了。

如果我的理论是正确的,你应该这样做。

  1. 检查mysql数据没有损坏

  2. 检查mysql中被替换的数据是否如你所愿

  3. 检查 PHP 错误日志,如果可以的话,它们应该记录一些内容。

  4. 如果仅清理数据还不够,您应该隔离实际上导致阻塞的 PHP 进程并将其删除。理想情况下,无论数据多么糟糕,php 程序都应该彻底死掉。

祝你狩猎愉快。

【讨论】:

  • 你是对的。我不确定哪些数据已损坏,但恢复到旧数据库解决了问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2020-01-21
相关资源
最近更新 更多