优化命令之taskset——查询或设置进程绑定CPU
目录
2.2.3 查看具体某一进程(或 线程)的处理器亲和性(掩码)
2.2.4为具体某一进程(或 线程)CPU亲和性指定一组范围
一:taskset概述
我的 Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态
不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务,CPU#0还需要处理每秒网卡中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升
了解俩个名词:
SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构
CPU affinity:中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行
二:安装taskset工具
yum install util-linux -y
调整进程优先权和利用taskset有效控制cpu资源
taskset 查询或设置进程(线程)绑定CPU(亲和性)
通过 taskset 命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行。
线程是最小的内核执行调度单元,因此,准确地说是将某个线程与某个CPU核心绑定,而非某个进程。
taskset 是依据 线程PID(TID)查询或设置线程的CPU亲和性(与哪个CPU核心绑定)
2.1taskset语法
taskset [options] mask command [arg]...
taskset [options] -p [mask] pid
常用参数:
-a, --all-tasks 操作所有的任务线程
-p, --pid 操作已存在的pid
-c, --cpu-list 通过列表显示方式设置CPU(逗号相隔)
-V, --version 输出版本信息
2.2taskset用法
cat /proc/cpuinfo | grep processor
查看主机有几个核
默认情况下,进程可以运行在任意的CPU核心上(0-3)
2.2.1指定PID为8528的进程在CPU1上运行
taskset -pc 1 6550 查看进程(或 线程)允许允许CPU范围使用-c参数
pid 6550's current affinity list: 0-3
###Pid 6550的当前关联列表:0-3
pid 6550's new affinity list: 1
###id 6550的新关联列
2.2.2更改具体某一进程(或 线程)CPU亲和性
taskset -p hexadecimal mask PID/LWP
上面号线程可以在0~3号CPU之间允许,现在设置掩码0x11(二进制0001 0001),表示可以在0~3号CPU上允许
2.2.3 查看具体某一进程(或 线程)的处理器亲和性(掩码)
查询PID(TID)= 8473 的进程可用的CPU核心,掩码形式表示
taskset -p 8473
查询 PID(TID)= 8473 的进程可用的CPU核心
taskset -pc 8473
mask是16进制 f代表15 转为2进制就是1111
0x0F(十六进制) => 1111(二进制),最右起第一个1表示CPU核心#0,第二个1表示CPU核心#1…设置 PID(TID)= 10878 的线程可用的CPU核心到#0、#2上
只要taskset成功返回了,那就表示绑核一定成功了,即该进程已被绑到指定的核上面,而且taskset命令会显示原来的绑核(原来的可能是系统默认分配的核)情况,以及新的绑核情况
2.2.4为具体某一进程(或 线程)CPU亲和性指定一组范围
taskset -cp 1,2 8473 使用-c参数
三:依托nginx进行验证
将nginx 绑定CPU
安装nginx 服务
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2、创建运行用户
useradd -M -s /sbin/nologin nginx
3、编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/''.6hvcf
cd nginx-1.12.0/
./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx
--with-http_stub_status_module
make && make install
4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
vim /usr/local/nginx/conf/nginx.conf
使用nginx,是因为nginx提供了更精确的控制。
在conf/nginx.conf中,有如下一行:
worker_processes 1;
这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU
查询 nginx 的 pid
ps -C nginx -o pid
未重启nginx
重启nginx
4个服务各自在不同的cpu上运行
修改回来服务在cpu上随机运行
四:总结
taskset 查询或设置进程(线程)绑定CPU(亲和性)
通过 taskset 命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行
线程是最小的内核执行调度单元,因此,准确地说是将某个线程与某个CPU核心绑定,而非某个进程。
taskset 是依据 线程PID(TID)查询或设置线程的CPU亲和性(与哪个CPU核心绑定)
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击