这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
前言
在生产环境中,我们通常在Linux环境下使用一些命令来监控主机的负载情况,例如每个程序对cpu的使用情况和内存的占用情况。我在生产环境中使用最多的就是top命令,通过对一些指标的观察,以此来判断机器的负载运行情况。
使用
我们在Liunx环境下,输入top命令,可以进入如下图的界面。
指标分析
我们想要更好的使用top,就要明白每个指标代表的意含义
第一行:负载情况
-
两个时间:一个是系统时间,一个是机器运行的时间
-
3个load average:分别代表1MIN,5MIN,15MIN机器的负载情况,你数字是代表各个时间正在运行进程+等待进程的平均数
第二行:任务情况
主要来查看机器上的进程情况,总共有多少个任务,多少任务在运行、休眠,多少个任务被终止,已经观察僵尸状态(zombie)的任务数
第三行:CPU的信息
主要查看主机的CPU信息,同时,在界面中按1可以查看CPU个数。
- US/SY:用户进程和系统进程使用CPU的占比
- NI:NICE,表示被调整过线程优先级的进程占比,比例正常不应该大
- ID:表示空闲
- WA:表示资源等待的时间,消耗资源值会升高
- HI:硬中断:一般是外设引起,如果HI飚高,意味着外设在硬件层面出现问题
- SI:软中断
- ST:即steel,如果该主机是虚拟机就会有ST信息,这就是该虚拟机从宿主机获取CPU的时间片的百分占比
第四行,第五行主要讲了:buffer和cache
- buffer为待处理的数据,解决系统间速度不匹配问题;cache为结果数据的缓存
- SWAP分区:利用硬盘做一部分缓存,如果SWAP交换非常频繁,说明内存不够用
进程列表说明
- PID 进程ID,User 用户,RR 优先级,VIRT 虚拟内存,
- RES:驻留内存,表示该进程实际占用的内存,并不是申请的内存
- SHR:共享内存。所以说当前进程实际占用的内存大小为 RES-SHR
CPU占用异常排查思路
当我们在运行中观察CPU飚高观察到CPU占用高的Java程序时,可以按照以下思路来排查。
- 观察CPU使用率高的进程PID
- top -Hp PID来观察该进程下的线程TID
- 将TID由十进制转换成十六进制NID
- 使用jstack PID来多dump几次,查看nid=NID的线程的State
结语
以上就是top的基本用法,在大集群规模的时候,我们可以使用一些监控工具,对所有的主机进行监控。