Apache实际创建线程数约为MaxRequestWorkers配置值3倍的问题排查求助
Apache实际创建线程数约为MaxRequestWorkers配置值3倍的问题排查求助
我正在为即将上线的游戏《博德之门3》运营一个非盈利社区wiki。考虑到这款游戏可能会有数百万玩家,我们开始担心服务器容量的问题。
目前我用的是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个主线程和1个根主线程,总共应该是265个线程左右(可能还有少数其他线程,但总数大概在这个范围)。
但当我用ab -n 1500 -c 500 <url>模拟最大负载,并且通过mod_status的状态页看到256个工作线程都占满时,执行pgrep -wc apache却得到了高达632的结果。我还试过pgrep -wal apache | wc -l和ps -eL | grep -c apache,结果差不多,所以我觉得我的线程计数方法应该是准确的?
这到底是怎么回事呢?
我的系统(其实不是真正的VPS,是个便宜的容器)总线程数上限是1100,所以搞清楚给定配置下Apache实际会创建多少线程对我来说非常重要。
会不会和PHP FPM有关?我的FPM配置文件pool.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
就算每个工作线程都额外关联一个PHP线程,那总共也才512个线程,加上之前提到的那些(MPM主线程+根进程线程),总数是521,还是有112个线程找不到来源。
我的PHP版本是8.1.2-1ubuntu2.13。
备注:内容来源于stack exchange,提问作者TaylanKammer
相关产品推荐
相关产品推荐

