最重要的性能指标如下:
1. Requests per second(RPS):Nginx 每秒处理的请求数(也就是 QPS)。
要关注响应数据在 0110KB 的不同情况的表现:
2. Connections per Second(CPS):Nginx 每秒处理的新建连接请求数,包括 HTTP 和 HTTPS。
3. Throughput:吞吐量,反应 Nginx 可以处理的数据量的大小的能力。
4. Latency:响应延迟和延迟分布。
其他关注点如下:
1. 关注 CPU 核数从 1~n 下,Nginx 性能的表现。
利用 taskset,可以将一个 wrk 进程绑定到一个 CPU 核上;可以准确地测试不同 CPU 核下的性能情况
2. 关注 Nginx 的角色是 Web Server 或者反向代理的不同表现。
CPU 负载和 CPU 软中断
top 观察 Nginx CPU 消耗情况,同时也要观察每个 CPU 核数的情况。
观察 Nginx 每个 worker 进程的 CPU 消耗是否均匀。正常而言,Nginx 的各个 worker 进程的 CPU 消耗应该都要比较均匀,如果相差 20% 以上,那么就一定存在 CPU 消耗不均的问题。
这里要引入的概念是惊群、accept_mutex、reuseport。
关注 si 软中断的数据,si 将近 100% 就有问题了,某个 CPU 消耗到 100% 还不一定是问题,只有 si 到 100% 才是真正出现性能问题。
这里要引入的概念是 CPU 软中断、中断绑定。
网卡带宽
sar -n DEV 1 100 |grep eth0
观察网卡带宽情况,看网卡带宽是否到了瓶颈。sar 观察数据的时候,一般而言,rxpck/s 和 txpck/s 只需要关注数据而不会存在瓶颈,这个的瓶颈会建立在 CPU 上;而需要关注的是 rxkB/s 和 txkB/s ,这个是判断网卡流量带宽是否有瓶颈的关键指标。
然后可以 ifconfig 查看是否有丢包之类的(overruns 参数),不仅仅是要观察服务端,还要看客户端是否有瓶颈(CPU、网卡带宽)、错误情况等。
每秒建连数
netstat -s |grep active
通过 netstat -s |grep active
获取当前活跃的连接,然后做差值。
连接队列
ss -lnt |grep 80
连接队列如果太小,那么需要调整系统和 Nginx 的配置。
磁盘 IO
iostat 1 |grep sda
sda 是设备名。
Nginx 的压测,我们还必须要观察施压端的情况,避免施压端的一些问题,从而造成 Nginx 压力上不去。Nginx 施压端推荐最好的工具就是 wrk。
施压端需要观察 wrk 的每个进程,如果 Nginx 压力压不上去,那么很大概率是出现在了 wrk 上。
需要 top -H
看 wrk 的线程情况,要保证 wrk 的每个线程都不能跑满 100%,这样才能发挥最大的性能。
wrk 压测的时候,并发数、线程数需要进行调整,要找到一个最合适的性能拐点。
wrk 短连接压测 Nginx 的时候,wrk 端的 Linux 系统参数 net.ipv4.tcp_tw_recycle 要设置为 1,让端口复用,否则会出现一些连接错误。
禁能、使能 CPU 超线程,在 Nginx 单进程的情况下,并没有明显差异。
实际压测时候, 是否关闭超线程,没有明显差异,这个说明超线程的影响并不大,这个可以作为结论,记住即可。
对于 Nginx 的压测,我们一般要分析如下几个 case。
HTTP:
HTTPS:
Throughput:
补充说明:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。