目录

  • top指令
  • 第一行:任务队列信息
  • 第二行:任务进程信息
  • 第三行:CPU状态信息
  • 第四行:内存状态
  • 第五航:swap交换区信息
  • 第七行及以下:各进程任务的状态
  • 附加
  • 多核CPU的监控在top的基本视图中,按键盘数字1,可监视每个逻辑CPU的情况;
  • 监控内存从大到小排序,按键字母M
  • 监控cpu百分比从大到小排序,按键字母大写P
  • 如果想要获取某个进程下所有线程,可以使用命令: top -Hp PID
  • cpu(s)状态wa过高,简单排查过程


top指令

用top指令可以查看占用资源异常的进程

centos 系统性能工具 centos7查看性能监控_僵尸进程

第一行:任务队列信息

  • 系统时间:16:28:19
  • 已运行时间:up 57 days, 1:20
  • 当前登录用户:3users
  • 系统平均负载:load average :0.39, 0.40, 0.35
备注:这几个数字超出核心线程数,代表负载已经超负载了。load average负载分别是`1分钟、5分钟、15分钟`的负载情况
 有一个参考值:负载值 <= cpu逻辑核心数 * 0.7,在这个范围内,负载是正常的;负载值 = cpu逻辑数 * 1,表示满负载运行;负载值 > cpu逻辑数 * 1,表示超负载运行
 例如一台16核32线程的,逻辑核心数是32个(输入top指令,按键“1”显示输出逻辑核心,如上图所示4逻辑核)
 查看cpu逻辑核心数: `grep 'model name' /proc/cpuinfo | wc -l`
 
 通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。
 `1分钟负载值 > 逻辑核心数 * 1`,那么我们不用担心,但是如果15分钟负载都超过`逻辑核心数 * 1`,我们要赶紧看看发生了什么事情。所以我们要根据实际情况查看这三个值。

第二行:任务进程信息

  • 总进程:Tasks:193 total
  • 运行进程:2 running
  • 睡眠进程: 191 sleeping
  • 停止进程: 0 stopped
  • 僵尸进程: 0 zombie
备注:系统平均负载高的时候,看看有没有僵尸进程,如果有大量僵尸进程,CPU有可能会爆满。(上图没有僵尸进程)
 使用命令 ` ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' `查看僵尸父进程和子进程,杀死僵尸父进程才能真正杀死进程
 使用命令 ` kill -HUD 僵尸父进程 ` 或者 ` kill -9 僵尸父进程 `
 
 ` ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' `参数备注:
 -A:参数列出所有进程
 -o:自定义输出字段stat,ppid,pid,cmd
 因为状态为z或者Z的进程为僵尸进程,所有用grep抓取stat为Zz的进程

第三行:CPU状态信息

centos 系统性能工具 centos7查看性能监控_centos_02

  • 5.8 us:用户空间占用CPU百分比
  • 1.3 sy:内核空间占用CPU百分比
  • 0.0 ni:改变过优先级的进程占用CPU百分比
  • 89.1 id:CPU空闲时间百分比
  • 3.8 wa:(iowait) 等待 i/o完成占用CPU的百分比,只统计磁盘I/O(包含NFS类型的磁盘),不包含网络I/O;对于制定的CPU来说,iowait表示在此时间内,CPU其实是空闲的,不过CPU并不是严格意义上的空闲,毕竟它还需要等待I/O操作完成。对于产生I/O操作的请求的线程来说,它会阻塞等待I/O操作完成。
备注:此项数值变大,需要排查代码中是否大量使用了阻塞式IO
  • 0.0 hi:硬中断占用CPU的百分比
  • 0.0 st:软中断占用CPU的百分比

第四行:内存状态

KiB Mem : 7955184 total, 176120 free, 4999244 used, 2779820 buff/cache(单位是K)

如果系统上`buff/cache`占用量非常大,这个时候可以使用`sync;sync;sync;`指令同步数据到硬盘上;

`echo 1 > /proc/sys/vm/drop_caches` 表示清除pagecache
`echo 2 > /proc/sys/vm/drop_caches` 表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache
`echo 3 > /proc/sys/vm/drop_caches` 表示清除pagecache和slab分配器中的缓存对象
至此,作者也不太了解pagecache和slab机制,不过不影响实践,知道有这么个机制存在就行。

第五航:swap交换区信息

正常情况下used占用为0,如果在不停的变化,说明内核在不断进行内存和swap的数据交换,这时在告警真正的内存不够用了。

第七行及以下:各进程任务的状态

centos 系统性能工具 centos7查看性能监控_centos 系统性能工具_03

  • PID:进程ID
  • USER:进程所有者
  • PR:进程优先级
  • NI:nice值。负值表示高优先级,正值表示低优先级
  • VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES:进程使用的、未被换出的物理内存大小,单位kb。
  • SHR:共享内存大小,单位kb
  • S:进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪、停止;Z=僵尸进程
  • %CPU:进程占用CPU百分比
  • %MEM:进程占用内存百分比
  • TIME+:进程使用CPU时间总计,单位1/100秒
  • COMMAND:进程名称

附加

多核CPU的监控在top的基本视图中,按键盘数字1,可监视每个逻辑CPU的情况;

centos 系统性能工具 centos7查看性能监控_centos 系统性能工具_04

监控内存从大到小排序,按键字母M

centos 系统性能工具 centos7查看性能监控_centos_05

监控cpu百分比从大到小排序,按键字母大写P

centos 系统性能工具 centos7查看性能监控_缓存_06

如果想要获取某个进程下所有线程,可以使用命令: top -Hp PID

centos 系统性能工具 centos7查看性能监控_僵尸进程_07


centos 系统性能工具 centos7查看性能监控_父进程_08

cpu(s)状态wa过高,简单排查过程

开始 —> 通过iostat -x 1 10命令查看相关磁盘使用信息 —> 通过iotop命令查看比较详细的信息 —> 通过pidstat -d 1展示I/O统计,每秒更新一次

  1. iostat -x 1 10 (需要安装,命令yum -y install sysstat)
  2. centos 系统性能工具 centos7查看性能监控_僵尸进程_09

  3. iotop(需要安装,命令yum -y install iotop)
  4. centos 系统性能工具 centos7查看性能监控_僵尸进程_10

  5. pidstat -d 1
  6. centos 系统性能工具 centos7查看性能监控_缓存_11