我们有一台运行Nginx和PHP-FPM的服务器。该服务器上有6个网站,运行PHP-FPM和nginx。该软件是所有vBulletin 3.8和WordPress。数据库位于单独的服务器上。
现在,由于这些网站非常受欢迎,因此通常一次我们有7-8,000名访问者在线,每个页面大部分都访问数据库。我相信这是造成我们问题的原因。
因为我们在MySQL服务器上有许多大型数据库,并且坦白地说,由于查询可以在软件中更好,所以我认为MySQL偶尔会无法及时将结果返回给PHP,从而产生级联效应,最终导致一切停止,直到我们重新加载PHP-FPM。完成之后,一切又开始正常运转。
我在排除故障时遇到问题的原因是因为我无法真正从日志中识别出任何东西。在MySQL慢查询日志中,当停机发生时,我什么都没看到。在nginx日志中,我看到成千上万的条目说读请求超时或连接超时(到PHP-FPM)。并且在PHP-FPM日志中,我看到很多行显示“执行超时(31秒),终止
所以在这一点上,我完全不知道在哪里寻找问题。显然,无论发生什么事情,都是因为这些脚本有时执行得不够快(通常它们在不到一秒钟的时间内加载,但是某些事情导致加载时间猛增)。一天发生多次这种情况,对我们来说已经成为一个大问题。
现在,我只是有一个crontab来每隔10分钟重新加载php5-fpm,这可以解决崩溃问题。当然,当PHP重新加载时,nginx会抛出502网关错误,因此这并不是解决方案。
如果这很重要,PHP将运行APC缓存。我读过一些地方,在某些情况下APC可能导致挂起。
任何指针都会有所帮助。我真的不想一直担心这台机器。
当然,可以提供更多信息。请让我知道您的需求。
更新:我只是通过apc.php复制到Web根目录并访问它以查看我们的统计信息。事情看起来不错。然后,我单击链接转到“用户统计”,然后BOOM服务器立即挂起。我重新加载了php-fpm,然后重新加载了用户统计信息页面,一切顺利。等待一分钟,重新加载,服务器再次挂起。
因此,这似乎与APC有关。问题是-我们该如何解决?
APC配置:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
更新2:我们在这里已经取得了一些进展。事实证明,WordPress缓存插件(W3 Total Cache)是导致崩溃的原因。我们仍然不知道为什么,但是禁用它后,我们已经运行PHP近4个小时,没有重新加载,没有减速,没有崩溃。我们仍在vBulletin论坛上使用APC,那里根本没有问题。有什么方法可以确定为什么 APC崩溃了?我很乐意在我们的WordPress安装中使用它,但不以脆弱的系统为代价。