PostgreSQL DBA (88)——Linux (CPU使用率与平均负载)

  

Linux已成为事实上企业级服务器操作系统的首选,PostgreSQL在Linux上的“装机量”不在少数,在对数据库的性能进行优化和调整时,同时也必须考虑到Linux的优化和调整。   
本节简单介绍了Linux性能监控中的两个容易混淆的概念:CPU使用率和平均负载。   

日常使用中最为常见的性能监控工是顶部,下面来看看最高的输出:

  <前>   <代码>最高——14:20:02 19 3用户,平均负载:0.00,0.01,0.07   任务:126、125跑步、睡觉,0停止,0僵尸   %的Cpu (s): 0.2, 0.7 sy, 0.0倪,99.2 id, 0.0佤邦,0.0 0.0 si,第0.0位,你好   简约Mem: 3873760总288164免费,87888,3497708迷/缓存   简约交换:1048572总970292免费,78280使用。2952064效果Mem   PID用户公关倪VIRT RES月S % % MEM CPU时间+命令   1根20 0 193748 3452 2240年代0.7 - 0.1 0:05.85 systemd   917 dbus 20 0 32780 1028 704年代0.7 - 0.0 0:00.30 dbus-daemon   17根rt 0 0 0 0 0.3 0.0 0:09.25迁移/2   559根20 0 0 0 0 0.3 0.0 0:17.53 kworker/2:2   912根20 0 24204 1020 864年代0.3 - 0.0 0:00.36 systemd-logind   915根20 0 216908 476 440年代0.3 - 0.0 0:00.04 abrt-watch-log   …      

输出的第1行

  <前>   <代码>最高——14:20:02 19 3用户,平均负载:0.00,0.01,0.07      

其中平均负载:0.00,0.01,0.07是过去1分钟/5分钟/15分钟的平均负载(平均负载)。   
这个平均负载是什么意思呢?按大神丹格雷格的说法,平均负载是指系统可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用并没有直接的关系。可运行状态进程包括正在使用CPU或者正在等待CPU的进程,不可中断状态是指正处于内核态不可中断关键流程中的进程,比如硬件设备的I/O响应等,通过最高或ps命令看的D状态进程就是这种状态。   

输出的第3行

  <前>   <代码> % Cpu (s): 0.2, 0.7 sy, 0.0, 99.2 id, 0.0佤邦,0.0 0.0 si,第0.0位,你好      

这是CPU使用率,其中我们为用户态使用占比,sy是系统态占比,倪是使加用好权进程分配的用户态占比,id是空闲占比,佤邦是等待使用CPU占用,嗨是硬中断占比,如果是软中断占比,圣(偷)是虚拟机使用占比,这些项加起来应为100%。

  

为了更好理解平均负载和CPU使用率,以高速公路收费站来打个比喻,假设某高速收费站有8个收费口。   
1。如果没有车通过,那么收费站的负载为0;   
2。如果同时只有4辆车缴费通过,那么负载为4;   
3。如果同时有8辆车,那么负载为8;   
4。如果有8辆车在缴费,同时每个收费口又有1辆车在等待,那么负载为16,这时候其实收费站已过载;   
5。如果有8辆车在缴费,同时每个收费口还有(n - 1) * (n> 3) 8辆车在等待,那么负载将会是n * 8,这时候收费站已严重过载,会出现严重拥堵;   
这是平均负载、下面说说CPU使用率。   
1。如果收费口和车主全部使用等缴费,那么使用率很高;   
2。如果某些收费口使用人工收费,但支持微信或支付宝,车主只需要刷卡就走,准备缴费的时间不长,因此使用率也不低;   
3。如果某些收费口使用人工收费,但只能现金收费,那掏的钱/找钱这些无用功占比就较高,这样使用率就变得较低。   

通过这个比喻可以看的出,平均负载和使用率并没有必然的关系,负载高CPU使用率不一定高,CPU使用率高负载并不见得会高。   
下面是使用benchmarksql对PG进行压力下使用顶级的输出:   <前>   <代码>——14:51:33 2:50,3用户,平均负载:22.34,9.89,3.81   任务:153、146跑步、睡觉,0停止,0僵尸   %的Cpu (s): 7.9, 5.2 sy, 0.0倪,23.3 id, 47.6佤邦,0.0 16.0 si,第0.0位,你好   简约Mem: 3873760总139744免费,418508,3315508迷/缓存   简约交换:1048572总969552免费,79020使用。2620448效果Mem   …   前——14:49:49 2:49 3用户,平均负载:14.47,4.19,1.48   任务:153、151跑步、睡觉,0停止,0僵尸   sy % Cpu0: 20.2, 23.0, 0.0, 28.7, 19.9佤邦,0.0 8.2 si,第0.0位,你好   sy % Cpu1: 13.5, 29.2, 0.0, 19.6, 28.5佤邦,0.0 9.3 si,第0.0位,你好   sy % Cpu2: 12.9, 19.3, 0.0, 16.4, 11.1佤邦,0.0 40.4 si,第0.0位,你好   sy % Cpu3: 15.1, 25.8, 0.0, 19.7, 29.4佤邦,0.0 10.0 si,第0.0位,你好   简约Mem: 3873760总133432免费,435336,3304992迷/缓存   简约交换:1048572总970816免费,77756使用。2601620效果Mem   PID用户公关倪VIRT RES月S % % MEM CPU时间+命令   10337 benchma + 20 0 4612656 222272 5376年代42.7 - 5.7 0:40.99 java   10448 benchma + 20 0 789004 52556 20408年代14.0 - 1.4 0:00.93 postgres   10356 benchma + 20 0 757376 179348 176640 9.7 - 4.6 D 0:04.15 postgres   10365 benchma + 20 0 757384 194680 191904 9.3 - 5.0 D 0:05.12 postgres   10375 benchma + 20 0 757452 183908 181172 9.3 - 4.7 D 0:04.51 postgres   10358 benchma + 20 0 757340 190880 188144 8.7 - 4.9 D 0:04.90 postgres   10357 benchma + 20 0 757448 169860 167092 8.3 - 4.4 D 0:04.14 postgres   10352 benchma + 20 0 757388 185012 182236年代8.0 - 4.8 0:04.63 postgres   10354 benchma + 20 0 757376 177416 174676 7.7 - 4.6 D 0:04.23 postgres   10367 benchma + 20 0 757356 178524 175796 7.3 - 4.6 D 0:04.25 postgres   …   

PostgreSQL DBA (88)——Linux (CPU使用率与平均负载)