我的公司运营着一个流量很大的网站,每天大约有15万次访问。
每次重启 apache 后,网站加载速度都很快。问题总是在几个小时后出现。
服务器配置:
Intel Core i3-2100 (3.1 GHz)
8 GB RAM
服务器apache正在运行进程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
35986 apache 20 0 1046m 15m 6912 D 24.9 0.1 0:00.86 httpd
35984 apache 20 0 1046m 15m 6916 D 21.9 0.1 0:00.78 httpd
35987 apache 20 0 1046m 15m 6916 D 21.6 0.1 0:00.76 httpd
35774 apache 20 0 1054m 35m 19m D 7.6 0.2 0:04.76 httpd
35947 apache 20 0 1061m 43m 29m D 7.6 0.3 0:02.05 httpd
35949 apache 20 0 1061m 44m 29m D 7.6 0.3 0:02.42 httpd
35951 apache 20 0 1046m 15m 6912 D 7.6 0.1 0:01.69 httpd
35952 apache 20 0 1046m 15m 6912 D 7.6 0.1 0:01.70 httpd
35953 apache 20 0 1045m 15m 6900 D 7.6 0.1 0:01.48 httpd
35983 apache 20 0 1046m 15m 6912 D 7.6 0.1 0:01.00 httpd
35418 apache 20 0 1067m 84m 64m D 7.3 0.5 1:14.12 httpd
35761 apache 20 0 1054m 36m 19m D 7.3 0.2 0:10.78 httpd
35770 apache 20 0 1066m 59m 39m D 7.3 0.4 0:04.12 httpd
35771 apache 20 0 1056m 36m 19m D 7.3 0.2 0:05.51 httpd
这是 apache 重启后立即出现的 ab 结果:
ab -n 300 -c 30 http://www.vibiznews.com/
Server Software: Apache
Server Hostname: www.vibiznews.com
Server Port: 80
Document Path: /
Document Length: 182372 bytes
Concurrency Level: 30
Time taken for tests: 40.708 seconds
Complete requests: 30
Failed requests: 15
(Connect: 0, Receive: 0, Length: 15, Exceptions: 0)
Write errors: 0
Total transferred: 5475675 bytes
HTML transferred: 5471175 bytes
Requests per second: 0.74 [#/sec] (mean)
Time per request: 40708.364 [ms] (mean)
Time per request: 1356.945 [ms] (mean, across all concurrent requests)
Transfer rate: 131.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 5 6 1.4 5 8
Processing: 17815 28229 9292.6 33340 40703
Waiting: 17731 28121 9339.8 33295 40666
Total: 17820 28235 9292.4 33345 40708
Percentage of the requests served within a certain time (ms)
50% 33345
66% 35458
75% 37776
80% 38302
90% 39178
95% 39302
98% 40708
99% 40708
100% 40708 (longest request)
以下是我当前的 Apache 配置:
Apache API Version 20120211
StartServers 5
MaxClients 220
ServerLimit 220
MinSpareServers 8
MaxSpareServers 16
MaxRequestsPerChild 4000
几个小时后,ab 的结果apr_pollset_poll: The timeout specified has expired (70007
我通过这种方式计算了最大客户端数量:8196(物理内存)/35(Apache 平均内存使用量)= 234.17,四舍五入为 230,以便为 Apache 以外的其他进程提供空间。
我的问题是,对于给定的条件,apache 配置是否最佳?
我通常看到其他人的 StartServer 和 MinSpareServer 配置为 10 左右,而 MaxRequestsPerChild 配置为 0。
该配置是否安全,尤其是 MaxRequestsPerChild 为 0 时?如果安全,那么有什么好处?
任何想法都将不胜感激。
谢谢!
答案1
这不是一个答案 - 但对于评论来说它太长了,并且问题无法以目前的形式得到回答。
每天约 15 万
15万什么? 真正重要的唯一指标是并发点击数/平均持续时间。
您没有提供任何有关流量的详细信息 - 显然它没有提供静态内容。您没有提供任何详细信息。
每个请求 1.3 秒非常慢。
服务器限制 220
看起来很低。
35(Apache 平均内存使用量)
你是怎么得到它的?
这不是计算 serverlimit/maxclients 的正确方法。尝试测量不同负载水平下的可用内存(减去缓冲区/缓存)并将其与服务器数量进行对比。
对于知道自己在做什么的人来说,弄清楚在这里的表现要问什么正确的问题至少需要几个小时 - 找到答案将花费更长的时间。
您应该能够运行比这更多的服务器 - 但您的性能问题并不在 httpd 配置中。