每 n 次加载时页面会挂起

每 n 次加载时页面会挂起

我最近将我的网站移到了一台新服务器(Apache 2、PHP5、MySQL5)。该网站是一个基于 Invision 的论坛。每发布几篇帖子/主题,它就会挂起。数据已写入,因为如果您停止并重新加载,帖子/主题仍在那里。我最初以为这是一个写入问题,但事实并非如此。数据已写入,但页面加载从未完成。它不会离开已输入数据的页面。

解决此问题的最佳方法是什么?我最近唯一做的就是减少 MySQL 超时,但我认为这不是一个问题,因为值仍然足够大,并且 MySQL 日志中没有提到超时。据记录,PHP 的错误日志中也没有任何内容。

编辑:我检查了我的服务器状态。一切看起来都很好,但我怀疑我已达到我的 ServerLimit,所以我将其加倍。还启用了我的 Keepalives。我会密切关注的。

编辑2:现在已经过去几天了,这种情况仍然在发生。不过我还有更多信息;

  1. Apache 正在抛出段错误,但是启用核心转储不会产生这些错误。
  2. 我曾尝试禁用 apache 中的模块,但它只是停止工作。
  3. 我担心这可能与 DNS 有关。如果我在 Firefox 中查看实时标头,则在此“挂起”期间绝对不会发生任何事情。此后,响应会相当迅速地返回。

更新(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 即可。

答案1

  1. Apache 抛出段错误

这就是您的问题。Apache 没有挂起,当 Apache 的子进程死亡且未完成请求时,您的浏览器才会挂起。

LogLevel debug 可能会给你提供更多信息(但是,如果这是一个繁忙的生产系统,则会提供大量信息)。

我的第一猜测是 suhosin/mod_security 或针对错误的 php api 编译的东西,或者可能使用了略有变化的共享库。我会仔细检查这些,看看你是否可以隔离正在运行的不同 php 扩展/apache 模块。你运行的是 apcc、eaccelerator 还是任何操作码缓存?Zend?Source Guardian?ioncube?你使用的是否是每个版本的正确版本?最新更新?Zend 3.3.9,ioncube 也有最近的更新,并且可能会导致段错误,具体取决于你运行的 Zend 版本。

答案2

将 strace 或 gdb 之类的东西绑定到所有 apache 工作进程,并在浏览器崩溃时重新加载页面。然后,您将看到有关崩溃时正在做什么的更多信息。

当您说您已启用 coredump 时,您是否还启用了它们,使其足够大以处理 Apache coredump?它可能相当大,因此即使暂时将它们设置为无限大小也可能会有所帮助。

答案3

考虑到可能性较高但细节较少,这里有一些提示。

  1. 打开你的论坛配置文件,确保 MySQL 连接主机是 localhost
  2. 打开 /etc/hosts 确保有如下一行: 127.0.0.1 本地主机.本地域 本地主机
  3. 关闭您可能运行的所有防火墙。
  4. 关闭您可能拥有的任何 MySQL 缓存引擎。(xcache、memcached 等)
  5. 卸载 php-mysql 包并重新安装(或强制重新安装)。

如果这些都不起作用,请发布 php.ini、httpd.conf 和 my.cnf 的内容。

答案4

这很有可能是服务器操作系统或硬件的一个严重问题。

我会尝试对操作系统进行验证(基于 Debian 的 Linux 使用debsums,不确定其他的)。

还可以尝试运行memtestx86+以确认没有大规模内存问题,它们只能在负载下出现。

相关内容