从http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
影响networking服务器性能的最大硬件问题是RAM。 Web服务器永远不必交换,因为交换会增加每个请求的延迟,超出用户认为“足够快”的程度。 这导致用户停止并重新加载,进一步增加负载。 您可以并应该控制MaxClients设置,以便您的服务器不会产生太多开始交换的子项。 这个过程很简单:通过顶层等工具查看进程列表,确定Apache平均进程的大小,然后将其分配到全部可用内存中,为其他进程留下空间。
主要的问题是我不明白如何知道大小,因为我没有更多的3888的httpd大小
但是,如果我们需要确定MaxClients的数量,并且我有4GB的RAM,那么我得到:972,所以我应该在MaxClients中使用900。
首先,确定你的一个Apache进程的PID。
那么你可以做这样的事情:
cat /proc/PIDHERE/status | grep VmRSS
这将产生该特定过程的(当前)居民组规模,类似于:
VmRSS: 304456 kB
这听起来就像是RAM中驻留的进程的大小。
然后规格化您的测量单位( 4GB * 1024 * 1024 = 4,194,304 KB )。 划分:
4194304 KB / 304456 KB = 13.77 processes
考虑一下,你的系统上可能还有其他的进程会消耗内存,理想的情况是你想最小化交换,所以你不可能想要configuration13个Apache MaxClients(使用我的号码),你想要less一点(根据你的判断) )。
这是一个粗略的估计; 根据负载情况,您的Apache进程的大小可能会随着时间的推移而增长
从testing场景预测maxClients是一个起点,但为了正确地解决问题,您需要开始测量应用程序在真实stream量下的performance。
假设你的Apache正在运行预叉….
设置一个cron作业来计算httpd进程的数量和“空闲”的输出。 请注意,如果您的Web服务器从本地文件提供任何内容(在很多情况下,即使不是这样),可用于caching/缓冲区的内存量也会对性能产生重大影响。 即如果你到了交换点,你的networking性能可能是可怕的!
一旦获得了一些数据,将其绘制在一个图表上,并对其进行最小二乘回归 – 外推找出达到您的httpd内存使用目标限制的客户端数量。 内存目标的起始点是物理内存的80%/内容大小的80%中的较小者。
(请注意,如果您将MinSpareServers设置为非常高的值,则结果可能不准确)
#!/bin/bash LOGFILE='/var/log/httpd/memusage' PIDS = `ps -ef | grep httpd | grep -v grep | wc -l` MEM = `free | grep 'buffers/cache'` DAY = `date '%Y-%m-%d %H:%M:%S'` echo ${DAY} ${PIDS} ${MEM} >>LOGFILE
在一个理想的世界里,你也可以在相同的日志文件中测量URL响应时间 – 但是这会变得更加复杂。