我们有一个 Apache 服务器 2.4.X,我们将其用作一个 Java 应用程序前端的反向代理。我们已启用 Apache 状态模块Apache 状态我们可以看到空闲工作线程的数量始终为零,因此我们的应用程序性能不佳。我们的托管服务器有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 请求工人根据我们的服务器配置。我的问题是。
改变最大请求工作者数单独到2930就可以吗?
我们需要改变吗每个子线程数 还 ?
启动服务器代表 Apache 子进程也需要更改/或者我们是否也可以根据我们的服务器配置更改它以获得最佳性能。
应该服务器限制更新的值最大请求工作者数情况是 2930 吗?
答案1
为了能够为您的服务器创建合适的配置文件,您需要了解此指令的每个配置的含义:
- 服务器限制
服务器将创建的最大进程数 - 启动服务器
服务器启动时将创建的进程数 - 每个子线程数
每个进程将创建的线程数 - 最小空闲线程数
必须存在的最小线程数。(主要在启动时) - 最大空闲线程数
服务器将保持运行的最大线程数。 - 最大请求工作者数
服务器可以同时接受的最大连接数。 - 每个子节点的最大连接数
每个进程可接受的最大连接数。这决定了子进程的生命周期。
话虽如此。通常有多少个子进程在运行?
您已经达到ServerLimit
子进程的上限了吗?
您还应该查看MaxClients
设置,以确保它能接受所有传入的请求。
如果没有可用的工作线程,则增加MaxSpareThreads
启动新的子进程将消耗CPU 周期因此,在繁忙的站点上,MaxSpareThreads
限制应该很大。
但处置旧进程也会释放你的系统内存,所以你应该限制生命时光与 的 过程MaxConnectionsPerChild
.
另一方面应用程序运行时让你的线程保持忙碌。快点和你的Java应用程序将释放线程和内存。
举例来说:接收每秒 50 个请求每个请求都需要4 秒完成。你需要200 个线程满足这一需求。
如果每个请求仅需要2 秒你可以只用100 个线程。