定位Java程序中占用cpu资源最多线程

在编程时,有时候有些问题并不会暴露出来,往往等项目上线之后,突然就暴露出一些问题,比如网站相应慢,或者突然崩溃。
当然,网站相应慢可能是多方面的原因,硬件、软件、cpu,io,网络都是可能的点。
本篇文章从cpu角度来分析占用cpu最多线程从而导致网站相应慢的情况。

背景

本文分析基于Ubuntu16 LTS版本下分析

例子

首先通过top命令查看消耗cpu情况:
这里写图片描述

pid为3075的是JVM主进程,而13580的则为我们运行的项目,这可以通过jps命令筛选:
这里写图片描述

下面,通过top带有命令参数查看具体哪一个进程树情况:top -H -p 3075
这里写图片描述
下面看top命令:
这里写图片描述

从top前几行的信息可以看出,使用Application(Spring boot项目)共有一味用户,总共有43个线程,0个处于运行状态。cpu方面,用户使用14.3%,系统使用4.4%,有2.4处于wait状态。第三、四行则为系统的内存信息了。

下面利用jstack命令,将此时刻13580运行堆栈信息输入到jstack_13580.txt中,便于查看:jstack 13580 > jstack_13580.txt
选取top -H -p 13580中pid为13626的进程id,将其转化为16进制为:353a
然后再利用cat jstack_13580.txt |grep 353a 查看这个线程的具体信息:
这里写图片描述

则可以看出此线程处于condition队列中waiting。这只是个例子,项目运行没有相应,所以处于waiting状态。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值