Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心
在阅读Nginx模块开发与架构模式一书时:
"Nginx 上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" && "我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起"
引申出此文:
绑定CPU核心:
1.taskset
taskset是LINUX提供的一个命令(ubuntu系统可能需要自行安装,schedutils package)。他可以让某个程序运行在某个(或)某些CPU上。
以下均以Nginx举例。
1)显示进程运行的CPU
命令
[oracle@oracle ~]$ taskset -p 1765
pid 1765's current affinity mask: 3 --- 转化为 2进制 11
// 1765 是oracle 进程
显示结果的3实际上是二进制3个低位均为1的bitmask,每一个1对应于1个CPU,表示该进程在2个CPU上运行
2)指定进程运行在某个特定的CPU上
[root@oracle ~]# taskset -pc 0 1765
pid 1765's current affinity list: 0,1 --- 当前系统 cpu core
pid 1765's new affinity list: 0
//注:0表示CPU将只会运行在第1个CPU上(从0开始计数)。
3)进程启动时指定CPU
命令
taskset -c /usr/sbin/nginx -c /etc/nginx/nginx.conf
2.sched_setaffinity系统调用#include <stdio.h>
#include <math.h> // -lm
#include <sched.h> double waste_time(long n)
{
double res = ;
long double i = ;
for(i=0; i <n * 200000; i++)
res += sqrt(i);
return res;
} int main(int argc, char **argv)
{
unsigned long mask = ; /* processor 0 */ /* bind process to processor 0 */
if (sched_setaffinity(, sizeof(mask), &mask) <) { // int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
perror("sched_setaffinity error\n");
} /* waste some time so the work is visible with "top" */
printf ("result: %f\n", waste_time ()); mask = ; /* process switches to processor 1 now */
if (sched_setaffinity(, sizeof(mask), &mask) <) {
perror("sched_setaffinity error\n");
} /* waste some more time to see the processor switch */
printf ("result: %f\n", waste_time ());
}
运行时 进入 top 然后摁 1 即可看到每个CPU运行状态;


Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心的更多相关文章
- 物理CPU数、CPU核心数、进程数
参考CSDN博客:https://blog.csdn.net/helloworld0906/article/details/90547159 一. 物理cpu数.cpu核数.线程数(逻辑cpu数)的关 ...
- nginx的 CPU參数worker_processes和worker_cpu_affinity使用说明
Nginx默认没有开启利用多核CPU,我们能够通过添加worker_cpu_affinity配置參数来充分利用多核CPU.CPU是任务处理,计算最关键的资源,CPU核越多.性能就越好. worker_ ...
- Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
1.查看物理CPU的个数 [root@MysqlCluster01 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc ...
- 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
- using 40 logical processors based on SQL Server licensing SqlServer CPU核心数限制问题
公司服务器是120核心cpu,但是实际应用中只有40核,原因是业务部门发现服务器cpu承载30%的时候sql 就会卡死: 然后从sqlserver 去查询,cpu核心数: SELECT COUNT(1 ...
- centos系统查看系统版本、内核版本、系统位数、cpu个数、核心数、线程数
centos查看系统版本 cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 1)查看centos内核的版本: [root@loc ...
- cpu的核心数及线程关系
CPU个数.核心数.逻辑CPU个数:一个物理CPU可以有多个核心,一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥 ...
- 如何查看服务器CPU核心数和线程数
知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任 ...
- 【转】cpu的核心数与线程数的关系
原文地址:http://www.dn580.com/dnzs/dncs/2013/10/08/172948914.html 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能 ...
随机推荐
- Ansible快速上手
ansible 是通过python 语言开发的自动化运维工具,可以实现批量系统设置.批量程序部署.批量执行命令等功能 下面是基于docker使用ansible测试示例,可以让新手快速上手使用 一.新建 ...
- FastReport 循环打印表格数据
1,在UI上拖放一个表格控件 2.设置表格头部信息,需要显示的数据以及边框颜色 3.选中表格控件设置事件代码: private void Table1_ManualBuild(object sende ...
- 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...
- 少侠学代码系列(二)->JS实现
少侠:小子,休息好了没,赶紧的 帅气的我:好了好了,嚷什么 少侠:(拔刀)嗯? 帅气的我:少侠,淡定淡定,我们来看秘籍吧,刚刚我们说了JS实现是由三个部分组成的 核心(ECMAScript),文档对象 ...
- WLST
Master Note on WebLogic Server Scripting Tool (WLST) Usage, Sample Scripts and Known Issues Deployin ...
- iOS----------输入框UITextField禁止输入空格
方法一:添加代理 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range rep ...
- 腾讯云服务器配置node环境
1:更新现有包 sudo apt-get update 2:安装依赖 sudo apt-get install vim openssl build-essential libssl-dev wget ...
- Git命令备忘
最近在用Git,查了点相关资料,逻辑依然不太明了,先整理一部分备忘,以后补充 一.本地Git与Github/码云的关联 1. 设置本地用户名,邮箱 git config --global user.n ...
- MySQL InnoDB 日志管理机制中的MTR和日志刷盘
1.MTR(mini-transaction) 在MySQL的 InnoDB日志管理机制中,有一个很重要的概念就是MTR.MTR是InnoDB存储擎中一个很重要的用来保证物理写的完整性和持久性的机制. ...
- Java 环境部署之Idea :解决Idea 中gradle编译 war 包编码不对
IDE进行Gradle操作,那么还需要设置IDE的参数.例如在IDEA中,需要打开File->Other Settings->Default Settings->Gradle,在Gr ...