今天安装系统版本,经常总是出现了监控到系统内存不足,进程退出,导致服务起不来的问题。本来想修改一下jvm参数,一般都是找到shell脚本,修改xmx值变成原来的一倍。简单处理。后来觉得出现这种内存不足,内存泄漏或者OOM问题的机会本来不多,学会优化和定位性能问题是程序员进阶的必经之路,所以还是找出一些常用的工具,对此问题定位了一番,虽然最后还是通过调大JVM参数搞定的。
常见的性能问题:
内存溢出 OOM (Heap OutOfMemoryError)
内存泄漏
线程死锁
CPU冲高
锁竞争
。。。
在jdk的bin文件中提供了很多性能定位的工具。这里介绍几种常用的工具和命令:
常用的工具
可视化工具
jconsole
主要用来监控系统的一些性能数据,如CPU、内存以及线程的使用情况。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
未完待续。。。