最佳sysctl.conf配置,可实现高负载-非常繁忙的内容流服务器


9

高负载,非常繁忙的内容流服务器的最佳sysctl.conf配置是什么?服务器从Amazon,s3等远程服务器获取内容,然后使用php将内容动态流式传输给用户,而无需将其保存到硬盘上。php使用CURL提取文件,然后使用flush()同时传输它,因此硬盘驱动器工作量不大……仅网络和带宽。

该服务器是四核xeon,具有1Gbit全双工NIC,8gb RAM和500GBx2的RAID。服务器内存使用率和cpu负载非常低。

我们在其上运行debian lenny和lighttpd2(是的,我知道它尚未发布:-))与php 5.3.6和带有spawn-fcgi的php fastcgi绑定在4个不同的Unix套接字上,每个套接字有20个孩子。最大fcgi请求为20,而lighttpd2配置中的mod_balancer模块可在SQF(短队列优先)配置中的这4个套接字之间平衡fastcgi请求。

我们的服务器使用大量带宽,即网络连接一直很忙。在100到200个并行连接之后,服务器开始减速,最终变得无响应,开始出现连接超时错误。当我们使用cpanel时,我们永远不会出现超时错误,因此这不是脚本问题。它必须是网络配置问题。


lighttpd2配置:工作进程= 8,保持活动请求为32,保持空闲超时为10秒,最大连接为8192。

我们当前的sysctl.conf内容为:

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1

# Increase maximum amount of memory allocated to shm

kernel.shmmax = 1073741824

# This will increase the amount of memory available for socket input/output queues
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536
net.core.optmem_max = 25165824

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# you shouldn't be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn't die
# net.ipv4.netfilter.ip_conntrack_max = 1048576
#  net.nf_conntrack_max = 1048576

# For Large File Hosting Servers
net.core.wmem_max = 1048576
net.ipv4.tcp_wmem = 4096 87380 524288

哦,我忘了提及,当我说“无响应”时,我会说,它对.php页面,诸如index.html之类的静态页面和serve-status页面均无响应...
Daniel Johnson

2
首先,您必须找出导致不响应的确切原因。可能与无关sysctls。检查进程是否阻塞,内存不足等strace,并查看原因/挂起的位置。
coredump

他们不会挂..正如我所说,只有.php文件会死掉。服务器状态页工作正常。–
Daniel Johnson

1
@bilal,您必须检查一切如何协同工作。这可能是一个锁定问题,一个共享资源(内存/ IRQ)问题。找到这样的问题的解决方案并非易事。
coredump

2
您可以在此处提供更多信息吗?netstat -in,ethtool -S eth0(或任何实时接口)。服务器速度变慢(内存行)时,top显示什么?而且-您能否提供有关服务器硬件的详细信息?品牌/类型,网卡类型,您还可以使用其他网卡吗?
尼尔斯

Answers:


5

这样的性能调整和识别瓶颈是一个很难解决的问题,并且经常需要大量信息来进行诊断。该过程的关键是要遍历它使用的过程,看看是否可以找到正在耗尽的资源。当您说服务器对php没有响应,但是html仍然可用时,这是一个有趣的数据点。它们的投放方式有何不同?它可能是微妙的网络缓冲区超限,或者可能比这更基本。您可能只是用尽了20个子fcgi子进程限制,它们都忙于提供数据,而新的请求却被塞入了侦听队列(并最终超时),等待fcgi php进程启动。

试图在包装盒上获得可见性时,真正的诀窍是在出现问题时登录包装盒并开始收集信息。

要查明正在运行多少个php进程,您应该可以运行以下命令:

ps auxgmww | grep php

而且,如果您想对它们进行计数而不是自己计算,则可以执行以下操作:

ps auxgmww | grep php | wc -l

回到有关性能调整的原始问题,在更改syctl.conf之前,您可能希望查看服务器在发生问题时告诉您什么,您可以通过执行以下操作来找出问题所在:

sysctl -a > sysctl.txt

然后查看您的文本文件-它包含大量数据,但是在调整任何给定值之前,请查看sysctl输出是否报告有关该可调参数当前使用的内容以及可能消耗的内容。打开文件就是一个例子,您可以在此处看到示例输出:

fs.file-nr = 3456   0   102295

这说明我们使用的是3456个文件描述符,但我们的限制为102295,因此距离我们的限制还很遥远。如果第一个数字在100000范围内,则将告诉您文件描述符即将用尽,这是您需要调整的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.