高负载下 Apache 内存与进程的最佳实践
为情所困
为情所困 2017-05-16 17:03:02
[Linux讨论组]

检查 Apache 是否运行在 prefork 的工作模式

apachectl -V | grep MPM
httpd -V | grep MPM

Server MPM:     Prefork
 -D APACHE_MPM_DIR="server/mpm/prefork"

查看当前每个进程所占用的内存

top -bn 1 | grep httpd

 56961 apache    20   0  406m  49m  40m S  1.9  0.1   0:21.92 httpd
 56963 apache    20   0  406m  53m  44m S  1.9  0.1   0:20.45 httpd
 56967 apache    20   0  402m  52m  42m S  1.9  0.1   0:20.28 httpd
 56971 apache    20   0  404m  54m  44m S  1.9  0.1   0:21.18 httpd
 56974 apache    20   0  415m  55m  42m S  1.9  0.1   0:20.07 httpd

RES column 是 Apache process 使用的内存量,左起第六列。

计算进程数

最大进程数 = Apache 所能消耗的内存总量 / 每个进程消耗内存量

设定相关参数

<IfModule prefork.c>
StartServers                30%MaxClients
MinSpareServers               5%
MaxSpareServers                 10%
ServerLimit                 256
MaxClients                  200 = 10G/50M
MaxRequestsPerChild 10000
</IfModule>

restart

  • apache 实际会在这个框架内,再控制进程。比如负载不高时候,自动减少进程。
  • apache 规划的关键在最大负载时候内存量,这一点和 nginx 不同
  • 通过最大内存量,计算出 MaxClients
  • 所有其他值均根据 MaxClients 计算出
为情所困
为情所困

全部回复(1)
PHPz

这本是一篇文章。。。删删删

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号