linux 多核CPU性能调优

常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;

这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;

查看系统下cpu信息: cat /proc/cpuinfo

taskset就可以帮我们完成这项工作,而且操作非常简单;

利用 taskset 可以充分利用多核cpu的好处,可以让某个程序或脚本,运行在某个具体的cpu上。

这个工具系统可能没有默认安装:,rpm包名util-Linux

#taskset --help
taskset (util-linux 2.13-pre7)
usage: taskset [options] [mask | cpu-list] [pid | cmd [args...]]
set or get the affinity of a process

-p, –pid operate on existing given pid
-c, –cpu-list display and specify cpus in list format
-h, –help display this help
-v, –version output version information

查看pid和哪个CPU亲和:

taskset -pc pid

例子:

taskset -pc 3687

返回pid 3687‘s current affinity list:0,1,2,3

taskset -pc 0-1 3687或者taskset -pc 0,1 3687

设置线程3678和0,1两个cpu内核亲和

1)显示进程运行的CPU

命令taskset -p 21184

显示结果:

pid 21184‘s current affinity mask: ffffff

注:21184是redis-server运行的pid

显示结果的ffffff实际上是二进制24个低位均为1的bitmask,每一个1对应于1个CPU,表示该进程在24个CPU上运行

1:让某个程序运行在特定cpu上面

taskset -c 0 sh wade.sh

2:切换某个进程到特定的cpu上。

taskset -pc 0 12345

比如你有一个cpu是4 core你可以这样写你的脚本

#!/bin/bash

taskset -c 0 sh a.sh &

taskset -c 1 sh b.sh &

taskset -c 2 sh c.sh &

taskset -c 3 sh d.sh &

应该可以充分利用你的cpu了。

对运行中的进程,文档上说可以用下面的命令,把CPU#1 #2 #3分配给PID为2345的进程:

# taskset -cp 1,2,3 2345

但我尝试没奏效,于是我关掉了MySQL,并用taskset将它启动:

# taskset -c 1,2,3 /etc/init.d/mysql start

二、配置nginx绑定CPU

刚才说nginx除外,是因为nginx提供了更精确的控制。

conf/nginx.conf中,有如下一行:

worker_processes  1;

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

worker_processes  3;
worker_cpu_affinity 0010 0100 1000;

这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。

重启nginx后,3个工作进程就可以各自用各自的CPU了。

应用实例:

在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大。话说以前我曾经记录过软中断导致过类似的问题,但是本例中可以排除嫌疑。
让我们在一台四核服务器上采样分析一下数据确认看看是否存在负载不均衡问题:
shell> mpstat -P ALL 1 10

CPU    %usr   %nice    %sys %iowait    %irq   %soft ... %idle
all   17.57    0.03    1.78    0.00    0.35    0.23 ... 80.04
 0   43.17    0.00    4.12    0.00    1.41    1.00 ... 50.30
 1    9.80    0.00    0.81    0.00    0.00    0.00 ... 89.39
 2    9.31    0.00    1.20    0.00    0.00    0.00 ... 89.49
 3    7.94    0.10    0.80    0.00    0.00    0.00 ... 91.16

如上命令的含义是每秒运行一次 mpstat,一共采样 10 次取平均值,可以明显看出 CPU0 的空闲 idle 明显小于其它 CPUx,而且大部分都消耗在了用户态 usr 上面。
再让我们通过 pidstat 来确认一下是不是 PHP-FPM 导致的 CPU0 负载问题:
shell> pidstat | grep php-fpm | awk ‘{print $(NF-1)}‘ | sort | uniq -c

157 0
34 1
34 2
32 3

可见分配给 CPU0 的 PHP-FPM 进程比其他三个 CPUx 总和还要多。为什么大部分进程被分配给了 CPU0?我模模糊糊有一些印象是因为操作系统偏爱使用 CPU0,但我暂时也没找到实质的线索可以佐证,如果有人知道,麻烦告诉我。
问题总要解决,既然 PHP-FPM 没有类似 Nginx 那样 CPU 亲缘性(affinity)绑定的指令,那么我们可以使用 taskset 绑定 PHP-FPM 进程到固定的 CPUx 来解决问题:
#!/bin/bash

CPUs=$(grep -c processor /proc/cpuinfo)
PIDs=$(ps aux | grep "php-fpm[:] pool" | awk ‘{print $2}‘)

let i=0
for PID in $PIDs; do
   CPU=$(echo "$i % $CPUs" | bc)
   let i++

taskset -pc $CPU $PID
done

如上脚本运行后,让我们再来看看各个 CPU 负载分配情况如何:
shell> mpstat -P ALL 1 10

CPU    %usr   %nice    %sys %iowait    %irq   %soft ...  %idle
all   15.73    0.03    1.61    0.00    0.20    0.23 ...  82.20
 0   16.28    0.10    1.62    0.10    0.81    0.91 ...  80.18
 1   16.16    0.10    1.51    0.00    0.00    0.10 ...  82.13
 2   14.46    0.10    1.71    0.00    0.00    0.00 ...  83.73
 3   15.95    0.00    1.71    0.00    0.00    0.00 ...  82.35

