JVM调优(内存、GC、JVM参数)

server/2025/1/3 17:57:08/

内存调优

常用监控工具
Top命令

top命令是linux下用来查看系统信息的一个命令,它提供给我们去实时地去查看系统的资源,比如执行时的进程、线程和系统参数等信息。进程使用的内存为RES(常驻内存)- SHR(共享内存)

VisualVM

VisualVM是多功能合一的Java故障排除工具并且他是一款可视化工具,整合了命令行 JDK 工具和轻量级分析功能。

内存快照

当堆内存溢出时,需要在堆内存溢出时将整个堆内存保存下来,生成内存快照(Heap Profile )文件。

使用MAT打开hprof文件,并选择内存泄漏检测功能,MAT会自行根据内存快照中保存的数据分析内存泄漏的根源。

生成内存快照的Java虚拟机参数:

-XX:+HeapDumpOnOutOfMemoryError:发生OutOfMemoryError错误时,自动生成hprof内存快照文件。

-XX:HeapDumpPath=<path>:指定hprof文件的输出路径。

使用MAT打开hprof文件,并选择内存泄漏检测功能,MAT会自行根据内存快照中保存的数据分析内存泄漏的根源。

导出运行中系统的内存快照,比较简单的方式有两种,注意只需要导出标记为存活的对象:

通过JDK自带的jmap命令导出,格式为:

jmap -dump:live,format=b,file=文件路径和文件名 进程ID

通过arthas的heapdump命令导出,格式为:

heapdump --live 文件路径和文件名

GC调优

jstat工具

Jstat工具是JDK自带的一款监控工具,可以提供各种垃圾回收、类加载、编译信息

等不同的数据。使用方法为:jstat -gc 进程ID 每次统计的间隔(毫秒) 统计次数

C代表Capacity容量,U代表Used使用量

S – 幸存者区,E – 伊甸园区,O – 老年代,M – 元空间

YGC、YGT:年轻代GC次数和GC耗时(单位:秒)

FGC、FGCT:Full GC次数和Full GC耗时

GCT:GC总耗时

GC日志

通过GC日志,可以更好的看到垃圾回收细节上的数据,同时也可以根据每款垃圾回收器的不同特点更好地发现存在的问题。

使用方法(JDK 8及以下):-XX:+PrintGCDetails -Xloggc:文件名

使用方法(JDK 9+):-Xlog:gc*:file=文件名

分析GC日志
GCViewer

GCViewer是一个将GC日志转换成可视化图表的小工具,github地址: https://github.com/chewiebug/GCViewer 使用方法:java -jar gcviewer_1.3.4.jar 日志文件.log

GCEasy

GCeasy是业界首款使用AI机器学习技术在线进行GC分析和诊断的工具。定位内存泄漏、GC延迟高的问题,提供JVM参数优化建议,支持在线的可视化工具图表展示。 官方网站:https://gceasy.io/

优化基础JVM参数

-Xms1g  设置的是最大堆内存

-Xmx1g  设置初始堆大小,建议将-Xms设置的和-Xmx一样大

-Xss256k  虚拟机栈大小,合理值为256k – 1m之间。

-XX:MaxMetaspaceSize=512m 最大元空间大小,默认值比较大,如果出现元空间内存泄漏会让操作系统可用内存不可控,建议根据测试情况设置最大值,一般设置为256m

-XX:MetaspaceSize   参数指的是到达这个值之后会触发FULLGC,后续什么时候再触发JVM会自行计算。如果设置为和MaxMetaspaceSize一样大,就不会FULLGC,但是对象也无法回收。(一般不手动设置)

-XX:+DisableExplicitGC  禁止在代码中使用System.gc()

-XX:+HeapDumpOnOutOfMemoryError 发生OutOfMemoryError错误时,自动生成hprof内存快照文件。

-XX:HeapDumpPath=/opt/logs/my-service.hprof 指定hprof文件的输出路径。

打印GC日志

JDK8及之前 : -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:文件路径

JDK9及之后 : -Xlog:gc*:file=文件路径


http://www.ppmy.cn/server/155064.html

相关文章

解决Spring boot集成quartz时service注入失败为null的问题

解决Spring boot集成quartz时service注入失败为null的问题 一、报错信息二、代码任务类源代码配置类原代码 三、注入失败原因四、解决的思路11、任务类修改2、配置类修改 五、 解决的思路2 一、报错信息 java.lang.NullPointerException: null at farbun.server.scheduledTask…

Rocky Linux下安装meld

背景介绍&#xff1a; meld是一款Linux系统下的用于 文件夹和文件的比对软件&#xff0c;非常常用&#xff1b; 故障现象&#xff1a; 输入安装命令后&#xff0c;sudo yum install meld&#xff0c;报错。 12-31 22:12:17 ~]$ sudo yum install meld Last metadata expirat…

冰狐智能辅助使用adb实现自动化脚本

使用ADB&#xff08;Android Debug Bridge&#xff09;可以实现许多自动化脚本任务&#xff0c;这些任务通常涉及与Android设备的交互&#xff0c;如安装应用、启动应用、发送输入事件、获取设备信息等。以下是一个基本的指南&#xff0c;教你如何使用ADB编写自动化脚本。一般情…

多技术栈时代的利器:自动化协作流水线全面实践

文章目录 Jenkins的自动化流水线优势设计自动化流水线架构使用 Jenkinsfile 实现流水线声明流水线和工具拉取代码构建与测试容器化部署到 Kubernetes后续处理 QA 环节未来的扩展方向总结 Jenkins的自动化流水线优势 Jenkins 是一款备受开发者推崇的开源自动化服务器&#xff0…

平衡车PID算法 学习日记

我的学习日记是基于平衡车pid算法上&#xff0c;在其他方向可能会有欠缺。 开环与闭环 开环控制系统&#xff08;Open-loop Control System&#xff09;是指被控对象的输出&#xff08;被控制量&#xff09;对控制器&#xff08;controller&#xff09;的输出没有影响&#x…

UEBA-对等组聚类

针对计算基础设施的网络攻击越来越多&#xff0c;因此需要更为高级的防御解决方案如入侵检测系统&#xff08;Intrusion Detection Systems&#xff0c;IDS&#xff09;来对抗攻击。使用网络行为异常检测&#xff08;Network Behavior Anomaly Detection&#xff0c;NBAD&#…

Vben5登录过期无法再次登录问题,http状态码

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 前言 最近在做项目前端&#xff0c;使用的https://doc.vben.pro/&#xff0c;在登录过期时出现了无法…

12.31号 更新的动漫资源!

12.31号 更新的所有动漫资源&#xff08;UC不限速&#xff09; 遮天90集 4K高码率 uc&#xff1a;https://drive.uc.cn/s/3b93ab653cdf4?public1 夸克https://pan.quark.cn/s/cacfbafe5fcc 百度https://pan.baidu.com/s/16BZ0fY5fEvftpmu7tKuXzg?pwdjt5d 一念永恒30集 4…