![Apache 连接](https://linux22.com/image/577493/Apache%20%E8%BF%9E%E6%8E%A5.png)
我有一台 2.8 Ghz 的 i5 服务器,16GB Ram,无交换,它连接到 100Mbps 端口 + Debian 6 Stable
我正在运行一个小型 LAMP 站点,服务器几乎处于空闲状态...它使用了 1400MB 的 RAM 和接近 4% 的 CPU。
我从另一台 100Mbps 的服务器上进行了一个小的基准测试
#!/bin/bash
for i in {1..300}
do
wget -b -r -l 1 -x www.site.com
done
我得到了这个:
141 个文件,3.3M(每次下载)
我可以达到高达 97Mbps,没问题(MTRG)。
但问题出在第一台服务器上......当我收到如下信息时:
root@server:~# ss | grep ESTAB | wc -l
300 (or more)
服务器似乎没有响应,但它仍然几乎处于空闲状态...根据 iotop,i/o 也处于空闲状态。
Mysql 设置为允许 1000 个连接,到目前为止没有问题。
Apache 配置
Timeout 300
KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
和
root@server:~# cat /etc/sysctl.conf
net.core.somaxconn = 10240
....
我尝试过 Apache 和 Sysctl,寻找更好的东西,但没有找到。
任何帮助表示感谢
答案1
关闭 KeepAlive,然后重新运行它。您将保持 apache 连接打开 15 秒,每个连接等待您运行的 wget 的另一个连接。我相信关闭 KeepAlive 后您会得到更好的结果
答案2
您也可以安全地增加MaxClients
设置。Apache 子进程通常使用 20MB 到 100MB 之间的空间,具体取决于您加载了哪些模块。除非您处于该范围的上限,否则您可能可以处理 200 或 300 个子进程。
更多的子进程意味着更多的同时请求,即使子进程与保持活动相关。