在我运行的 VPS 上,我最近经常达到 tcpsndbuf 的软限制和硬限制,导致服务器在负载上升到 45 甚至更高时几乎无法访问。我已经尝试限制允许的 Apache 连接数,但在使用新值重新启动服务器 5 分钟后,一切又变得疯狂。现在我有:
KeepAlive off
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 20
MaxClients 20
MaxRequestsPerChild 1000
</IfModule>
该服务器当前主要使用 apache 推送大约 1.5 TB 的 20kb-15MB 文件,使用 vsftpd 推送 partyl 文件,并且托管大约 5 个 wordpress 博客,每天接待大约 300-800 名访客。
/proc/user_beancounters 说:
uid resource held maxheld barrier limit failcnt
62327: kmemsize 27311616 27428538 193273527 214748364 0
lockedpages 0 0 2059 2059 0
privvmpages 316229 316352 1048576 1101004 0
shmpages 745 745 131072 131072 0
dummy 0 0 9223372036854775807 9223372036854775807 0
numproc 95 95 650 650 0
physpages 154998 155013 0 9223372036854775807 0
vmguarpages 0 0 524288 9223372036854775807 0
oomguarpages 154999 155014 9223372036854775807 9223372036854775807 0
numtcpsock 30 30 700 700 0
numflock 7 8 1000 1100 0
numpty 1 1 102 102 0
numsiginfo 0 0 1024 1024 0
tcpsndbuf 1573056 1619200 6720000 9408000 23663960828
tcprcvbuf 491520 491520 6720000 9408000 42
othersockbuf 224864 226176 5760000 8064000 0
dgramrcvbuf 0 8480 5376000 5376000 0
numothersock 139 139 600 600 0
dcachesize 1319995 1338775 28991028 32212254 0
numfile 3125 3145 17600 17600 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 71 71 9223372036854775807 9223372036854775807 0
减少 tcpsndbuf 要求的最有效方法是什么?
附注:每当我达到 tcpsndbuf 限制时,我通过 wget 和类似工具下载文件的大多数尝试都会以“没有可用缓冲区空间”之类的消息结束。