我最近将我的网站移到了新服务器(Apache 2、PHP5、MySQL5)。该站点是一个基于 Invision 的论坛。每隔几个帖子/主题就会挂起。数据已写入,因为如果您停止并重新加载,帖子/线程就在那里。我最初认为这是一个写入问题,但不是。数据已写入,但页面加载从未完成。它不会离开输入数据的页面。
解决此问题的最佳方法是什么?我最近做的唯一一件事是减少我的 MySQL 超时,但我看不出这是一个问题,因为值仍然足够大并且 MySQL 日志中没有提到超时。作为记录,PHP 的错误日志中也没有任何内容。
编辑:我检查了我的服务器状态。一切看起来都不错,但我怀疑我正在达到我的 ServerLimit,所以我加倍了。还启用了我的 Keepalives。会留意的。
编辑 2:现在已经有几天了,这种情况仍在发生。不过我有更多信息;
- Apache 抛出 seg 错误,但启用核心转储不会产生它们。
- 我曾尝试禁用 apache 中的模块,但它只是停止工作。
- 我担心它实际上可能与 DNS 有关。如果我在 Firefox 中观看 Live Headers,那么在这个“挂起”期间绝对不会发生任何事情。在那之后,响应很快就回来了。
更新(05/04):我从源代码构建了最新版本的 Apache 和 PHP,但运气不好。然后我删除了这些并使用 remi repo 将我所有的包更新到最新的稳定版。段错误似乎已经停止,但挂起仍在继续。
ini
位于:
- www.skylinesaustralia.com/php.ini
- www.skylinesaustralia.com/my.cnf
- www.skylinesaustralia.com/httpd.conf
更新 - 解决了!- 问题是在 MySQL 中有一个巨大的查询缓存大小。它是 2GB,将其更改为 64M 对其进行了排序。
有你的问题。Apache 没有挂起,当 apache 的子进程死亡并且未完成请求时,您的浏览器会挂起。
LogLevel 调试可能会为您提供更多信息(不过,如果这是一个繁忙的生产系统,则会提供大量信息)。
我的第一个猜测是 suhosin/mod_security 或者是针对错误的 php api 编译的东西,或者可能使用稍微改变的共享库。我会仔细检查这些,如果您可以隔离正在运行的不同 php 扩展/apache 模块。您是否正在运行 apcc、eaccelerator 或任何操作码缓存?曾?源头守护者?离子立方体?您是否使用了每个版本的正确版本?最新更新?Zend 3.3.9,ioncube 最近也有更新,根据您运行的 Zend 版本,可能会导致段错误。
将 strace 或 gdb 之类的东西绑定到所有 apache 工作进程,然后在浏览器中重新加载页面中断。然后你会看到更多关于它在崩溃时正在做什么的信息。
当您说您启用了核心转储时,您是否还使它们足够大以处理 Apache 核心转储?它可能相当大,因此即使暂时将它们设置为无限大小也可能会有所帮助。
考虑到大量可能性和少量细节,这里有一些技巧。
如果这不起作用,请发布 php.ini、httpd.conf 和 my.cnf 的内容。
如果您使用 firefox,请安装 Firebug 插件。通过单击浏览器右下角的错误图标启用它,然后在“网络”选项卡中设置“启用”。加载您的论坛页面并检查错误。
很有可能这是服务器操作系统或硬件的严重问题。
我会尝试对操作系统进行验证(基于 Debian 的 linuxes 使用
debsums
,不确定其他任何内容)。还可以尝试运行
memtestx86+
它应该确认没有大量内存问题,它们只能在负载下显示。我看到了与 DNS 相关的类似问题,您有机会发布站点 URL 吗?
编辑:刚刚看到您已经提到过,通过http://www.intodns.com/运行该站点,它也可能与服务器主机名有关。就像我说的,如果您不介意发布域,它可能会更容易。
尝试停止 Apache,然后使用以下命令重新启动它: strace /path/to/httpd -X (只会启动一个工作人员,并且 Apache 不会从控制台分离。)重现挂起并检查 strace 的输出。这应该定位系统的哪个部分正在崩溃。
尝试减少 MySql 中的查询缓存大小。