我不确定这个问题是属于ServerFault还是StackOverflow,但是由于我在猜测我需要在服务器端debugging这个问题,所以我将使用ServerFault。
问题
我们为我们的一些客户运行共享的虚拟主机服务器。 除了一个客户他们的网站,一切都运行顺利。 大约每周2到3天,我们的显示器检测到一个短暂的停机时间,因为apache在30秒内没有提供页面,而是在60到120秒之间。 我用自己的桌面检查一次,确认:网站持续加载了80秒,然后突然加载。 没有增加的负载,没有更多的请求比正常和服务器上的其他网站加载完美。
我们早些时候遇到了一个特定插件的问题:这个插件与作者的服务器联系,以确认许可证密钥。 当这个服务器无法访问,Wordpress无法继续加载和现在有相同的症状。 我们注意到了这一点,因为有一天他们的服务器closures了几个小时,我们有时间禁用和启用所有的插件,一个接一个。 据插件作者介绍,现在问题解决了。
我有强烈的感觉,我们再次看到同样的问题,也许有相同的插件,也许没有。 但是由于停机时间非常短暂(通常不超过2分钟),所以我不知道如何debugging这个超时错误。
我想到的东西
通常我会一个接一个地禁用插件,但在连接到数据库以禁用插件之前,网站又重新启动了。 由于在停机时间中没有任何模式,所以在发生这种情况时我无法保持等待状态。 Apache日志不显示任何错误:我只能看到来自用户的请求,并看到有一段时间没有服务的文件。
我的第二个想法是在apache进程上运行一个堆栈跟踪。 我很确定这将揭示Apache等待这么久的地方。 但是由于服务器每分钟获得30多个请求,日志文件在几个小时内就会变得非常大,这使我们无法find正确的请求。
相关的服务器规格
CentOS Linux release 7.0.1406 (Core) Kernel 3.10.0-123.el7.x86_64 Apache/2.4.12 with mod_ruid2 PHP 5.4.38 (cli) mysql Ver 15.1 Distrib 5.5.41-MariaDB, for Linux (x86_64) using readline 5.1 All compiled by DirectAdmin 1.48.3
想法?
谁能想到一个很好的方法来debugging这个非常具体的问题? 任何帮助是极大的赞赏!
编辑:
如果Apache仍然可以访问,我会首先抓取扩展状态页面,看看现在正在提供什么请求。 如果有一个长时间的运行请求,你甚至可以对它进行压缩,pid应该在状态中可见(因为你有mod_ruid2,我猜你运行的是mod_php和prefork MPM,所以一个进程一次只能处理一个请求)。
也许重新configurationCustomlog,并logging服务请求所用的时间,以便稍后您可以识别缓慢的请求。
一旦你的请求缓慢,看看是否可以复制。 如果是,那么它更容易debugging,甚至可以添加用于PHP分析/debugging的xdebug。
也看看什么MySQL查询在挂起时运行,也许它是一个MySQL缓慢的查询/locking问题。
如您所说,也可能是一个networkingAPI问题。
而当你用尽所有的select,也许只是与老板交谈,并踢了用户。 根据服务器上有多less个其他站点,服务器运行状况可能比站点本身更重要。
正如我所提到的,我们怀疑其中一个插件是手头问题的原因。 此前,当他们的许可证服务器closures时,我们的网站也被closures了。 他们表示这个问题是在最近一次更新中修复的,但是由于我们的宕机时间太短,所以我怀疑这个问题。
我们最终以如下方式debugging它:
strace的最后一行是文件的加载:/wp-content/plugins/[plugin-name]/[file-of-plugin].php。 Apache无法通过这个插件,直到我们再次解锁端口80。
我们删除了插件,并没有经历过任何停机时间。 这是一个非常罕见的问题,但是我希望如果别人遇到同样的问题,我的答案会很有帮助。
感谢所有的评论和回答。 我们非常感谢,它真的帮助我们考虑解决scheme。