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

 

posted @   逆风飞翔的博客  阅读(53)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示