0

我有一个 1 GB 的 VPS,而 Apache 几乎从启动开始就慢了下来。我在 static.html 文件上运行了 ApacheBench,但情况并没有什么不同。但是,该站点将同时具有 MySQL 和 PHP 以及大量的 AJAX 请求,因此我想对此进行调整。

当我重新启动时,错误日志几乎立即显示:

[错误] 服务器达到 MaxClients 设置,考虑提高 MaxClients 设置

ab -n 1000 -c 1000

显示:

Document Path:          /static.html
Document Length:        7 bytes

Concurrency Level:      1000
Time taken for tests:   57.784 seconds
Complete requests:      1000
Failed requests:        64
   (Connect: 0, Receive: 0, Length: 64, Exceptions: 0)
Write errors:           0
Total transferred:      309816 bytes
HTML transferred:       6552 bytes
Requests per second:    17.31 [#/sec] (mean)
Time per request:       57784.327 [ms] (mean)
Time per request:       57.784 [ms] (mean, across all concurrent requests)
Transfer rate:          5.24 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   25  13.4     25      48
Processing:  1070 16183 15379.4   9601   57737
Waiting:        0 14205 15176.5   9591   42516
Total:       1070 16208 15385.0   9635   57783

Percentage of the requests served within a certain time (ms)
  50%   9635
  66%  20591
  75%  20629
  80%  36357
  90%  42518
  95%  42538
  98%  42556
  99%  42560
 100%  57783 (longest request)

如果我在一个 php 文件上运行 ab,它有时会完成,大多数时候它不会,有时会出现错误,例如

apr_socket_recv: Connection reset by peer (104)

socket: No buffer space available (105)

httpd.conf 项目:

Timeout 10
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 1

<IfModule prefork.c>
StartServers 3
MinSpareServers 5
MaxSpareServers 9
ServerLimit 40
MaxClients 40
MaxRequestsPerChild 5000
</IfModule>

顶部...(CPU 和 Load 1min 在测试过程中非常不稳定):

top - 10:44:51 up 11:50,  3 users,  load average: 0.17, 0.42, 0.90
Tasks:  84 total,   2 running,  82 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.8%us,  3.1%sy,  0.0%ni, 94.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1793072k total,   743604k used,  1049468k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                             
21831 mysql     18   0  506m  71m 6688 S  0.7  4.1   4:03.18 mysqld                               
 1828 root      15   0  113m  52m 2052 S  0.0  3.0   0:02.85 spamd                                
 1830 popuser   18   0  113m  51m  956 S  0.0  2.9   0:00.00 spamd                                
 8012 apache    15   0  327m  35m  17m S  3.7  2.0   0:11.83 httpd                                
 8041 apache    15   0  320m  28m  15m S  0.0  1.6   0:11.83 httpd                                
 8022 apache    15   0  321m  27m  14m S  2.3  1.6   0:11.05 httpd                                
 8033 apache    15   0  320m  27m  14m S  1.7  1.6   0:10.06 httpd 

这里有什么明显的错误吗?或者我的下一步故障排除是什么?

4

1 回答 1

3

听起来你没有足够的内存——当你在同一台服务器上运行 PHP 和 prefork 和 MySQL 时,1GB 并不多。您的 MaxClients 应该是 10-20,而不是 40。

几周前,我编写了一个脚本来调整 Apache httpd,这可能有助于确定服务器的最大值。您可以在此处找到博客条目http://surniaulula.com/2012/11/09/check-apache-httpd-mpm-config-limits/并且该脚本也在 Google Code 上。

享受!

js。

于 2012-11-21T13:57:48.917 回答