优化命令之taskset——查询或设置进程绑定CPU

这篇具有很好参考价值的文章主要介绍了优化命令之taskset——查询或设置进程绑定CPU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:taskset概述

二:安装taskset工具

2.1taskset语法

2.2taskset用法

2.2.1指定PID为8528的进程在CPU1上运行

2.2.2更改具体某一进程(或 线程)CPU亲和性

2.2.3 查看具体某一进程(或 线程)的处理器亲和性(掩码)

2.2.4为具体某一进程(或 线程)CPU亲和性指定一组范围

三:依托nginx进行验证

四:总结 

一: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(亲和性)
通过 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           输出版本信息

优化命令之taskset——查询或设置进程绑定CPU

2.2taskset用法

cat /proc/cpuinfo | grep processor
查看主机有几个核

优化命令之taskset——查询或设置进程绑定CPU

默认情况下,进程可以运行在任意的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的新关联列

优化命令之taskset——查询或设置进程绑定CPU

2.2.2更改具体某一进程(或 线程)CPU亲和性

taskset  -p   hexadecimal mask  PID/LWP
 
上面号线程可以在0~3号CPU之间允许,现在设置掩码0x11(二进制0001 0001),表示可以在0~3号CPU上允许

优化命令之taskset——查询或设置进程绑定CPU

2.2.3 查看具体某一进程(或 线程)的处理器亲和性(掩码)

查询PID(TID)= 8473 的进程可用的CPU核心,掩码形式表示
taskset -p 8473
 
查询 PID(TID)= 8473 的进程可用的CPU核心
taskset -pc 8473

优化命令之taskset——查询或设置进程绑定CPU

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参数

优化命令之taskset——查询或设置进程绑定CPU

三:依托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;

优化命令之taskset——查询或设置进程绑定CPU

这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU

优化命令之taskset——查询或设置进程绑定CPU

查询 nginx 的  pid

ps -C nginx -o pid

优化命令之taskset——查询或设置进程绑定CPU

未重启nginx

优化命令之taskset——查询或设置进程绑定CPU 

重启nginx

4个服务各自在不同的cpu上运行

优化命令之taskset——查询或设置进程绑定CPU

修改回来服务在cpu上随机运行

优化命令之taskset——查询或设置进程绑定CPU 

优化命令之taskset——查询或设置进程绑定CPU 

四:总结 

taskset 查询或设置进程(线程)绑定CPU(亲和性)
通过 taskset 命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行

线程是最小的内核执行调度单元,因此,准确地说是将某个线程与某个CPU核心绑定,而非某个进程。
taskset 是依据 线程PID(TID)查询或设置线程的CPU亲和性(与哪个CPU核心绑定)文章来源地址https://www.toymoban.com/news/detail-414894.html

到了这里,关于优化命令之taskset——查询或设置进程绑定CPU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】查看系统各种信息的常用命令 (CPU、内存、进程、网口、磁盘、硬件、等等)

    Linux是一种开源的类Unix操作系统,它有很多不同的发行版,如Ubuntu、CentOS、Debian等。Linux系统提供了很多命令行工具,可以让用户方便地查看和管理系统的各种信息,如硬件配置、内存使用、进程状态、网络连接等。本文将介绍一些常用的命令,以及它们的用法和示例。 使用

    2024年02月15日
    浏览(34)
  • 【linux 多线程并发】线程属性设置与查看,绑定CPU,线程分离与可连接,避够多线程下的内存泄漏

    ​ 专栏内容 : 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的

    2024年02月03日
    浏览(35)
  • Android 性能优化 命令行查看CPU使用率

    本文介绍cpu使用率概念,和使用ps命令、top命令和dumpsys cpuinfo命令来查看cpu使用率,帮助我们了解应用程序在运行过程中的整体状态和各个线程状态。 CPU利用率指系统中CPU的使用情况,通常以百分比表示CPU使用率。 在多核情况下,CPU使用率指的是所有核心的平均使用率。 通

    2024年02月05日
    浏览(44)
  • 优化命令之top——实时显示进程动态/查看进程信息

    目录 一:top简介 二:启动TOP 2.1第一行含义 2.2第二行含义 2.3第三行含义 2.4第四行含义 2.5第五行含义 2.6第六行含义  三:top常用按键 3.1按 Z 键更改输出的颜色。我发现这让输出更容易被眼睛看到  3.2 按1键可查看系统上每个 CPU 内核的图形表示。反复按1以评估 CPU 内核的内

    2024年02月02日
    浏览(28)
  • Linux修改目录文件的属主(属组)命令、设置宿主目录并删除原来宿主目录

    1.属主(属组)的目的: 2.属主(属组)的用处: 3.修改属主和属组的用途: 1. 权限控制: 2. 用户管理: 3. 文件管理: 4.修改目录或文件的属主和属组的命令: 1. chown命令: 2. chgrp命令: 5.设置宿主目录并删除原来宿主目录: 1.设置宿主目录的原因: 1. 数据持久性: 2. 共享数

    2024年02月09日
    浏览(37)
  • FT2000+ qemu kvm openEuer crash 分析 频繁设置CPU online及cgroup导致进程卡死、不调度故障

    https://hknaruto.blog.csdn.net/article/details/130498823 内核版本信息  突然就坚挺起来,长时间稳定运行 待续 十几分钟后,终端已卡死 ,两个终端均无响应,但是gnome还活着,图形界面还能动 重启虚拟机 kvm内,安装好crash分析环境 下载安装debuginfo包 http://debuginfo.centos.org/8/aarch64/Pack

    2024年02月02日
    浏览(36)
  • Linux操作系统设置图形化界面及目录和文件管理常用命令

    目录 1.安装图形化界面  2.开机启动图形化界面 dos界面与图形化界面切换快捷键 3.Windows与Linux文件系统的差别  4.Linux文件系统常用命令  5.使用pwd命令显示工作目录路径 6.绝对路径和相对路径  7.使用ls命令列出目录和文件信息 Linux默认情况下是不会安装图形界面的,所以需要

    2024年02月05日
    浏览(46)
  • 可测含多进程的app-- python调用adb命令获取Android App应用的性能数据:CPU、GPU、内存、电池、耗电量(含python源码)

    python脚本通过os.popen()方法运行adb命令,获取性能数据,将性能数据保存在csv文件并算出均值、最大值、最小值。 本脚本可测试一个app包含多个进程的场景,可以获取 每个进程的性能数据 。 2.1 软件环境 具备python环境,Android环境 需要python库:os, csv, time, datetime, sys,time,panda

    2024年02月13日
    浏览(33)
  • Redis服务端优化(持久化配置、慢查询、命令及安全配置、内存配置)

    漏洞:Redis未授权访问配合SSH key文件利用分析-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞出现的核心的原因有以下几点 Redis未设置密码 利用了Redis的config set命令动态修改Redis配置 使用了Root账号权限启动Redis 查看客户端缓冲信息的命令 info clients client list

    2024年01月23日
    浏览(31)
  • 文盘 Rust -- tokio 绑定 cpu 实践

    tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程序与特定的 cpu core 绑定该怎么处理呢?这次我们来聊聊这个话题。 首先我们先写一段简单的多任务程序。 程序非常简单,首先构造一个 tokio runtime 环境,然后派生多个 tokio 并发,每个并发执

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包