我们有一个 apache 服务器 2.4.X,我们在一个 Java Application 前面用作反向代理。我们启用了 Apache 状态模块Apache Status并且我们能够看到空闲工作线程的数量将始终为零,因此我们的应用程序的性能很差。我们的托管服务器有32 个内核和 64 GB 的 RAM。我们正在使用 Apache 的 mpm_worker 模块。Apache mpm_worker。我们当前的 mpm_worker 配置是:
<IfModule mpm_worker_module>
ServerLimit 150
StartServers 8
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 10000
</IfModule>
.我们浏览了Apache 性能调优文章,发现根据我们的服务器配置,我们可以有2930 个请求工作人员。我的问题是。
将MaxRequestWorkers单独更改为 2930 会起作用吗?
我们还需要更改ThreadsPerChild 吗?
代表 Apache 子进程的StartServers也需要更改/或者我们是否也可以根据我们的服务器配置更改它以获得最佳性能。
更新后的MaxRequestWorkers案例的ServerLimit值应该是 2930 是多少?
为了能够为您的服务器创建合适的配置文件,您需要了解此指令的每个配置的含义:
服务器将创建的最大进程数
服务器将在启动时创建的进程数
每个进程将创建的线程数
必须存在的最小线程数。(主要在启动时)
服务器将保持运行的最大线程数。
服务器将同时接受的最大连接数。
每个进程将接受的最大连接数。这决定了子进程的生命时间。
说了这么多。通常运行多少个子进程?
您是否已经到达
ServerLimit
子进程?您还应该查看
MaxClients
它会接受所有进入的请求的设置。如果没有可用的工作线程,则增加
MaxSpareThreads
启动新的子进程将消耗CPU 周期,因此在繁忙的站点上
MaxSpareThreads
限制应该很大。但是处理旧进程也会释放你的系统内存,所以你应该限制进程的生命周期
MaxConnectionsPerChild
。另一方面,应用程序运行时间使您的线程忙碌。更快地使用Java应用程序将释放线程和内存。
举个例子:每秒接收 50 个请求,每个请求需要4 秒才能完成。你需要200 个线程来满足这个需求。
如果每个 Request 只用了2 秒,你可以只用100 Threads覆盖它。