终于平均了,不过需要提醒的是,一旦 PHP-FPM 处理的请求数超过 max_requests 的设置,那么对应的进程将自动重启,先前的 taskset 设置也将失效,所以为了一直有效,我们需要把 taskset 脚本添加到 CRON 配置中去,例如每分钟自动设置一遍!
本文把 PHP-FPM 进程平均分配给了 0,1,2,3 四个 CPU,实际操作的时候可以更灵活一些,比如前文我们提过,操作系统总是偏爱使用 CPU0,如果 CPU0 的负载已经很高了的话,那么我们不妨把 PHP-FPM 进程平均分配给 1,2,3 三个 CPU。

时间: 2024-10-10 23:27:31

linux 多核CPU性能调优的相关文章

Linux服务器常用性能调优工具

Linux服务器的性能往往受到CPU.内存.磁盘I/O.网络带宽等方面的影响,对于每个Linux后台服务器开发人员来说,掌握一些常用的性能调优工具是十分有必要的.下图几乎涵盖了一个系统的方方面面,图中的工具都可称得上是性能调优方面的“瑞士军刀”,短小精干.功能强大. 1.strace 在Linux中,进程不能直接访问硬件设备,当进程需要进行读取磁盘文件,接收网络数据等访问硬件设备 的操作时,必须由用户态模式切换至内核模式,通过系统调用访问硬件设备.strace可用来跟踪程序使用的底层系统调用,可

基于Linux的WebSphere性能调优与故障诊断

一.关于was数据源等问题的配置 (1)关于was数据源连接池的最大.最小配置多大合适?怎样去计算? (2)关于JVM的配置,64位系统,64位WAS,最值小和最大配置多大最优?怎样去计算? (3)应用服务器线程池,怎么样配置最优? 怎样去计算? (4)linux上安装was完成后,linux必须配置哪些参数,was性能最优?如果不配置的话,性能影响大吗 数据库连接池建议初始化调优10-100.was连接池参数说明及调优V1.0:http://www.webspherechina.net/Doc

Linux系统-CPU中央处理器调优

本文源链接地址:https:www.93bok.com 首先来说说CPU处理数据的方式: 1.批处理:顺序处理请求(切换次数少,吞吐量高) 2.分时处理:时间片,把请求分为一个一个的时间片,一片一片的分给CPU处理,我们现在使用的x86就是这种架构(如同"独占",吞吐量小) 3.实时处理 比如: 批处理--------以前的大型机上所采用的系统,需要把一批程序事先写好,然后计算得出结果 分时处理------现在流行的PC机和服务器都是采用这种运行模式,就是把CPU的运行分成若干时间片分

ios 性能优化之CPU性能调优

分析CPU使用在您的应用程序 来源:http://www.cnblogs.com/chensheng12330/p/3947585.html 确保有效地使用所有可用资源为应用程序编写代码时是非常重要的.其中最重要的是你的CPU资源. 有效地使用cpu允许应用程序运行得更快和更有效的. 即使你将编写应用程序特定的平台,记住,即使是同一类型可以有不同的CPU功能的通用平台. CPU跟踪模板为您提供的方法来确定你的应用程序如何使用多个核心,你使用多少能源和其他资源的测量. 寻找瓶颈与性能监视器计数器

Linux服务器的性能调优理论篇

一.网站架构相关 (1)评估网站性能涉及的专业名词术语 1.PV(Page View) PV即访问量,中文翻译为页面浏览,代表页面浏览量,用户每刷新一次就会计算一次.PV的具体计算方法是:从浏览器发出一个对网络服务器的请求(Request),网络服务器接到这个请求后,会将该请求对应的一个页面(Page)发送给浏览器,从而产生一个PV. 2.UV(Unique Visto) UV即独立访问,访问网站的一台电脑客户端为一个访客,如果按天计算,程序统计会从0:00至24:00这段时间内的电脑客户端,且

linux概念之性能调优

vm

Linux性能调优,从优化思路说起

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache.tomcat.mysql.php等等,开源软件的最大理念是自由.开放,那么linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能.因此,谈到性能问题,主要实现的是linux操作系统和应用程序的最佳结合. 一.性能问题综述 系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.Linux系统管理员可能经常会遇到系统不稳定.响

Linux性能调优的优化思路

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的有apache.tomcat.nginx.mysql.php等等,开源软件的最大理念就是自由.开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以低廉的成本,达到应用最有的性能.因此,谈到性能问题,主要实现的是Linux系统和应用程序的最佳结合. 博文大纲:一.性能问题综述二.影响Linux性能的因素三.分析系统性能设计的人员四.调优总结 一.性能问题综述 系

linux性能调优总结

系统性能一直是个热门话题.做运维这几年也一直在搞性能调优,写这个文章也算是对工作的总结. 讲调优第一步是,要讲为什么要调优?也就是系统分析,分析还需要有指标,做好性能监控的情况下,看到确实需要调优才能进行.不能为了调优而 “调优“ 那不是调优,那是破坏. 性能分析的目的 找出系统性能瓶颈 为以后的优化提供方案或者参考 达到良好利用资源的目的.硬件资源和软件配置. 影响性能的因素 想确定有哪些因素,首先确定你的应用是什么类型的?例如: cpu密集型例如web服务器像nginx node.js需要C