一、Java进阶-JVM-调优
jvm调优主要是针对垃圾收集器的收集性能优化,令运行在虚拟机上的应用能够使用更少的内存以及延迟获取更大的吞吐量。
1.1 参数类型
- -XX:[+-]<name>:+或-表示启用或者禁用name属性-Boolean类型
- -XX<name>=<value>:name表示属性,value表示属性对应的值-非Boolean类型
1.2 常用JVM参数
image.png1.3 常用命令
- jps:查看所有的jvm进程,包括进程ID,进程启动的路径等等。
- jstat:查看堆内存各部分的使用量,以及加载类的数量。
- jstack:用于生成当前时刻的线程状态信息的快照工具。
- jinfo:观察进程运行环境参数,包括Java System属性和JVM命令行参数。
- jmap:一款用于生成堆转储快照即dump文件的命令。
- jhat:一款用于分析dump文件的工具。
jps -l
jstat -参数 [pid] [时间毫秒] [次数 默认一次]
jstack -l pid > jstack.out
jmap -histo[:live] pid #显示堆中对象的统计信息
jmap -heap pid #与堆相关的详细信息
jmap -dump:live,format=b,file=data.hprof pid #堆内存dump到指定目录
jhat <option> <dumpfile> #分析通过jmap生成的堆转储快照
在线分析工具1:fastthread
在线分析工具2:heapdump
1.4 调优
- 开发过程中,通常会将 -Xms与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。
- -Xms -Xmx配置物理内存的1/2。
- 在OOM时,记得Dump出堆,确保可以排查现场问题,通过下面命令你可以输出一个.dump文件。
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=你要输出的日志路径
- 如果堆空间没有用完也抛出了OOM,有可能是永久代/元空间(方法区的实现方式)导致的。堆空间实际占用非常少,但是永久代/元空间溢出一样抛出OOM。
1.5 排查工具
- Arthas
- CPU采样
- 内存采样
网友评论