Apache 创建的线程数量约为 MaxRequestWorkers 的 3 倍

Apache 创建的线程数量约为 MaxRequestWorkers 的 3 倍

我正在为即将推出的视频游戏《博德之门 3》主持一个非盈利社区维基。由于这款游戏看起来可能会有数百万玩家,我们开始担心服务器容量。

我使用的是 Apache 2.4.57(最新稳定版本),mpm_event.conf现在使用以下内容,可能会进一步更改:

ServerLimit             8
StartServers            2

ThreadLimit             32
ThreadsPerChild         32

MaxRequestWorkers       256

MinSpareThreads         32
MaxSpareThreads         128

MaxConnectionsPerChild  0

因此,Apache 任何时候都应最多拥有 256 个工作线程。加上每个 MPM 进程的 8 个主线程和一个根主进程,我们总共可获得265。(可能因为其他原因还会多几个,但无论如何最大数额应该在这个范围内。)

然而,当我激活最大负载( )并看到由256 个工作线程ab -n 1500 -c 500 <url>提供服务的状态页面时,该命令返回了一个惊人的mod_statuspgrep -wc apache632

我也使用过命令pgrep -wal apache | wc -lps -eL | grep -c apache得到了几乎相同的结果,所以我认为我的 apache 线程计数方法应该是准确的?

对此该如何解释呢?

我的系统上的最大线程数受我的“VPS”(不是真正的 VPS,而是一个便宜的容器)限制,总共为 1100 个,因此对我来说,了解 Apache 在给定配置下实际将创建多少个线程非常重要。

这可能与 PHP FPM 有关吗?我的 FPMpool.d/www.conf当前包含以下内容(尚未调整以匹配设置mpm_event):

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

即使每个 worker 都有一个与 PHP 相关的额外线程,这也将为我们提供 512 个线程,再加上前面提到的其他几个线程(MPM 主线程 + 根进程线程),总共521,因此仍有 112 个线程未被考虑。

PHP版本是8.1.2-1ubuntu2.13。

相关内容