CPU 架构SMP/NUMA,调优node
SMP:全称是“对称多处理”(Symmetrical Multi-Processing)技术 。ios
是指在一个计算机上聚集了一组处理器(多CPU),各CPU之间共享内存以及总线。nginx
弱点:CPU变多后,可是内存和内存控制器只有一个,CPU是经过内存控制器访问内存的,因此多个CPU对内存控制器就会产生竞争,为了不竞争就出现了NUMA架构。c++
NUMA:Non Uniform Memory Accessshell
各个CPU有本身专用的内存(学名叫node),可是也能够访问别的CPU的专业内存,这时性能就会降低。ubuntu
Linux下NUMA相关的命令微信
numastat:查看节点的状态。架构
能够看到本身CPU下的进程命中了本身的内存(node)多少次,没命中多少次,若是没命中的次数多了怎么办?就要强制把这进程绑定到本身的CPU上。性能
<font color=red>经典的应用场景:把nginx的worker进程绑定到numa架构下的特定的CPU上,性能会大幅度提高。</font>学习
numactl:能够实现把进程绑定到特定的CPU上
可是,当机器从新启动后,绑定就失效了。如何解决呢,使用numad
numad:守护进程
numademo
$ taskset -p -c 0,1,2-4,5,9 1234
上面命令的意思:把进程ip为1234的进程,绑定到0号,1号,2号,3号,4号,5号,9号CPU上。
这只是个例子,通常都绑定到1个CPU上,可是当系统重启后,还须要从新绑定,由于pid也变了。
Nginx比较厉害,能够配置哪一个worker绑定到哪一个CPU,事先写到配置nginx的配置文件里。
解决办法:假设有6个CPU,系统启动时,只让2个CPU执行内核的指令,其他4个不让执行内核指令。
编辑/etc/default/grub 文件,在 quiet splash 后面加上 isolcpus=2,3。回到终端执行update-grub 。其将自动依照刚才编辑的配置文件(/etc/default/grub)生成为引导程序准备的配置文件(/boot/grub/grub.cfg)
修改/proc/irq/<irq_num>/smp_affinity文件
$ echo cpu_mask > /proc/irq/<irq_num>/smp_affinity
cpu_mask:用比特位表示。
0001:表明1号CPU 0011:表明1号和2号CPU 0101:表明1号和3号CPU
sar -q 使用sar以前要配置一下 1,修改:/etc/default/sysstat, 将 ENABLED=“false“ 改成ENABLED=“true“ 2,执行:sudo /etc/init.d/sysstat restart top w uptime wmstat 1 5 下面的是查看CPU的使用率 mpstat 1 2 sar -P 1 2 iostat -c 1 cat /proc/stat
命令iostat -c 1的截图,含义查看CPU的占用率
ys:~$ iostat -c 1 Linux 4.15.0-20-generic (ys-VirtualBox) 2019年09月27日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.26 0.03 0.08 0.05 0.00 99.57 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00
命令【dstat】比较强大,能够直观的获得以下信息:
--top-bio show most expensive block I/O process 显示最消耗blockI/O的进程 --top-bio-adv show most expensive block I/O process (incl. pid and other stats) 显示最消耗blockI/O的进程 --top-childwait show process waiting for child the most 显示等待子进程时间最长的父进程 --top-cpu show most expensive CPU process 显示最消耗CPU的进程 --top-cpu-adv show most expensive CPU process (incl. pid and other stats) 显示最消耗CPU的进程 --top-cputime show process using the most CPU time (in ms) 显示最消耗CPU时间片的进程 --top-cputime-avg show process with the highest average timeslice (in ms) 显示最消耗CPU时间片的进程 --top-int show most frequent interrupt 显示最常常发生的中断信号 --top-io show most expensive I/O process 显示最消耗I/O的进程 --top-io-adv show most expensive I/O process (incl. pid and other stats) 显示最消耗I/O的进程 --top-latency show process with highest total latency (in ms) 显示等待时间最长的进程 --top-latency-avg show process with the highest average latency (in ms) 显示等待时间最长的进程 --top-mem show process using the most memory 显示使用内存最多的进程
命令【sar -w 1(秒为单位)】比较强大,能够直观的获得进程在指定秒数里的平均切换次数
<font color="green">
</font>