Apache中的MaxClients。如何知道我的处理量?


9

来自http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

影响Web服务器性能的最大硬件问题是RAM。Web服务器永远都不必交换,因为交换会增加每个请求的延迟,使之超过用户认为“足够快”的程度。这会导致用户点击停止并重新加载,从而进一步增加了负载。您可以并且应该控制MaxClients设置,以使您的服务器不会产生太多子节点而无法开始交换。这样做的过程很简单:通过使用诸如top之类的工具查看进程列表,确定平均Apache进程的大小,然后将其划分为总可用内存,为其他进程留出一些空间。

主要问题是我不知道如何知道大小,因为好吧,我在3888上都没有httpd的大小

但是,如果我们需要确定MaxClients的数量,并且我有4GB的RAM,那么我得到:972,那么我应该在MaxClients中使用900吗?


4
“我的httpd大小不超过3888” –当我说“嗯?”时,我想我为所有人讲话。
womble

Answers:


9

首先,确定您的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 MaxClient(使用我的数字),而希望少一些(由您自己决定) )。

这是一个粗略的估计。Apache进程的大小可能会随着时间的推移而增长,具体取决于负载。


1
尽管RSS不包括共享页面,但它确实包含标记为“写时复制”的页面-即,机器上有比(rss之和)/(物理内存)更多的进程空间。另请参阅我的答案-空闲空间对于获得良好性能至关重要。
symcbean 2011年

4

从测试场景预测maxClients是一个起点-但是要正确解决问题,您需要开始衡量应用程序在实际流量下的行为。

假设您的Apache正在运行前叉。

设置一个cron作业以计算httpd进程的数量和“ free”的输出。请注意,如果您的网络服务器正在处理本地文件中的任何内容(在很多情况下,即使不是这样),可用于缓存/缓冲区的内存量也会对性能产生很大影响。即,如果您要交换点,您的网络性能可能会很糟糕!

获得一些数据后,将其绘制在图表上并对其进行最小二乘回归-推断以找到达到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响应时间-但这变得越来越复杂。


对我来说,无论运行11个客户端还是服务器达到86个或151个客户端(并且服务器崩溃),缓冲区/缓存的变化都很少。您希望在MEM变量中看到什么?我有两个数字,所以想知道Ubuntu 12.04是否提供了超出您预期的功能。
PeterB 2013年

尝试“免费”运行,您会看到我的期望(2个数字)。如果确实如此,那么这些数字与不同的进程数量几乎没有差异,那么您正在运行基于事件的服务器,或者您的maxspareservers设置很愚蠢。如果您发布了输出示例以及httpd.conf的相关部分,那么也许我们会有更好的了解?
symcbean 2013年

...和“崩溃”?什么崩溃?
symcbean 2013年

抱歉,有关httpd.conf设置和示例输出,请参见pastebin.com/aHZCagVn。“崩溃”是指客户端过多,服务器内存不足并锁定。请参阅pastebin.com/fnXzBfQL了解更多信息。
PeterB

1
@PeterB似乎更可能是MySQLd导致了此问题。当内核的OOM杀手启动时,首先根据/ proc / PID / oom_score_adj的值杀死最严重的违规者。如您的输出所示,mysqld首先。您可能需要更适当地调整my.cnf中的设置,以适应VM的限制。作为/ temporary /解决方法,只是为了查看是否可以避免OOM杀手kick脚,请尝试为其他虚拟内存添加交换文件;确定真正的问题后,再消除它。
loopforever 2013年
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.