jvm优化软件和步骤

59 阅读3分钟

java调优大概分为3个大类

1、 - 开头的标准参数

2、 -x 开头的非标准的参数 ,如 -xms 等等

3、-xx 开头的参数有728个参数

真正的jvm调优。调整的是-xx的参数

什么叫做jvm调优

将系统调整到最优的运行环境,共3中情况

1、预调优

2、优化jvm的运行环境

3、处理oom的问题,内存溢出会让内存越来越多,最后也会让内存爆掉。

oom内存调优的案例

如果我已经知道我的运行内存是多少的情况下,可以将xms最小内存和xmx最大内存设置成一样,放置内存抖动,直接给应用程序最大的内存设置

full gc 指全部内存的回收 gc 指年轻代内存的回收

jvm调优步骤

1、jps 查找正在运行的java进程

2、jinfo 加进程号(jinfo 17708),查看运行中的java所在许你记得详细情况

3、jstack 17708 列出java的堆栈的信息,可以列出来当前进程中有什么线程。

这个命令可以列出来程序之间的调用关系,当前线程的状态等信息,比如等待中。就可以通过这个命令查死锁了。

这里说明一下:定义线程名是要取名一个有意义的名字,不然jstack列出来了,也不清楚是什么地方出现了问题。

jmap

jvm调优工具 jconsole 、arthas 、jvisualvm

jarthas 详解

cpu部分

首先看一下是业务线程占用的cpu过高,还是系统线程占用的cpu过高

system 系统线程占用过高,应该是垃圾回收器忙不过来了

main 业务线程占用过高,需要关注业务中是不是有死循环出不来了

内存模块解释

heap 部分如下

ps_eden_space 伊甸园

ps_survivor_space 幸存者区

ps_old_gen 老年代

nonheap 部分如下

code_cache 代码缓存区

metaspace

compressed_class_space

jvm命令

jvm 可以看到使用的垃圾回收器是什么 ####thread 命令可以查看当前线程的信息 thread 线程号可以看到当前线程的调用信息 thread -b 可以查询关于死锁的线程信息

如何查看运行中程序哪些对象占用的内存比较多

1、使用arthas的heapdump命令可以导出环境中所有的对象占用的内存,然后导入visualvm可以查看。 2、使用jvm的原生命令,jmap -histo 2240 | head 20 总结 上面两个命令在生产环境上都不能用,只能在测试环境或者高可用或者备份机器上运行。artha需要导出文件,导出的文件很大。虽然jmap比artha不需要导出数据,但是也是需要暂停服务的。 所以在生产环境上可以使用配置参数解决问题,设置JVM启动参数 : -XX:+HeapDumpOnOutOfMemoryError参数可以让虚拟机在出现内存溢出异常时Dump出内存堆运行时快照。

如果我们在服务器中发现代码逻辑和自己的想法不一致怎么办,应急办法。

1、通过arthas可以通过jad命令对代码进行反编译,然后修改过代码对代码进行编译。 2、通过 redefibe 文件路径 , 对代码进行热加载。