如何计算 apache 中的 MaxClient 值?

如何计算 apache 中的 MaxClient 值?

我想为我的生产服务器设置 Apache 中 MaxClient 的最佳值。计算此值时应考虑哪些参数?

答案1

请参阅Apache 性能调优指导。

引用

"You can, and should, control the MaxClients setting so that your server does not spawn   
so many children it starts swapping. This procedure for doing this is simple: determine 
the size of your average Apache process, by looking at your process list via a tool such 
as top, and divide this into your total available memory, leaving some room for other 
processes."

答案2

补充@Sameer 的回答,我读了很多这个主题,我所做的是:

  1. 获取 Apache 进程平均大小:

    server# ps -ylC apache2 --sort:rss
    
    S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
    S    33  6233 25895  0  80   0  7432 72802 poll_s ?        00:00:00 apache2
    S    33  6250 25895  0  80   0  7432 72802 poll_s ?        00:00:00 apache2
    S    33  6278 25895  0  80   0  7432 72802 poll_s ?        00:00:00 apache2  
    S    33  6280 25895  0  80   0  7432 72802 poll_s ?        00:00:00 apache2 
    S    33  6577 25895  0  80   0  7432 72802 poll_s ?        00:00:00 apache2
    S    33  6299 25895  0  80   0  7772 72891 poll_s ?        00:00:00 apache2
    S    33  6295 25895  0  80   0  7776 72891 poll_s ?        00:00:00 apache2
    

    正如您在 SZ 列中看到的,我的 Apache 进程大小约为 73 MB

  2. 制定以下公式

    MaxClients: ((Total_Memory)(1024)(MB) - Other_processes_memory) / 73
    

    例如:我有 16 GB 的 RAM,我可能会留出 2 GB 供其他进程使用

    MaxClients: ((16*1024) - 2048) / 73
    MaxClient: 196 
    

这就是我所使用的,我的服务器运行良好。

您必须考虑到我的 Apache 进程有点重,因此您可能拥有大约 50 MB 或更少的进程。

问候,

对于所有 Apache 进程,您的 SZ 都略有相同。就我而言,我的值在 23 到 212 Mb 之间

在此处输入图片描述

我应该在您的公式中使用什么值?

顺便说一下,在 Apache 2.4 中,MaxClients 已重命名为 MaxRequestWorkers。您的公式对于这个新参数仍然有效吗?

问候

答案3

tachomi 的答案并不是过于全面,但似乎是一种开始估算的合理方法。

除此之外,这将帮助您了解 Apache 当前正在消耗的一些资源:

ps aux | grep 'httpd' | awk '{count = NR;} END {print count " Apache processes";}'
ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{sum += $1;} END {print sum " MB total mem usage";}'
ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB avg mem usage";}'

相关内容