Nginx性能优化之cpu优化

如何有效的使用cpu?

1.如何增大Nginx使用cpu的有效时长?
能够使用全部cpu资源:master-worker多进程架构,woker进程数量应该大于等于cpu核数
Nginx进程间不做无用功浪费cpu资源:
worker进程不应在繁忙时,主动让出cpu资源(worker进程间不应由于争抢造成资源损耗,worker进程数应该等于cpu核数)
worker不应调用一些api导致主动让出cpu(例如一些第三方库会调用阻塞的方法,使worker进程进入阻塞)
不被其他进程争抢资源:1.提高优先级占用cpu更长时间 2.减少操作系统上耗资源的非nginx进程
设置worker进程的数量

Syntax: worker_processes number | auto;
Default: worker_processes 1; 
Context: main

尽量减少进程间的切换:
1.我们的worker进程尽可能的处于R状态
2.尽可能减少进程间切换:一次进程切换的时间<5us,应减少主动切换和被动切换(增大进程的优先级)
3.绑定cpu

延迟处理新连接
使用TCP_DEFER_ACCEPT延迟处理新连接

Syntax: listen address[:port] [deferred];
Default: listen *:80 | *:8000; 
Context: server

该选项用于优化TCP协议从建立连接到接受数据的过程中服务器端的开销。在一般的监听套接字中,当三次握手的完成之后,响应的链接就会放入到accept队列中,这时服务器调用accept就会得到一个已连接的套接字,但是这个套接字上也许没有可读的数据,服务器反而要等到数据的到来。而使用这个选项后,三次握手完成之后,这个链接并不能被accept到,而是要等到真正的数据到达的时候,才能被accept得到已连接的套接字nginx开启了TCP_DEFER_ACCEPT后,每accept到一个套接字,立刻就可以对这个套接字进行读操作,提高了效率。Nginx性能优化之cpu优化_第1张图片
查看进程上下文切换:pidstat -w

设置worker进程的静态优先级

worker_priority number

多核间的负载均衡

惊群效应:多进程(线程)同时阻塞等待同一事件的时候(休眠状态),如果等待的事件发生它就会唤醒等待的所有进程或线程,但是最终只有一个进程或线程获得这个事件的控制权,其他线程或进程只能重新进入休眠状态
Nginx性能优化之cpu优化_第2张图片
default模式:它的accept_mutex是on,相当于在应用层建了一把锁来保证同一时间只有一个worker进程来处理新建立的连接
reuseport:在内核层面提供的一种负载均衡的机制
reuseport通过让所有worker进程均处于listen来实现,然后应用再做相应的负载均衡
Nginx性能优化之cpu优化_第3张图片
提高cpu的缓存命中率
Nginx性能优化之cpu优化_第4张图片
cpu的三级缓存是多核共享的,通过以下指令查看哪些核共享一个三级缓存在这里插入图片描述通过worker_cpu_affinty来进行绑定cpu来增加缓存的命中率
NUMA架构:Nginx性能优化之cpu优化_第5张图片
查看三级缓存的大小:Nginx性能优化之cpu优化_第6张图片
查看三级缓存的命中率情况,可以看到下图中缓存的命中率很高Nginx性能优化之cpu优化_第7张图片

你可能感兴趣的:(Nginx,nginx,性能优化,网络)