目录
top指令
用top指令可以查看占用资源异常的进程
第一行:任务队列信息
-
系统时间: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状态信息
-
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的数据交换,这时在告警真正的内存不够用了。
第七行及以下:各进程任务的状态
- 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的情况;
监控内存从大到小排序,按键字母M
监控cpu百分比从大到小排序,按键字母大写P
如果想要获取某个进程下所有线程,可以使用命令: top -Hp PID
cpu(s)状态wa过高,简单排查过程
开始 —> 通过iostat -x 1 10
命令查看相关磁盘使用信息 —> 通过iotop
命令查看比较详细的信息 —> 通过pidstat -d 1
展示I/O统计,每秒更新一次
-
iostat -x 1 10 (需要安装,命令
yum -y install sysstat
)
-
iotop(需要安装,命令
yum -y install iotop
)
-
pidstat -d 1