Apache 服务器非常慢,需要几分钟才能响应

Apache 服务器非常慢,需要几分钟才能响应

我在用于开发的机器上安装了 Ubuntu 12.04 64 位和 Apache 2.2.22。无论如何,似乎从一天到下一天,它每次都会以毫秒为单位提供页面,而现在每次需要 5 分钟 1 秒。我相信这是因为超时值300在 中apache.conf。我不明白的是为什么它会超时。

我已经安装了 xdebug,但我没有触发它,它也不是自动启动的,所以我真的认为这没有什么区别,而且它们之前可以很好地协同工作。

我对 Apache 完全是菜鸟,不知道如何开始调试这个问题。我检查了日志,但它们似乎没有给我任何有趣的信息。Apacheerror.log没有变化,只有在启动时才会生成通知日志。

实际的应用程序日志更有趣一些,因为它确实更新了app-access.logapp-error.log,但是访问日志只显示 GET 请求,错误日志全是信息。这对我来说毫无意义,所以这里是来自请求的一个示例。

[Mon Jan 20 12:01:39 2014] [info] [client 127.0.0.1] (32)Broken pipe: core_output_filter: writing data to the network
[Mon Jan 20 12:01:43 2014] [info] [client ::1] Connection to child 6 established (server app:443)
[Mon Jan 20 12:01:43 2014] [info] Seeding PRNG with 656 bytes of entropy
[Mon Jan 20 12:01:43 2014] [info] [client ::1] SSL library error 1 in handshake (server app:443)
[Mon Jan 20 12:01:43 2014] [info] SSL Library Error: 336027900 error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol speaking not SSL to HTTPS port!?
[Mon Jan 20 12:01:43 2014] [info] [client ::1] Connection closed to child 6 with abortive shutdown (server app:443)

问题是,它只在页面被提供时生成日志,而这已经是几分钟后了(在明显的 5 分钟超时之后)。看来请求实际上需要很长时间才能到达应用程序。我不确定找出这种情况的最佳方法是什么。我最近没有对我的配置进行任何更改,所以我真的不明白为什么它突然出错了。

答案1

好吧,如果配置没有改变,您别无选择,只能将超时限制为 2 秒,那么您就有 3 秒的加载时间。;) 好的,让我们尝试一些有用的方法。

您说您用它进行本地开发测试?

您还记得以下任何一项的最后一次更改是什么吗:

  • 您的 Web 应用程序在运行和不运行之间有任何变化吗?
    • 有没有for .. loop可以无限运行的?
    • 或者您的应用程序是否向另一台没有响应的服务器发出请求?
  • 还有其他日志需要检查吗?PHP 的错误日志或您可能正在使用的任何其他脚本语言的日志。
  • 数据库设置,表结构?约束?程序?
    • 您是否正在使用具有某些应用程序正在等待的锁的数据库?
  • 脚本语言设置(您正在运行 PHP、Perl、Python、Ruby 中的哪一个?)
  • Apache 设置
    • 模块
    • 虚拟主机
    • .htaccess 文件?
  • 服务器上其他服务有更新吗?
  • 防火墙有任何变化吗?
  • 数据库、脚本语言或 Apache 有任何更新吗?

其他需要检查的事项:

  • 如果这没有帮助,您应该增加 Apache 日志的详细程度,以便分步调试并查看 5 分钟内发生的情况。
  • 您还可以看到请求运行时哪个进程正在使用 CPU(如果有的话),例如 PHP 占用了整个 CPU 核心?或者可能是 mysqld(或任何其他数据库守护程序)。

[编辑] 另请参阅: https://web.archive.org/web/20170225085205/http://servertune.com/kbase/?View=entry&EntryID=109

答案2

编辑 /etc/apache2/ports.conf

确保 Listen 80 行放在最后。[1]

如果这不能解决问题,请将 Listen *:443 或 Listen 443 替换为 Listen *:443 http [2]

此外,显然,apache2ctl graceful 不足以使这个改变生效,要残酷一点:

apache2ctl 重启

祝你好运。

1:http://wiki.apache.org/httpd/InternalDummyConnection

2:https://netfuture.ch/2013/07/ubuntu-apache-update-broke-listen-command/

相关内容