Linux下系统调优,内容总结主要来自于工作经验和参考部分网络博客及红帽官方博客的结合,主要选取了一些个人理解的以及有过实践的内容,还有一些觉得比较有价值但是没实践过的方向。之所以要总结系统调优,是因为我们服务器厂商在硬件配置一定,BIOS选项配置一定的情况下, 再想让相关性能获得提升就只能在系统下进行设置,因此也是有必要有一个完整的了解。因为是比较完整的,可能罗列出了许多方向,对于这些方向,怎么样调能带来怎么样的效果,肯定是需要实践后才能确认的,在遇到具体问题和需求时可以从这些方向上下手,分成五个小部分,分别是CPU、内存、存储、网络、整体工具tuned-adm
一、Cpu
1.CPU工作模式
CPU的性能设置和查询通过cpupower工具来完成,一共有下图五种模式
需要CPU时时刻刻工作在最高频率的话设置为performance就可以,如下图是查询当前频率信息和设置性能模式的方法
2.谈谈监控
简单的监控我推荐使用turbostat工具查看CPU各个核心的实时工作频率,如果用lscpu命令或者cat /proc/cupinfo查看到的CPU频率,可能不是准确的,结合实践以及查阅了一些资料基本可以确认turbostat的计算方式是更准确的。本博客之前有一篇放了一个CPU频率监测脚本,那个脚本内是监测/proc/cpuinfo的,目前来看其实有点缺陷,但是因为这种不准确往往出现在CPU频率是最高的时候,所以用来监测频率降低这些异常还是没什么问题的。如下图是turbostat直接敲下的例子,各个参数的意思可以看下面这个博客
https://blog.csdn.net/zhangbaoxiang/article/details/114658605
还可以用sysstat工具里的mpstat命令监控各个核心的使用率,如下图是查询当前非idle的核心,这种监控方式用来帮助我们定位一些CPU性能为瓶颈时的系统性能问题,可以找到异常核心
3.优化进程
上面说的是整个系统的设置,具体到我们需要对某个进程来多分配些CPU资源,或者避免进程之间使用相同的CPU资源,影响了进程的性能,可以使用taskset工具,taskset –c 0,1 ./xxx.sh就是把0,1核心分配给了这个脚本。这个工具相对简易一点,更推荐使用的是numactl工具。这个工具管理的更为全面,通过numactl –hardware可以查看如下图,每个node节点分配到的内存与CPU核心
通过下图的方法可以知道某个设备所在的numa节点,并根据numa节点知道设备对应所在的CPU核心,如果是类似网卡设备调优,那么网卡测试进程就绑在网卡所在的CPU核心上,硬盘测试同理
当然如果资源比较充裕,不用管具体哪些核心,把某个numa节点下的cpu核心全绑定在某进程上也可以,通过numactl –cpubind=0 –membind=0 ./xxx.sh就可以把nudo0的资源分配给这个脚本,设置之后,也可以使用numastat命令查看各个节点的使用状态
各个具体参数可以去网上找博客查看,我了解到的就是othernode如果过高,说明你的分配或者是系统自动分配的不太合理,需要重新分配相关进程资源。除此之外nuamctl也可以和taskset一样自由分配CPU节点,通过numactl –C 0-15 ./xx.sh即可将脚本绑定到0-15核心上。要注意的是,我们在绑核的时候,无论是taskset还是nuamctl,都尽量不要跨numa,比如0-15要确保是一个numa节点上的,是否是一个numa节点可以通过numactl –hardware的结果里看到
4.CPU中断irqbalance
如果CPU中断没有很好的平衡,容易出现性能瓶颈,正常情况下需要启用
service irqbalacne start
在之前的工作中有印象给网卡设置过中断来提升网卡性能,下面的第一条命令可以列出所有中断号,其中第一列是中断号,第七列可以看是什么设备。第二条命令可以查看该中断号对应的CPU核心,通过echo XX具体的核心数可以更改具体的核心,通常需要该核心同样是网口所在numa节点的核心,性能会比较好
cat /proc/interrupts
cat /proc/irq/55/smp_affinity_list