鲲鹏社区首页
中文
注册
通过OS和nginx参数优化提升nginx性能案例分享

通过OS和nginx参数优化提升nginx性能案例分享

nginx网络

发表于 2025/04/22

0

作者|黎炳材


应用信息

软件名称

版本

说明

nginx

1.9.1

nginx

  

性能瓶颈分析

1. 网络性能分析

该模块属于路由转发模块,涉及大量的网络包转发。
KVM默认的虚拟机网卡队列为1,导致网卡软中断集中在单核CPU。

使用命令top 1查看每个核心的情况 : 

发现只有一个核心cpu占用在70%, 其他核心闲置。
可以发现网卡队列较小,没有发挥多核优势。


2. Nginx进程资源分配不均

通过top查看,Nginx进程在多核心上分布不均衡,有些CPU利用率高达95%,有的低至1.0%,CPU负载不均衡导致整机性能不理想


3. 缓存资源存在瓶颈

   该模块的日志内容error.log和access.log文件,一次压测大概会有28G的内容写入,涉及大量IO读写操作

   当前硬盘为SAS机械盘,读写性能较差。可以先将数据写入缓存,待积累一定量后再批量异步写入磁盘,从而减少频繁的磁盘读写操作,缓解IO瓶颈,提升性能。


性能问题解决

1. 调整网卡队列解决网络问题

ethtool -L enp4s0 combined 8, 给指定网卡的队列设置成8

设置8个队列是因为CPU软中断总负载约240%,一个队列无法处理完。8个队列已经较为平衡的解决了负载问题,使得每个队列压力在30%左右。

2. 调整nginx参数解决进程不均问题

 允许多个进程或线程共享端口 打开nginx.conf,在listen列中加入reuseport, 内核能够依据特定的算法(例如哈希算法)把新的连接均匀地分配给各个工作进程,从而实现工作进程间的负载均衡。这样可以充分利用多核 CPU 的性能,避免某个工作进程负载过高,而其他工作进程处于空闲状态的情况。

3. 缓解IO资源瓶颈问题

在 Nginx 中,日志参数buffer的默认值是64k, flush默认值是1s, 可以根据实际资源和IO负载情况进行调整。

打开nginx.conf,在access_log一行中末尾增加参数,经过测试发现对于当前资源规格设置 buffer=600m flush=60s时效果较好,可显著减少磁盘写入频率,降低 I/O 负载,并且内存空间仍然充足。

这样nginx 的访问日志会先存于大小为 600MB 的缓冲区中,每隔 60 秒,缓冲区里的日志数据就会被刷新到 /var/log/nginx/access.log 文件, 可以缓解IO瓶颈问题。


调优结果

操作

收益

允许多个进程或线程共享端口/打开互斥锁

正收益

开启access log缓存

正收益

调整网卡队列数为8

正收益

实施调优之后压测的TPS提升10%, 性能表现符合预期。