我正在运行 Apache 2.2。我有 10 个apache
进程在运行,这会消耗我有限的资源。
我已经搜索了控制生成多少个进程的配置选项,但我需要一些帮助。是吗MaxRequestWorkers
?是吗ThreadsPerChild
?还是别的什么?(我的配置文件中似乎都没有设置。)
以下是我的一个流程的示例apache
:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
5 S 33 26099 25513 0 80 0 - 56951 poll_s ? 1:42 /usr/sbin/apache2 -k start
编辑:
抱歉。我运行的是 Apache 2.2,而不是 2.4。
已启用 mods 的列表:
lrwxrwxrwx 1 root root 28 Sep 5 2014 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root 28 Sep 5 2014 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root 33 Sep 5 2014 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root 33 Sep 5 2014 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root 36 Sep 5 2014 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root 38 Sep 5 2014 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root 33 Sep 5 2014 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root 33 Sep 5 2014 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root 32 Sep 5 2014 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root 32 Sep 5 2014 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root 26 Sep 5 2014 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root 30 Sep 5 2014 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root 30 Sep 5 2014 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root 26 Sep 5 2014 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root 26 Sep 5 2014 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root 26 Sep 5 2014 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root 27 Sep 5 2014 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root 27 Sep 5 2014 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root 34 Sep 5 2014 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root 34 Sep 5 2014 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root 32 Sep 12 2014 passenger.conf -> ../mods-available/passenger.conf
lrwxrwxrwx 1 root root 32 Sep 12 2014 passenger.load -> ../mods-available/passenger.load
lrwxrwxrwx 1 root root 27 Sep 5 2014 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 Sep 5 2014 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root 33 Sep 5 2014 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root 33 Sep 5 2014 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root 40 Sep 14 2014 rewrite.load -> /etc/apache2/mods-available/rewrite.load
lrwxrwxrwx 1 root root 31 Sep 5 2014 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root 31 Sep 5 2014 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root 36 Jun 7 2015 ssl.conf -> /etc/apache2/mods-available/ssl.conf
lrwxrwxrwx 1 root root 36 Jun 7 2015 ssl.load -> /etc/apache2/mods-available/ssl.load
lrwxrwxrwx 1 root root 29 Sep 5 2014 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root 29 Sep 5 2014 status.load -> ../mods-available/status.load
答案1
这取决于你的 apache 使用的是哪个 mpm 模块(mpm_worker/mpm_prefork/mpm_event)。如果你不确定,那么发布cat /etc/apache2/mods-enabled/mpm*.conf
显示以下数量的输出:启动服务器/最小备用服务器/最大备用服务器,最大请求工作者数有可能每个子线程数和线程限制。如果您的 Linux 发行版中的文件名不同,请发布您启用的模块的输出ls -l /etc/apache2/mods-enabled
。
它看起来应该像这样,并且自我解释(Debian,Apache2.4):
root@debian:/# cat /etc/apache2/mods-enabled/mpm*.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
# same as MaxClients in Apache 2.2
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
文档说明(如上面的链接所述):
您可以(也应该)控制 MaxClients 设置,这样您的服务器就不会生成太多子进程而开始交换。执行此操作的过程很简单:通过 top 等工具查看进程列表,确定平均 Apache 进程的大小,并将其除以总可用内存,为其他进程留出一些空间。 https://httpd.apache.org/docs/2.2/misc/perf-tuning.html
例子:
Tasks: 207 total, 1 running, 206 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.4 us, 0.8 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16307588 total, 14360744 free, 1188636 used, 758208 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 14686936 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6567 www-data 20 0 296028 15288 5616 S 0.0 0.1 0:00.07 apache2
6569 www-data 20 0 296040 15360 5676 S 0.0 0.1 0:00.08 apache2
6571 www-data 20 0 295996 15200 5676 S 0.0 0.1 0:00.07 apache2
6572 www-data 20 0 296028 15348 5676 S 0.0 0.1 0:00.08 apache2
6573 www-data 20 0 296040 15356 5676 S 0.0 0.1 0:00.07 apache2
运行上面链接页面的酷脚本得到以下结果:
root@debian:~# ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 100.711
Average Process Size (MB): 16.7852
注意:“平均进程大小”是您运行时的“RES”值top
。
为了确定MaxClients
(又名MaxRequestWorkers
),我需要计算:
Maxclients=X/Y where
X=Max. Available Memory Reserved for Apache
Y=Average Process Size
答案2
运行以下命令检查你的 apache 正在使用哪个 mpm 模块(mpm_worker/mpm_prefork/mpm_event):httpd -V
利用这些信息,访问 Apache 网站(例如 prefork 或 worker 或 event https://httpd.apache.org/docs/2.4/mod/prefork.html 或 worker.html 或 event.html) 来查看所需的配置。我使用 prefork 并采用以下设置:
<IfModule mpm_prefork_module>
ServerLimit 800
StartServers 5
MinSpareServers 10
MaxRequestWorkers 800
</IfModule>
在哪里
- ServerLimit=MaxRequestWorkers 的最大值
- StartServers=启动时创建的子服务器数量
- MinSpareSevers=最小空闲进程数,即不处理请求的进程(默认值=5)
- MaxSpareServers=空闲进程的最大数量,即不处理请求的进程(默认值=10)。如果空闲进程>MaxSpareServers,父进程将终止多余的进程。由于未设置,因此我使用默认值
- MaxRequestWorkers=同时服务的请求数限制