Jvm调优调什么
这个疑问必须要有,当对一个技术或者系统调优的时候 ,我们一定要知道去调什么,这样有一个出发点,有一个目标。不能胡乱的调对吧。
那么Jvm调优,主要调以下
1)减少Full GC
2)解决OOM
3)
总的来说就是:使用较小的内存占用来获得较高的吞吐量或较低的延迟
windows 系统下 我们可以通过 jps 命令查看程序进程ID
linux 系统我们通过 ps -ef | grep java 来找到要调整的程序的进程ID (jps在linux下一样可以用,不过部署的服务很多,不知道那个是我们要调的程序进程ID)
有了进程ID我们就可以对他做各种事情了
命令行
jmap
// 查看当前系统的实例
jmap -histo 进程ID
// 查看当前存活的实例 执行时可能会出发FGC
jmap -histo:live 进程ID
// 导出系统实例
jmap -histo 进程ID >log.txt
打开导出的文件
![](https://img-blog.csdnimg.cn/1e6f529b34454adfb0b93f1c6654a440.png)
num:序号
instances:实例数量
bytes:占用空间大小
class name:类名称(C=char[],S=short[],I=int[],B=byte[])
通过这些信息我们能看出程序在运行中,导出的那个瞬间,那个实例数最多,如果有我们自己写的,那就得好好分析分析了。
通过命令 【 jmap -heap 进程ID】 查看堆信息
![](https://img-blog.csdnimg.cn/cc5cff69edf64fa186650b022da69143.png)
通过 【jmap -dump:format=b,file=test2021.hprof 进程ID】 导出堆内存 dump,如果内存很大会导不出来,或者时间很长。
通过参数 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ 设置在内存溢出自动导出dump文件。
jstack
1)查找CPU较高的线程堆栈信息(Linux系统)
通过 top 命令查看正在运行的所有进程情况,实时的一个状态
![](https://img-blog.csdnimg.cn/f30871b633994444a6aeb8017a519380.png)
找出%CPU最高的那个进程ID,也就是PID,通过命令【top -p 进程ID】锁定它,大写状态下的 H 字母