jvm调优
jvm调优
- 大多数情况jvm生产环境考虑调整下面三方面:
- 最大堆和最小堆大小
- GC收集器
- 新生代(年轻代)大小
- 在没有全面监控、收集性能数据之前,调优就是扯淡
- 99%的情况是你的代码出了问题,而不是jvm参数不对
jvm选项规则
- java -version 标准选项,任何版本jvm/任何平台都可以使用
- java -Xms10m 非标准选项,部分版本设别
- java -XX:+PrintGCDetails 不稳定参数,不同jvm有差异,随时可能都会被移除
- PS:+代表开启/-代表关闭
jvm 优化选项
- 1.8+优先使用G1收集器,摆脱各种选项烦恼
- java -jar -XX:+UseG1GC -Xms2G -Xmx2G -Xss256k -XX:MaxGCPauseMillis=300 -Xloggc:/logs/gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails test.jar
- -Xms与-Xmx设置相同,减少内存交换
- 评估Xmx方法:第一次起始设置大一点,跟踪监控日志,调整为堆峰值*2~3即可
- 最多300毫秒STW时间,200~500区间,增大可减少GC次数,提高吞吐
- -xss128k/256k 虚拟机栈空间一般128k就够用了。超过256k考虑优化,不建议超过256k
- G1一般不设置新生代的大小,G1新生代是动态调整的。
- jstat -gcutil
arthas
用来查看线程,内存,GC和运行时状态,查看入参/返回值/异常,快速定位应用的热点,生成火焰图等功能,帮助更快排查疑难问题
主要使用:dashboard命令 进入arths查看帮助: --help
wget https://arthas.aliyun.com/arthas-boot.jar; java -jar arthas-boot.jar
[root@java tmp]# java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.6.0
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 7649 scos-cms-web-1.3.0-SNAPSHOT.jar
1
[INFO] local lastest version: 3.6.2, remote lastest version: 3.6.7, try to download from remote.
[INFO] Start download arthas from remote server: https://arthas.aliyun.com/download/3.6.7?mirror=aliyun
[INFO] File size: 12.92 MB, downloaded size: 9.87 MB, downloading ...
[INFO] Download arthas success.
[INFO] arthas home: /root/.arthas/lib/3.6.7/arthas
[INFO] Try to attach process 7649
[INFO] Attach process 7649 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.6.7
main_class
pid 7649
time 2023-01-07 21:28:17
$ dashbord
基本信息
查看gcc
jstat -gcutil 29198--进程id 5000--时间秒
dump获取方式
1.获取heap dump文件 inux下切换到JDK_HOME/bin/,执行以下命令:./jmap -dump:format=b,file=heap.hprof 2576--进程号 这样就会在当前目录下生成heap.hprof文件,这就是heap dump文件。 2.获取thread dump文件 linux下执行:./jstack 2576 > thread.txt windows/linux则会将命令执行结果转储到thread.txt,这就是thread dump文件。有了dump文件后,我们就能借助性能分析工具获取dump文件中的信息。 3.如果我们只需要将dump中存活的对象导出,那么可以使用:live参数 jmap -dump:live,format=b,file=heapLive.hprof 2576
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!