常用JVM调优命令

一、进程与内存分析工具
1. jps(Java Process Status)

功能‌:列出当前系统中所有 Java 进程的进程 ID 和主类名称。
常用参数‌:

  • -l:显示主类的完整包路径或 JAR 文件路径。
  • -v:显示 JVM 启动时传递的参数。
  • -m:显示传递给 main() 方法的参数。

2. jmap(Memory Map)

功能‌:生成堆内存快照和对象分布统计。
常用命令‌:

  • 堆内存配置查询‌:-heap <pid> 查看堆内存分区(Eden/Survivor/Old)的容量和使用率。
  • 存活对象统计‌:通过 -histo:live 参数触发 Full GC 后统计存活对象(生产环境慎用)。
  • 堆转储文件生成‌:生成 .hprof 格式的堆转储文件(需结合 MAT 或 VisualVM 分析)。

3. jstat(JVM Statistics Monitoring Tool)

功能‌:实时监控内存、类加载和垃圾回收状态。
核心参数‌:

  • -gcutil:显示各内存区域(Eden/Old/Metaspace)的使用百分比及 GC 次数/耗时。
  • -gccapacity:显示各内存区域的最小/最大容量阈值。
  • -class:监控类加载/卸载数量及耗时。

示例采样频率‌:

  • jstat -gcutil <pid> 1000 10:每秒采样 1 次,共 10 次。

二、线程与锁分析工具

jstack(Stack Trace)

功能‌:生成 Java 进程的线程快照,用于诊断死锁或线程阻塞问题。
关键操作‌:

  • 导出线程堆栈‌:将结果重定向到文件(如 thread_dump.log)。
  • 强制生成快照‌:使用 -F 参数在进程无响应时强制生成。

死锁检测方法‌:
在日志中搜索 deadlock 关键词,查看持有锁的线程堆栈信息。


三、垃圾回收调优参数

1. 收集器选择
  • G1 收集器‌(默认推荐):
    • -XX:+UseG1GC
    • -XX:MaxGCPauseMillis=200(设置最大停顿时间目标)
  • CMS 收集器‌(低延迟场景):
    • -XX:+UseConcMarkSweepGC
2. GC 日志配置
  • -Xloggc:<file_path>:指定 GC 日志文件路径。
  • -XX:+PrintGCDetails:输出详细的 GC 事件信息。
  • -XX:+PrintGCDateStamps:在日志中增加时间戳。

四、内存参数优化

1. 堆内存配置
  • -Xms4g -Xmx4g:固定堆大小,避免动态扩容引发性能波动。
  • -XX:MetaspaceSize=256m:设置元空间初始大小,防止频繁扩容。
  • -XX:SurvivorRatio=8:调整新生代 Eden 区与 Survivor 区的容量比例(默认 8:1:1)。
2. 内存溢出诊断
  • -XX:+HeapDumpOnOutOfMemoryError:在 OOM 时自动生成堆转储文件。
  • -XX:HeapDumpPath=./dump.hprof:指定堆转储文件保存路径。

五、高级诊断工具

jcmd(JVM Command)

功能‌:集成化诊断工具(JDK 7+ 支持),支持查询 JVM 参数、生成堆/线程快照等。
常用命令‌:

  • VM.flags:查看 JVM 启动参数及默认值。
  • GC.heap_info:输出堆内存摘要(等效于 jmap -heap)。
  • JFR.start:启动 Java Flight Recorder 记录性能事件(需商业许可)。
常用JVM命令包括: 1. -Xmx:设置JVM最大可用内存大小,例如 -Xmx2g 表示JVM最大可用内存为2GB。 2. -Xms:设置JVM初始内存大小,例如 -Xms1g 表示JVM初始内存为1GB。 3. -XX:MaxPermSize:设置JVM最大持久代大小,例如 -XX:MaxPermSize=256m 表示JVM最大持久代大小为256MB。 4. -XX:PermSize:设置JVM初始持久代大小,例如 -XX:PermSize=128m 表示JVM初始持久代大小为128MB。 5. -XX:NewSize:设置JVM新生代初始大小,例如 -XX:NewSize=512m 表示JVM新生代初始大小为512MB。 6. -XX:MaxNewSize:设置JVM新生代最大大小,例如 -XX:MaxNewSize=1g 表示JVM新生代最大大小为1GB。 7. -XX:SurvivorRatio:设置新生代中eden区和survivor区的比例,例如 -XX:SurvivorRatio=8 表示eden区和survivor区的比例为8:1。 8. -XX:MaxTenuringThreshold:设置晋升老年代的阈值,例如 -XX:MaxTenuringThreshold=15 表示对象经过15次Minor GC后进入老年代。 9. -XX:+UseParallelGC:使用并行垃圾回收器。 10. -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器。 11. -XX:+UseG1GC:使用G1垃圾回收器。 12. -XX:+HeapDumpOnOutOfMemoryError:当JVM出现OutOfMemoryError错误时,自动生成堆转储文件。 除了上述命令外,还有一些其他的JVM命令,例如-Xss、-XX:CMSInitiatingOccupancyFraction、-XX:ParallelGCThreads等,可以根据具体的应用场景进行选择和整。在实际应用中,可以通过不断测试和整来找到最JVM配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值