java性能问题的定位常用方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/onedaycbfly/article/details/76222956

今天安装系统版本,经常总是出现了监控到系统内存不足,进程退出,导致服务起不来的问题。本来想修改一下jvm参数,一般都是找到shell脚本,修改xmx值变成原来的一倍。简单处理。后来觉得出现这种内存不足,内存泄漏或者OOM问题的机会本来不多,学会优化和定位性能问题是程序员进阶的必经之路,所以还是找出一些常用的工具,对此问题定位了一番,虽然最后还是通过调大JVM参数搞定的。

常见的性能问题:
内存溢出 OOM (Heap OutOfMemoryError)
内存泄漏
线程死锁
CPU冲高
锁竞争
。。。

在jdk的bin文件中提供了很多性能定位的工具。这里介绍几种常用的工具和命令:

常用的工具

可视化工具

  1. jconsole
    主要用来监控系统的一些性能数据,如CPU、内存以及线程的使用情况。

  2. jvisualvm
    主要用来获取线程dump,或者堆dump的。通过线程pid。

常用命令

1、jps + jstack

jps :
作用:主要是获取当前系统中主要的线程pid
语法: jps

jstack :
作用: 获取指定线程的dump
语法: jstack pid

主要场景: 出现线程死锁问题。通过线程dump可以知道哪几个线程之间存在死锁现象。

2、

jmap + MAT(Memory analyse tool内存分析工具)

作用:获取指定线程的内存dump,可以知道此线程中一些对象或者变量之间的内存使用情况。
命令: jmap -heap pid
也可以直接把内存情况dump到文件中。

dump到文件后,直接放入到MAT工具中进行分析。可以知道哪些对象占据内存过多,然后根据此情况,找到相关的代码进行分析,最后优化代码解决问题。

3、jstat
未完待续。。。

详情请参考:
https://my.oschina.net/feichexia/blog/196575

展开阅读全文

没有更多推荐了,返回首页