常常感觉系统资源不够用,一台机子上跑了不下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 10CPU    %usr   %nice    %sys %iowait    %irq   %soft ... %idleall   17.57    0.03    1.78    0.00    0.35    0.23 ... 80.040   43.17    0.00    4.12    0.00    1.41    1.00 ... 50.301    9.80    0.00    0.81    0.00    0.00    0.00 ... 89.392    9.31    0.00    1.20    0.00    0.00    0.00 ... 89.493    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 -c157 034 134 232 3可见分配给 CPU0 的 PHP-FPM 进程比其他三个 CPUx 总和还要多。为什么大部分进程被分配给了 CPU0?我模模糊糊有一些印象是因为操作系统偏爱使用 CPU0,但我暂时也没找到实质的线索可以佐证,如果有人知道,麻烦告诉我。问题总要解决,既然 PHP-FPM 没有类似 Nginx 那样 CPU 亲缘性(affinity)绑定的指令,那么我们可以使用 taskset 绑定 PHP-FPM 进程到固定的 CPUx 来解决问题:#!/bin/bashCPUs=$(grep -c processor /proc/cpuinfo)PIDs=$(ps aux | grep "php-fpm[:] pool" | awk ‘{print $2}‘)let i=0for PID in $PIDs; doCPU=$(echo "$i % $CPUs" | bc)let i++taskset -pc $CPU $PIDdone如上脚本运行后,让我们再来看看各个 CPU 负载分配情况如何:shell> mpstat -P ALL 1 10CPU    %usr   %nice    %sys %iowait    %irq   %soft ...  %idleall   15.73    0.03    1.61    0.00    0.20    0.23 ...  82.200   16.28    0.10    1.62    0.10    0.81    0.91 ...  80.181   16.16    0.10    1.51    0.00    0.00    0.10 ...  82.132   14.46    0.10    1.71    0.00    0.00    0.00 ...  83.733   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。

本文转自yzy121403725 51CTO博客,原文链接:http://blog.51cto.com/lookingdream/1949456,如需转载请自行联系原作者

php-fpm 多核,linux 多核CPU性能调优相关推荐

  1. 【会议记录】基于CPU性能调优的必要性和方法介绍

    前一段时间我参加了阅码场的活动 Yomoday(北京场),现场有很多技术专家,非常多前沿的技术分享.这是其中一个主题的记录,尽量还原当时的分享内容,但也可能有些地方不特别准确. 1 基于CPU性能调优 ...

  2. Java基础之《JVM性能调优(14)—CPU性能调优》

    一.linux cpu使用率100%的性能分析调优 1.问题 现在你接到运营电话说"线上系统很卡",你马上登陆linux服务器,你会做哪些动作,解决系统卡顿的问题? 2.top命令 ...

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

    一.关于was数据源等问题的配置 (1)关于was数据源连接池的最大.最小配置多大合适?怎样去计算? (2)关于JVM的配置,64位系统,64位WAS,最值小和最大配置多大最优?怎样去计算? (3)应 ...

  4. 程序 多核优化 linux,linux 多核CPU性能调优

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

  5. Linux性能优化(十二)——CPU性能调优

    一.应用程序优化 (1)编译器优化.适当开启编译器优化选项,在编译阶段提升性能.gcc提供优化选项-On会自动对应用程序的代码进行优化. (2)算法优化.使用复杂度更低的算法,可以显著加快处理速度.在 ...

  6. Linux—JVM等性能调优监控

    关注微信公众号:CodingTechWork,一起学习进步. 介绍   在linux上跑程序时,常常遇到程序卡顿,内存消耗大,这时候,我们需要使用free查看内存使用情况及top内存消耗排行,当然,我 ...

  7. 方便好用的在线CPU性能调优工具--perf的常见用法

    perf 是 Linux 2.6.31 以后内置的性能分析工具.它是一款综合性分析工具,以性能事件采样为基础,可以分析从内核级别,到进程线程级别,甚至到函数及汇编级别的性能问题. 1 perf top ...

  8. Linux上Jvm性能调优方法

    确定性能问题 OS 诊断 先考察Linux操作系统上显示的性能指标,主要关注CPU.Memory.I/O三方面: CPU 诊断 主要考察CPU的负载均值(Load Average), CPU 使用率, ...

  9. Linux/Windows系统内核性能调优

    做过Linux平台性能测试的童鞋平时可能会遇到如下问题: 1. TCP端口号不够用导致并发上不去(即与服务器端建立新连接失败) 2. TIME_WAIT状态连接过多导致应用服务器(Nginx.Hapr ...

最新文章

  1. kicad绿油开窗_GitHub - OS-Q/S05: KiCad EDA
  2. 产品问答 | PM最应该花时间做这件事……
  3. 路由器安置(Routing)
  4. 五年级计算机下册工作计划,五年级下学期工作计划
  5. linux shell读取配置文件中的内容
  6. 数据结构与算法题整理
  7. 合作 | IEIC·IT耳朵智能创新大会:人工智能落地将带来新风口
  8. typora工具的使用方法-一款非常适合程序员的工具
  9. C# CSharp 回调函数
  10. 主题:讲解三层代码讲解(ActiveList的Action的工作方式)--第五课(*****) DATE:2004-06-03...
  11. Python Tkinter Text控件随输入自动拓展到尾行
  12. a股用计算机模拟走势,告诉你A股今后几天惊现千股涨停
  13. 电脑运行速度(卡不卡)的决定因素
  14. PYNQ-overlay
  15. vue-router(路由)详细教程
  16. 从原始文档到KNN分类算法实现(一)
  17. 4.12leetcode468. 验证IP地址
  18. MPQ技术内幕(转载)
  19. 点云的基本特征和描述
  20. [2011-04-30]返现网排行榜

热门文章

  1. HTML5期末大作业:体育运动网站设计——体育文化(6页) HTML+CSS+JavaScript 体育运动网页设计 dw大学生体育文化网页设计 web课程设计网页规划与设计
  2. C语言限时答题小程序
  3. 2019年6月20日工作总结---CSS篇
  4. mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
  5. java开发——发送短信功能
  6. VBA代码助手,代码库收藏管理工具,代码对齐,破解Excel工程密码,设置隐藏模块
  7. NODE安装和使用说明,报错处理方法
  8. 汉语拼音大全(竖排版)
  9. 全国计算机二级考c考点,2019年全国计算机二级C语言考试考点解析(1)
  10. 8.String str=“i“与 String str=new String(“i”)一样吗?