我正在使用 apache 作为代理,将流量重定向到 payara 服务器。我遇到的问题是,当服务器达到流量高峰时,响应速度很慢。我查看了我们的 mpm_worker_module,以下是配置:
<IfModule mpm_worker_module>
ServerLimit 250
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 32
MaxRequestWorkers 8000
MaxConnectionsPerChild 10000
</IfModule>
这里的数字似乎非常夸张,而且非常错误。我不是 Apache 专家,这实际上是我第一次遇到此类问题。
Apache 服务器运行在 8GB RAM 上,根据此处 stack 上的各种帖子,这不能保证 8000 MaxRequestWorkers。
主要问题是当有超过 50 个用户连接时,服务器会变得非常迟钝。任何帮助和进一步的信息都非常感谢。
答案1
该ServerLimit
值似乎太高了。Apache 文档说:
使用此指令时必须特别小心。如果 ServerLimit 设置为远高于必要值的值,则会分配额外的未使用的共享内存。如果 ServerLimit 和 MaxRequestWorkers 都设置为高于系统可以处理的值,Apache httpd 可能无法启动或系统可能变得不稳定。
一般建议ServerLimit
不要大于服务器的 CPU 核心数。这样,Apache 进程数就不会超过处理这些进程的核心数。
ThreadsPerChild
,它定义了单个 apache 进程可能产生的最大线程数,看起来还可以,但您可以尝试更高的值(例如 50)以获得更好的性能。
MaxRequestWorkers
不应大于ServerLimit
和的乘积ThreadsPerChild
,顺便说一下,上面的配置就是这种情况。假设ServerLimit
8 和 50 的乘积ThreadsPerChild
应该是 400。
MaxSpareThreads
并MinSpareThreads
在该配置中设置为默认值,无需更改。MaxConnectionsPerChild
也可以。
因此我会尝试改变这些值:
ServerLimit 8
ThreadsPerChild 50
MaxRequestWorkers 400
并重新启动 apache 服务。