![apache 中的 MaxClients。如何知道我的进程的大小?](https://linux22.com/image/555238/apache%20%E4%B8%AD%E7%9A%84%20MaxClients%E3%80%82%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E6%88%91%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
从http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
影响 Web 服务器性能的最大硬件问题是 RAM。Web 服务器永远都不应该进行交换,因为交换会增加每个请求的延迟,超过用户认为“足够快”的程度。这会导致用户点击停止并重新加载,从而进一步增加负载。您可以(也应该)控制 MaxClients 设置,以便您的服务器不会生成太多子进程而开始进行交换。执行此操作的过程很简单:通过 top 等工具查看进程列表,确定平均 Apache 进程的大小,并将其除以总可用内存,为其他进程留出一些空间。
主要问题是我无法理解如何知道大小,因为我知道 httpd 的大小不超过 3888
但是,如果我们需要确定 MaxClients 的数量,并且我有 4GB 的 RAM,所以我得到:972,所以我应该在 MaxClients 中使用 900?
答案1
首先,确定其中一个 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
考虑到您的系统上可能正在运行其他进程,这些进程也会消耗内存,并且理想情况下您希望尽量减少交换,因此您可能不希望配置 13 个 Apache MaxClients(使用我的数字),您希望配置更少的数量(由您自行决定)。
这是一个粗略的估计;您的 Apache 进程的大小可能会随着时间的推移而增长,具体取决于负载。
答案2
根据测试场景预测 maxClients 是一个起点 - 但要正确解决问题,您需要开始测量应用程序在实际流量下的表现。
假设你的 apache 正在运行 pre-fork....
设置一个 cron 作业来计算 httpd 进程的数量和“free”的输出。请注意,如果您的 Web 服务器正在提供本地文件中的任何内容(在很多情况下,即使没有),缓存/缓冲区可用的内存量将对性能产生很大的影响。也就是说,如果您到了交换的地步,您的 Web 性能可能会很糟糕!
获得一些数据后,将其绘制在图表上并对其进行最小二乘回归 - 推断出达到 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 响应时间 - 但这变得更加复杂。