这是我在 serverFault 上的第一篇文章,也是我第一次进入 Web 服务器配置。
硬件和软件。
CPU:GenuineIntel,Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz
操作系统:Linux 2.6.18-128.el5
内存:2Gb
背景。
我正在运行一个小型数据库 (MySQL),大约有 1000 条记录,每条记录包含 44 个字段。每天开始时“00:01”,表都会被清除并填充新数据。
共有 10 台远程 PC,均运行 Windows XP 和 Firefox 互联网浏览器。所有远程 PC 均使用至少 4Gb 的宽带连接连接到互联网。
每台远程 PC 运行一个 URL,显示一个动态数据页面,该页面每 20 秒刷新一次。这是一个每天 24 小时不间断的过程。
我遇到的问题是,一天中偶尔会出现 PC 浏览器错误“服务器响应时间过长错误”。我想确定服务器上的 httpd.conf 文件中的设置是否正确。任何人提供的帮助或建议都将非常有帮助。
此致
德里克
服务器配置文件:
httpd配置文件
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 254
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 150
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
答案1
您可以检查以下几件事:
- 您确定是您的网站无法访问,而不是本地 Intranet 或 Internet 问题吗?是否始终是同一台计算机存在访问问题,还是所有计算机都随机出现此问题?如果是前者,我会怀疑是本地连接问题。
- 检查发现问题时的日志(Apache、MySQL、系统等)中是否有相关的错误消息。
- 如果可能的话,在遇到问题时检查服务器的负载(top、netstat、df 等)。您还可以设置某种形式的简单监控服务,它会通知您任何重大的系统问题。
- 问题不一定是 Apache 设置,而是您的应用程序使用的堆栈中的任何内容,因此是 MySQL 和您正在使用的任何语言(PHP/PERL/...)。
- 您可以尝试使用 ab/siege 对您的网站进行基准测试/压力测试,看看您是否强制复制了该问题,而不是等待它出现。问题可能只是在一天中的某些时间,所有 10 台计算机同时提交请求,而您的服务器无法处理。基准测试可以帮助您判断这是否是一个问题。
- 一旦您接近确定原因,您可以尝试编写简短的测试用例来尝试隔离/复制它。一旦您修复了问题,您就可以重新运行测试以确认问题确实已修复(而不是老套的“今天没有崩溃”测试)。
答案2
您的配置远非最佳,但它在处理您描述的负载时应该完全没有问题。
您没有向我们提供太多有关代码如何工作的详细信息。您对代码的描述中没有任何内容表明它可能会导致超时 - 但可以想象代码中可能存在死锁。在这种情况下,您的日志应该充满错误。事实上,这就是首先要看的地方当您的网站表现不如您所期望时。您的访问日志(apache 通常配置为使用组合日志格式)将显示每个请求所花费的时间。是否有任何高值?任何超过 120 秒的时间也应该会产生错误日志条目。
您无法从 Apache 访问 MySQL 数据库 - 您需要一些中间应用程序逻辑 - 但您没有提供任何详细信息。如果请求确实需要那么长时间,这应该是记录错误。
但是我敢打赌问题出在客户端或网络上——请求永远不会到达网络服务器。为了证明这一点,我会验证客户端发出的最后一个请求在到达客户端之前的持续时间——它不会比预期的长。至于如何隔离根本原因……这更复杂。在所有客户端和服务器上维护详细的数据包日志相当困难。最有可能的候选者是网络本身或“安全”软件。
查看页面刷新机制并构建一些更具弹性的东西并内置一些基本的诊断功能(例如用 javascript 编写,在出现故障时显示合理的错误消息并检查站点连接)可能会简单得多
答案3
听起来你的服务器因为某种原因被阻塞了。你可能需要增加 apache 设置或切换到 fastcgi,但我怀疑 PHP 或 MYSQL 的速度变慢了。打开 mysql 慢查询日志,看看 mysql 是否是速度变慢的原因。请参阅http://dev.mysql.com/doc/refman/5.5/en/slow-query-log.html