我们使用Ubuntu 16 LTS作为具有apache2.4,18GB RAM和20 CPU的网络服务器。我发出了以下命令
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 72012
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 72012
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
阿帕奇版本
$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2018-04-18T14:53:04
当前使用的阿帕奇模块
$ a2query -M
prefork
MPM 预分叉模块与默认设置一起使用
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
我已经通过JMeter压力测试器检查了最大apache进程数,它不会扩展超过1500个进程。还要检查当达到 1500 个进程时,RAM 仍然有足够的空间(即仍然剩下 9GB(。
进程计数由以下命令标识
ps -ef | grep apache2 | wc -l
需要指导来增加 1500 个数字,因为我们需要坚持使用MPM_prefork模块。
尝试更改配置中的ServerLimit,请参阅此处。
您还可以考虑查看 apache2buddy 以获取有关调整配置的指导。
旁注
请注意,硬限制为 15000。
摘自 Apache 的文档
这里 将 ThreadLimit20000(或 ThreadLimit 100000 与事件,ThreadLimit 15000 与 mpm_winnt(编译到服务器中的硬限制。这是为了避免错别字造成的恶劣影响。若要将其进一步增加到超过此限制,需要修改 mpm 源文件中 MAX_THREAD_LIMIT 的值并重建服务器。