需要有关 Web 服务器性能故障排除的建议

需要有关 Web 服务器性能故障排除的建议

我租用了一台基于 CentOS 的虚拟服务器,上面运行着大约 5 个活跃网站。几个月前,我注意到我的网站运行性能明显下降。

第一个症状是 HTTP 服务器停止响应后,运行的 apache 进程太多(约 300 个)。重启后问题消失,但一天或一周后又会偶尔出现。我尝试了 httpd.config 选项,但无法摆脱该问题,我找到的唯一解决方案是每隔 1 小时安排服务器重启一次。重启速度很快,所以是暂时的,它解决了问题。

然而几个月前我开始观察到服务器性能的另一个问题 - 网站周期性地响应太慢。

我需要一些建议或帮助来找出问题的根源,因为我目前不确定我是否理解它:

看起来内存足够了,下面是从顶部输出的:内存:总计 524288k,已使用 299252k,可用 225036k,缓冲区 0k

磁盘空间足够(来自“vm -h”):

Filesystem            Size  Used Avail Use% Mounted on
vzfs                   40G   28G   13G  70% /
none                  3.9G  4.0K  3.9G   1% /dev

以下是来自“vmstat -SM 2 100”的有关资源使用情况的运行时信息:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0    220      0      0    0    0     8   111    0    1  6  4 90  0  0
 0  0      0    220      0      0    0    0     0     0    0  272  0  0 100  0  0
 0  0      0    220      0      0    0    0     0     0    0  176  0  0 100  0  0
 0  0      0    220      0      0    0    0     0     0    0  132  0  0 100  0  0
 0  0      0    220      0      0    0    0     0  1950    0  330  0  0 100  0  0
 2  0      0    220      0      0    0    0     0     4    0 1854 21 19 60  0  0
 2  0      0    210      0      0    0    0     0     4    0 1958 73 23  4  0  0
 2  0      0    199      0      0    0    0     0     4    0  829 41 40 19  0  0
 1  0      0    207      0      0    0    0     0    26    0 1212 47 17 36  0  0
 1  0      0    206      0      0    0    0     0     4    0 1405 50  4 45  0  0
 0  0      0    209      0      0    0    0     4   140    0 1251 34  5 60  0  0
 0  0      0    208      0      0    0    0     0     0    0  213  1  0 99  0  0
 0  0      0    208      0      0    0    0     0     0    0  353  0  0 100  0  0
 0  0      0    208      0      0    0    0     0     6    0  317  0  0 100  0  0
 0  0      0    206      0      0    0    0     0     0    0  299  0  0 100  0  0
 0  0      0    214      0      0    0    0    12   114    0  336  0  1 99  0  0

顺便说一下,CS(上下文切换值)较高的行对应于我刷新几个网站页面的时刻。

非常感谢您的任何建议。

答案1

一般来说,我发现当 apache 被设置为允许生成比您能处理的更多的子进程时,一旦达到系统限制,它就会冻结。一旦它被堵塞,它就不太擅长释放资源。所以我建议您一开始就降低 apache 的最大子进程数(很多)。看看 1 个子进程通常使用多少内存。然后将您的最大 avl ram 除以 1 个子进程使用的内存量,您可以使用该结果作为调整最佳子进程数的起点。

我的回答可能有些偏颇,但我认为 apache 并不适合用作 Web 服务器... 它消耗的资源远远超过了它应有的水平,因此对于像您运行的 VPS 这样的小型环境来说,它尤其不是一个很好的选择。尝试使用 nginx(例如,如果您使用 php,则使用 php-fpm)或 varnish 等替代方案。这些并不是 apache 的 1 对 1 替代品,但我发现它们是效率更高、更不容易因资源问题而冻结的 Web 服务器。

此外,在发布此类问题时,我建议您发布类似的统计数据,top因为它们可以在您的高峰/麻烦时段提供更完整的情况,尽管只是一般情况。

相关内容