提问人:fsk5304 提问时间:6/13/2023 更新时间:6/14/2023 访问量:86
计算Apache响应大量请求所需的RAM
Calculating the RAM required for Apache to respond to a large number of requests
问:
我想调查一下当 apahce 处于负载状态时,单个进程消耗了多少 RAM。
我需要知道可以毫不拖延地响应 10,000 个并发 HTTP 请求的 RAM 量。
我正在使用以下版本的 Apache:
httpd -V
Server version: Apache/2.4.37 (Red Hat Enterprise Linux)
Server built: Jun 15 2022 08:27:14
Server's Module Magic Number: xxxxxxxx:xx
Server loaded: APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
我有以下设置:
<IfModule mpm_event_module>
StartServers 3
ServerLimit 3
ThreadsPerChild 25
MaxRequestWorkers 75
</IfModule>
使用上述设置,我期望有 4 个进程(1 个父进程 + 3 个子进程)。
但是由于某种原因,父进程 1 + 子进程 5 启动。
ps -ylC httpd
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S 0 877361 1 1 80 0 62512 85183 - ? 00:00:00 httpd # Parent
S 48 877362 877361 0 80 0 56156 88418 - ? 00:00:00 httpd # Child1
S 48 877363 877361 0 80 0 56228 88762 - ? 00:00:00 httpd # Child2
S 48 877364 877361 0 80 0 66152 713989 - ? 00:00:00 httpd # Child3
S 48 877365 877361 0 80 0 64104 648435 - ? 00:00:00 httpd # Child4
S 48 877366 877361 0 80 0 64104 664819 - ? 00:00:00 httpd # Child5
当发送大量 Http 请求并应用负载时,只有 Child3、4、5 RSS 增加。
ps -ylC httpd
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S 0 877361 1 0 80 0 62512 85183 - ? 00:00:00 httpd # Parent
S 48 877362 877361 0 80 0 56164 88418 - ? 00:00:00 httpd # Child1
S 48 877363 877361 0 80 0 56236 88762 - ? 00:00:00 httpd # Child2
S 48 877364 877361 0 80 0 86996 713989 - ? 00:00:02 httpd # Child3 : RSS increased
S 48 877365 877361 0 80 0 83868 648435 - ? 00:00:02 httpd # Child4 : RSS increased
S 48 877366 877361 0 80 0 85908 664819 - ? 00:00:02 httpd # Child5 : RSS increased
Child1 和 Child2 进程在做什么?
儿童3,4,5 平均RSS: (86996KB+83868KB+85908KB)/3≒85MB
综上所述,当由于一次大量访问导致负载较高时,每个进程使用 25 个线程进行处理,此时每个进程消耗 85 MB。
10000/25*85MB=34GB
这是否意味着我需要大约 34GB 的 RAM 才能立即响应 10000 个并发请求? (当然,这并不严格,但粗略的值是可以的。并假设内存是瓶颈,流量、RDBMS 和其他资源(如 CPU)都足够了。
提前致谢。
答:
0赞
fsk5304
6/14/2023
#1
以下网站使我确信我走在正确的轨道上。
https://kb.vmware.com/s/article/1036729
示例:假设使用 worker 设置了 ThreadsPerChild 25 和 MaxClients 50,并且两个子进程在满载下分别使用 128MB 的 RAM 和 5% 的 CPU。您可以大致预期 8 个子项 (MaxClients 200 = 25 x 8) 在满载下使用 1GB RAM 和 40% 的 CPU。
评论