一、CPU性能

1.uptime--系统平均负载

~$ uptime
 16:04:46 up  2:41,  4 users,  load average: 0.86, 0.33, 0.12

 前面三个参数代表:系统当前时间,系统运行时间,系统登录用户;

load average后面三个数字分别代表1分钟,5分钟,15分钟平均负载。

其中,平均负载表示平均活跃进程数。比如:2核CPU的平均负载为2时,代表CPU正好被利用完;如果超过2,则表示超载了。

查看CPU核数的方法如下:

cat /proc/cpuinfo

 

zabbixcpu负载率_zabbixcpu负载率

zabbixcpu负载率_zabbixcpu负载率_02

可以查看到有两颗CPU

也可通过下面的方法查看:

grep 'processor' /proc/cpuinfo

zabbixcpu负载率_ios_03

grep 'processor' /proc/cpuinfo |wc -l

zabbixcpu负载率_ios_04

注意:平均负载和CPU的利用率并不能等同

平均负载是:单位时间内,系统可运行和不可中断的进程数,包括等待CPU、等待I/O的进程数;

CPU利用率:单位时间内,CPU的繁忙统计

  • CPU密集型,两者可以大体等同
  • I/O密集型,I/O导致负载过高,但CPU利用率不一定高

如果平均负载高于70%,就认为负载过高,下面通过工具进行定位系统出问题的地方:

  • iostat(I/O statistics)  https://www.jellythink.com/archives/438
  • mpstat(Multiprocessor Statistics) 
  • pidstat   https://www.jellythink.com/archives/444

2.CPU的上下文切换

CPU上下文:CPU寄存器和程序计数器;其中,程序计数器保存程序正在运行的位置。

CPU上下文切换:一个运行体(进程、线程、中断)从CPU退出,另外一个运行体进入;被换下的运行体下次还要接着在CPU上运行,所以必须保存现场(CPU上下文)。

进程上下文切换:由于进程可以运行在用户态(用户程序运行),又可以运行在内核态(系统函数调用);所以进程上下文切换需要保存内核空间的状态、CPU寄存器,还需要保存虚拟内存、用户栈。

系统调用:也称特权模式切换,并不是上下文切换,因为它没有进行进程切换;但是系统调用会进行CPU上下文切换。

进程调度的触发情况:

  • CPU的时间片耗尽
  • 进程在系统的资源不足
  • 调用sleep
  • 有高优先级的进行

线程的上下文切换:(1)线程切换前后不同属一个进程,这种情况和进程切换相同;(2)线程切换前后同属一个进程,这种情况,由于虚拟内存共享,不需要切换,但寄存器、私有数据、栈需要求换。

中断上下文切换:中断通常来自硬件的请求,打断正在运行的进行,从而运行中断程序,中断程序运行完后,进程程序接着运行;由于中断发生在内核,所以中断只需要保存内核状态、CPU寄存器等。

不管是那种上下文切换,保护现场/恢复现场是要付出代价的,因此上下文切换是linux系统性能需要关注的一项指标。

如何查看上下文切换?

使用vmstat工具。

//一秒输出一组数据
$ vmstat 1

zabbixcpu负载率_zabbixcpu负载率_05

  •  cs(context switch)是每秒上下文切换的次数。
  • in(interruput)每秒中断次数。
  • r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
  • b(Blocked)是处于不可中断睡眠状态的进程数。

下面使用sysbech工具测试一下上面几个指标:

sysbench --num-threads=10 --max-time=300 --test=threads run

zabbixcpu负载率_上下文切换_06

zabbixcpu负载率_寄存器_07

vmstat查看总体,pidstat查看每个进程的情况,加上-w可以查看cswch和nvcswch

  •  cswch(voluntary context switches)自愿上下文切换数:I/O、内存资源不足时,自愿发生切换
  • nvcwch(non voluntary context switches)非自愿上下文切换数:CPU时间片耗尽,被系统强制调度
pidstat -w

 

zabbixcpu负载率_寄存器_08

另外,可以查看一下中断: 

watch -d cat /proc/interrupts

zabbixcpu负载率_ios_09

zabbixcpu负载率_寄存器_10

 【总结】

  • 自愿上下文切换数变多,说明进程都在等待,可能是I/O等问题;
  • 非自愿上下文切换数变多,说明进程被强制调度,说明进程都在抢占CPU,说明CPU本身到达了瓶颈;
  • 中断次数变多,说明中断占用CPU,需要查看具体哪种中断。

总结一下CPU性能分析的相关工具:

  • top/htop
  • iostat
  • mpstat
  • pidstat
  • vmstat
  • dstat
  • perf
  • execsnoop :  分析 Linux 内核的运行时行为

zabbixcpu负载率_zabbixcpu负载率_11

【问题1】CPU使用率飙到100%,怎么办?

【问题2】系统出现大量僵尸进程,怎么解决?

二、磁盘I/O性能

 

四、网络性能