liunx命令查看cpu使用率和负载情况

1、先top -c查看资源使用情况

第一行tasks表示第一行: 系统时间  + 系统运行时间 + 几个用户 +  1/5/15分钟系统平均负载

第二行:进程总数(total) + 正在运行进程数(running) + 睡眠进程数(sleeping) + 停止的进程数(stopped)+ 僵尸进程数(zombie)

第三行:用户空间CPU占比(us) + 内核空间CPU占比(sy)+ CPU空置率(id)

第4行第5行表示内存和虚拟内存使用情况:

下面代表的是进程,

PID :进程ID,USER :用户名,PR :优先级,NI :负值表示高优先级,正值表示低优先级。,VIRT :虚拟内存,

RES : 真实内存,SHR :共享内存,S :进程状态 D=不可中断的睡眠状态; R=运行; S=睡眠 ;T=跟踪/停止; Z=僵尸进程

 2、线上cpu使用率很高如何排查

  1. 输入top -c 就可以显示进程列表,然后输入P,按照cpu使用率排序,你会看到类似下面的东西
  2. 然后根据最耗费cpu的进程定位该进程下耗费cpu的线程,top -Hp pid(进程id),然后输入P按照cpu使用率对线程排序
  3. 因为liunx中打印出的线程id是10进制的所以,先转换成为16进制的,用命令 printf "%x\n"  tid(22828)
  4. 然后用jstack查看高cpu的线程的堆栈信息,可以打印出代码里是哪个类的那个方法导致cpu较高的。
  5. jstack pid(22772) | grep 592c -C5 --color

总结下来共分为4步:

1、top 或者top -c 查看进程(输入大写P按进程按耗时倒序)
2、top -Hp pid 查看该进程下的现成(输入大写P按进程按耗时倒序)
3、print '%x\n' tid(线程id,该步骤是将线程ID转换为16进制)
4、jstack pid | grep tid(第3步转换为16进制的id) -C 50 (或者是-C --color)
  1. jstack使用方法

缺点:如果一个机器的cpu使用率飙升,通过上面方式排查比较麻烦,对于步骤二如果top之后发现有多个线程的cpu占有率比较高,并且cpu只是短暂的飙升,那么这个方法耗时比较久。可能找到所有的线程之后打出堆栈,cpu使用率飙升现场已经没有了。所以才给出了方法二进行排查,方法比较简单。

方案二

安装arthas:curl -L http://start.alibaba-inc.com/install.sh | sh

通过使用arthas对应的命令thread -n 找到cpu使用率top n的线程,并且打印出堆栈。通过arthas,我们可以使用一个命令就完成上面四个步骤的工作,比较简单方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值