jstack工具介绍
一、使用场景
当一个java应用CPU的使用比较高或者到达100%以上的时候,需要分析代码哪里有问题。这时候可以使用jstack命令
二、怎么使用
先使用命令ps –ef |grep keyword 找到应用的进程号,用PID表示。
然后使用命令导出当前的堆栈,命令如下
jstack 23000 > 1.log (23000为进程号,重定向到1.log文件)
查找cpu使用率最高的线程号,一个进程中有很多的线程(23000为进程号)
使用命令:
ps -mp 23000 -o THREAD,tid
得到如下结果:
USER %CPU PRI SCNT WCHAN USER SYSTEM TID
app 2.0 19 - n_tty_ - - 24876
app 2.0 19 - futex_ - - 24879
app 1.9 19 - futex_ - - 24882
app 1.9 19 - futex_ - - 24885
app 1.9 19 - futex_ - - 24888
app 0.0 19 - futex_ - - 24916
app 97.3 19 - - - - 24917
app 0.0 19 - futex_ - - 24918
app 0.0 19 - futex_ - - 24919
app 0.0 19 - futex_ - - 24920
app 0.0 19 - futex_ - - 24921
发现24917的线程使用率为97.3
使用linux命令行工具
printf '%x' 24917
将10进制的24917转化为16进制的6155,因为堆栈中的线程号都是用十六进制表示。
vi 1.log进入堆栈日志搜索/6155结果如下
"changeService" prio=10 tid=0x00007f5158101000 nid=0x6155 runnable [0x00007f4f92dec000]
java.lang.Thread.State: RUNNABLE
at com.xxx.service.impl.ChangeServiceImpl.execute(ChangeServiceImpl.java:115)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
发现这里的代码可能有问题,通过定位,发现这边写了个死循环导致系统cpu使用率飙高。
jstack工具介绍的更多相关文章
- jstack工具查看系统线程问题
背景: 最近在做项目系统的异常测试,项目依赖于nkv,需要模拟依赖组件nkv异常时系统的响应及性能情况.通过tc工具模拟当服务器发送到nkv的请求超时时系统的响应.发现接口返回错误率100%,查看服务 ...
- Linux性能工具介绍
l Linux性能工具介绍 p CPU高 p 磁盘I/O p 网络 p 内存 p 应用程序跟踪 l 操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l 应用程序的性能问题/功能问 ...
- java命令--jstack 工具 查看JVM堆栈信息
介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项" ...
- java命令--jstack 工具
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- java命令--jstack 工具【转载】
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- java命令-(学习)jstack 工具
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
随机推荐
- Linux下Rsync+Inotify-tools实现数据实时同步
Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...
- Linux资源使用配置文件 /etc/security/limits.conf
Linux资源使用配置文件 /etc/security/limits.conf http://www.linuxidc.com/Linux/2012-05/59489.htm Linux就这个范儿P5 ...
- go-006-运算符
运算符用于在程序运行时执行数学或逻辑运算. Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 算术运算符 下表列出了所有Go语言的算术运算符.假定 A ...
- controller中两个方法之间共享一个变量LinkedHashMap
1:引用传递,创建一个变量,给两个线程都传递进去. 2:静态修饰 static 通过该修饰符说明,该变量只有一份, 所有线程共用一份. 例如下面的htmlidMap通过static变量修饰, up ...
- hadoop2.x Federation
单Active NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NN进程使用的内存可能会达到上百G,NN成为了性能的瓶颈 常用的估算公式为1G对应1百万个块,按缺省块大 ...
- swoole gets
控制器调用: function gets() { $model = Model('ap_pic'); $model->select = ' id, size_type '; $gets['pag ...
- jmeter -xml日志格式中网络时间与服务器时间的区分
在 LR 中是有一个“网页细分图”的,通过这个图,你可以比较容易的区分哪些请求的响应时间最长,如果响应时间过程,是消耗在server处理的时候,还是消耗在网络传输过程中——也就是所谓的 Server ...
- Qt的信号和槽是如何工作的
用Qt做过开发的朋友,不知道是否曾为下面这些问题疑惑过:我们知道Qt是基于C++的,Qt写的代码最终还是要由C++编译器来编译,但是我们的Qt代码中有很多C++里没有的关键字,比如slots\sign ...
- FFmpeg 入门(6):音频同步
本文转自:FFmpeg 入门(6):音频同步 | www.samirchen.com 音频同步 上一节我们做了将视频同步到音频时钟,这一节我们反过来,将音频同步到视频.首先,我们要实现一个视频时钟来跟 ...
- STM32|4-20mA输出电路(转)
源:STM32|4-20mA输出电路 STM32+运算放大器实现VI转换,4mA-20mA发送器