Nginx cpu亲和性调整
意义
Nginx默认没有开启利用多核cpu,我们可以通过worker_processes指令来启动多个worker,但是worker最终运行在哪些cpu核上是系统层进行调度的;我们可以通过增加worker_cpu_affinity指令来对worker所运行的cpu核做绑定,以此充分利用cpu多核cpu的性能。cpu是任务处理、计算最关键的资源,cpu核越多,性能就越好;通过将nginx worker绑定到特定的CPU上可以避免因为worker被频繁调度带来的CPU的cache miss和某些cpu核负载不均的问题。
配置方式
官方文档: http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity
配置方式1 手动绑定
需要手动写要绑定到CPU核的配置,cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭
eg: 启动4个worker,分别绑定到CPU0~CPU3上
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
or
启动2个worker;worker 1 绑定到CPU0/CPU2上;worker 2 绑定到CPU1/CPU3上
worker_processes 2;
worker_cpu_affinity 0101 1010;
配置方式2 自动绑定(建议方式)
eg: 自适应的方式来启动一定数量的worker,并且自动绑定到对应的cpu核心上,这里启动的worker数量和cpu核心数相同;
The special value auto (1.9.10) allows binding worker processes automatically to available CPUs
worker_processes auto;
worker_cpu_affinity auto;
也可以通过下面的配置方式来限制CPU资源的使用,只将nginx worker绑定到特定的一些cpu核心上:
worker_cpu_affinity auto 01010101;
调整前
通过统计nginx进程运行所在的cpu核心,可以看到某些核心上有多个nginx worker进程;并且在cpu核心和线程数量的关系是变化的,这里就说明nginx的worker进程是在cpu核心之间是动态调度的;因此这种场景下发生cpu cache miss的概率就会高很多(相比不动态调度)。
# 第一次检查
[root@thatsit conf]# ps -eo pid,ni,pri,pcpu,psr,comm|grep nginx|awk '{++s[$(NF-1)]}END{for (i in s)print "core-id",i,"\t",s[i]}'|sort -nr -k 3
core-id 20 6
core-id 22 5
core-id 5 4
core-id 3 4
core-id 0 4
core-id 25 3
core-id 2 3
core-id 7 2
core-id 4 2
core-id 27 2
core-id 24 2
core-id 6 1
core-id 26 1
core-id 11 1
core-id 1 1
[root@thatsit nginx]#
# 第二次检查
[root@thatsit conf]# ps -eo pid,ni,pri,pcpu,psr,comm|grep nginx|awk '{++s[$(NF-1)]}END{for (i in s)print "core-id",i,"\t",s[i]}'|sort -nr -k 3
core-id 4 6
core-id 0 6
core-id 1 5
core-id 7 4
core-id 3 4
core-id 6 3
core-id 5 2
core-id 27 2
core-id 24 2
core-id 23 2
core-id 26 1
core-id 25 1
core-id 21 1
core-id 20 1
core-id 11 1
[root@thatsit conf]#
PS:两次检查操作的时间间隔非常短,在几秒之内;
配置Nginx CPU亲和性
之前Nginx的worker数量是auto的(worker_processes auto;),但是没有配置worker_cpu_affinity;添加下这个配置;
> worker_cpu_affinity auto;
调整后确认
调整之后所有Nginx的Worker都会跟每一个逻辑核绑定,一个worker只会运行在一个核心上。下面统计中core-id 11上有2个nginx进程的原因是:其中一个是nginx的master进程。
[root@thatsit conf]# ps -eo pid,ni,pri,pcpu,psr,comm|grep nginx|awk '{++s[$(NF-1)]}END{for (i in s)print "core-id",i,"\t",s[i]}'|sort -nr -k 3
core-id 11 2
core-id 9 1
core-id 8 1
core-id 7 1
core-id 6 1
core-id 5 1
core-id 4 1
core-id 39 1
core-id 38 1
core-id 37 1
core-id 36 1
core-id 35 1
core-id 34 1
core-id 33 1
core-id 32 1
core-id 31 1
core-id 3 1
core-id 30 1
core-id 29 1
core-id 28 1
core-id 27 1
core-id 26 1
core-id 25 1
core-id 24 1
core-id 23 1
core-id 22 1
core-id 21 1
core-id 2 1
core-id 20 1
core-id 19 1
core-id 18 1
core-id 17 1
core-id 16 1
core-id 15 1
core-id 14 1
core-id 13 1
core-id 12 1
core-id 1 1
core-id 10 1
core-id 0 1
[root@thatsit conf]#
Nginx cpu亲和性调整的更多相关文章
- NGINX源代码剖析 之 CPU绑定(CPU亲和性)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...
- 关于CPU亲和性的测试
今天看到运维的同事在配置nginx的CPU亲和性时候,运维同事说他在所有的机器上都是按照8核的方式来配置worker进程的CPU亲和性的. 但我觉得就是有点不太对劲,就查了一下nginx的处理work ...
- Linux中CPU亲和性(affinity)
0.准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和 ...
- 【操作系统之十二】分支预测、CPU亲和性(affinity)
一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...
- 【转】 管理CPU 亲和性
简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性.Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affi ...
- linux cpu亲和性设置
1.设置进程的cpu亲和性程序如下, #Using:g++ setCpuAffinity.c -o setCpuAffinity #include<sys/types.h> #includ ...
- UIO,大页内存,CPU亲和性,NUMA机制等
Linux环境下的UIO(Userspace I/O) UIO 用户空间下驱动程序的支持机制.DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能 ...
- cpu亲和性绑定
将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率.从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和 ...
- 设置进程的cpu亲和性
在busybox中提供了一个名叫taskset的命令用于设置进程的cpu亲和性,让指定的进程或者程序在指定的cpu上面运行,该程序是通过调用sched_getaffinity和sched_setaff ...
随机推荐
- yii2.0 curd操作数据写法
一.执行原生sql查询,创建yii\db\Command insert(),update(),delete()直接构建,相应的sql语句 查: 1.查询一条 \Yii::$app-&g ...
- 五、RF中UI自动化操作基础
列表分类 1.打开浏览器 Open Browser url browser [ url | browser=firefox | alias=None | remote_url=False | ...
- 初识Nginx及其LNMP搭建
Nginx介绍 nginx www服务软件 俄罗斯人开发 开源 性能很高 web产品 大小780k c语言开发 本身是一款静态www软件,不能解析php jsp .do 最大特点 静态小文件(1m), ...
- SELECT-OPTIONS对象
1. SELECT-OPTIONS基本语法及定义 SELECT-OPTIONS通常用于参照一数据库字为建立数据输入域,其定义对象命名长度不能超过8位,其产生的屏幕对象最大输入长度为18位,语法如下: ...
- GCC 使用-C语言编译过程
任何一种高级语言,要想在机器上执行,必须翻译为机器能读懂的机器语言.编译器就相当于翻译官,将高级语言翻译为机器语言. GCC 最初只用了编译 C 语言程序,全称是 GNU C Compiler.后来扩 ...
- C++笔记(7)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理
以下内容基本来自<算法笔记>,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的. 简单模拟 就是一类"题目怎么说你就怎么做"的题目.这类题目不涉及算法,只 ...
- Window7系统安装和使用MySql
win7系统MySql安装和使用教程 首先下载mysql安装包 点击下载mysql v5.7.1 解压 下载完毕后解压在D盘 路径为D:\mysql-5.7.13-winx64,然后进入这个目录,新建 ...
- SOAP详解(转)
1. SOAP简介 1.1应用背景 对于应用程序开发来说,使程序之间进行因特网通信是很重要的.目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 H ...
- CAS单点登录系统--进阶
2.CAS服务端数据源设置 2.1需求分析 我们现在让用户名密码从我们的优乐选的user表里做验证 2.2配置数据源 (1)修改cas服务端中web-inf下deployerConfigContext ...
- 【JZOJ 3910】Idiot 的间谍网络
题面: Description 作为一名高级特工,Idiot 苦心经营多年,终于在敌国建立起一张共有n 名特工的庞大间谍网络. 当然,出于保密性的要求,间谍网络中的每名特工最多只会有一名直接领导.现在 ...