wrk压测下Nginx Worker进程CPU使用率未达100%的原因排查
Nginx压测CPU使用率无法突破70%的排查与分析
压测场景与异常现象
- 压测工具:wrk
- 初始压测命令:
wrk -t1 -c40 -d50s http://127.0.0.1:80 - 调整后压测命令:
wrk -t10 -c400 -d50s http://127.0.0.1:80
无论调整wrk的线程数与并发连接数,通过top观测到Nginx Worker进程的CPU使用率始终无法突破70%。
已完成排查
- 阻塞推测验证:
初步推测Worker进程因内核阻塞调用被调度,导致CPU无法跑满,但使用bcc的offcputime工具生成的offcpu火焰图显示,50秒压测周期内目标进程仅出现1ms的offcpu事件,与理论预期的15秒(30%*50秒)严重不符。 - 工具有效性确认:
已执行tar -xf ../clang+llvm-17.0.2-powerpc64-ibm-aix-7.2.tar.xz验证offcputime工具工作正常。
后续排查方向
- 软中断瓶颈检查:执行
cat /proc/softirqs观测网络软中断处理情况,若软中断占用过高,会抢占Worker进程的CPU时间,导致其无法跑满。 - Nginx配置验证:确认
worker_processes是否与CPU核心数匹配,worker_connections是否足够,是否存在limit_conn、limit_req等限流配置限制请求处理。 - 系统资源瓶颈排查:通过
vmstat、iostat检查磁盘IO、内存使用情况,若存在IO瓶颈,可能间接导致进程无法高效利用CPU。 - 客户端瓶颈验证:确认wrk客户端自身是否耗尽资源(如客户端CPU、本地端口数),无法发起更多请求,导致Nginx无足够负载。
- 内核参数检查:查看TCP相关参数(如
tcp_max_syn_backlog、somaxconn)是否存在限制,导致请求无法及时被Nginx接收处理。
内容的提问来源于stack exchange,提问作者zwy
相关产品推荐
相关产品推荐

