JVM调优的常见命令行

本文介绍了JVM相关的命令和调优参数。命令方面,如jps可查询运行的JVM进程,jstat能显示JVM进程数据,jmap可查看堆信息等;还提及top、pidstat、vmstat等系统命令。调优参数包括 -Xmx、-Xms、-Xmn等,分别用于设置最大堆内存、最小堆内存、年轻代大小等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)jps命令用于查询正在运行的JVM进程

2)jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据

/home/tools/jdk1.8.0_181/bin/jstat -gcutil 30386(java进程号) 2000

  

3)jinfo用于查询当前运行这的JVM属性和参数的值
[java@xftest0 ~]$ jinfo 43934
Attaching to process ID 43934, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01
Java System Properties:
 
java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = /usr/java/jdk1.6.0_45/jre/lib/amd64
java.vm.version = 20.45-b01
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
path.separator = :
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg = sun.io
sun.java.launcher = SUN_STANDARD
env = dev
user.country = US
sun.os.patch.level = unknown

4)jmap用于显示当前Java堆和永久代的详细信息

命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件,生成dump的命令为:jmap -dump:live,format=b,file=文文件名(hprof后缀) <PID> 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

5)jstack用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。

6)top命令 通过top -Hp 23344可以查看该进程下各个线程的cpu使用情况;具体实操经验见:https://www.cnblogs.com/wuchanming/p/7766994.html

7)pidstat实时查看一个进程的CPU使用情况及上下文切换情况

8)vmstat查看总体的CPU使用情况 

      sudo vmstat 2 3

        參数2表示每一个2秒显示一下结果,3表示显示结果的数目。

       cs列表示每秒上下文切换次数,us表示用户CPU时间。

9) jmap  -heap 29544 查看某一实例jvm配置

二、JVM常见的调优参数包括

-Xmx

  指定java程序的最大堆内存, 使用java -Xmx5000M -version判断当前系统能分配的最大堆内存

-Xms

  指定最小堆内存, 通常设置成跟最大堆内存一样,减少GC

-Xmn

  设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小。所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss

  指定线程的最大栈空间, 此参数决定了java函数调用的深度, 值越大调用深度越深, 若值太小则容易出栈溢出错误(StackOverflowError)

-XX:PermSize

  指定方法区(永久区)的初始值,默认是物理内存的1/64, 在Java8永久区移除, 代之的是元数据区, 由-XX:MetaspaceSize指定

-XX:MaxPermSize

  指定方法区的最大值, 默认是物理内存的1/4, 在java8中由-XX:MaxMetaspaceSize指定元数据区的大小

-XX:NewRatio=n

  年老代与年轻代的比值,-XX:NewRatio=2, 表示年老代与年轻代的比值为2:1

-XX:SurvivorRatio=n

  Eden区与Survivor区的大小比值,-XX:SurvivorRatio=8表示Eden区与Survivor区的大小比值是8:1:1,因为Survivor区有两个(from, to)

 

 

### 常见JVM性能技巧及参数配置 #### 一、内存分配整堆大小是JVM性能的重要部分之一。通常可以通过设置`-Xms`和`-Xmx`参数来指定初始堆大小和最大堆大小,从而减少动态扩展带来的开销。对于长期运行的服务端应用程序来说,建议将这两个值设为相同以避免频繁的堆空间整[^1]。 此外,在新生代区域中合理划分Eden区与Survivor区的比例也至关重要。这可通过`-XX:NewRatio`以及`-XX:SurvivorRatio`两个选项实现。适当增大年轻代比例有助于提高短生命周期对象清理效率,进而降低老年代的压力并减少Full GC次数[^2]。 #### 二、垃圾收集器的选择 不同的应用场景适合不同类型的GC算法。例如,在注重吞吐量的情况下可以选择Parallel Scavenge加Parallel Old组合;而对于延迟敏感型业务,则推荐CMS或者G1 Garbage Collector作为首选方案[^3]。 以下是几种常用垃圾回收器及其特点概述: - **Serial GC**: 单线程执行所有标记清除操作,适用于单核CPU环境下的小型数据集处理场景。 - **ParNew/Concurrent Mark Sweep (CMS)**: 多线程并发工作模式降低了暂停时间,但可能会导致碎片化问题需要额外整理过程。 - **Garbage First (G1)**: 提供更可控的停顿时间和更好的可预测性表现,尤其当面对大容量物理内存时表现出色。 针对特定需求还可以启用相应试开关如 `-verbose:gc`, `–XX:+PrintGCDetails` 来监控实际运行状况以便进一步微策略. #### 三、其他高级选项设定 除了上述基础层面外还有一些细粒度控制可供探索: - 使用`-XX:+UseStringDeduplication` 开启字符串去重功能, 对于存在大量重复字符序列的应用程序能够有效节省存储空间. - 设置`-XX:MaxDirectMemorySize` 参数限制NIO direct buffer 的总量以防溢出异常. - 如果发现频繁发生Metaspace OOM错误则考虑增加其上限:`-XX:MaxMetaspaceSize`. 最后值得注意的是每次修改都应基于充分测试验证效果后再推广至生产环境中实施. ```bash java -Xms512m -Xmx4g \ -XX:NewRatio=2 -XX:SurvivorRatio=8 \ -XX:+UseG1GC -XX:MaxGCPauseMillis=200 \ -XX:+PrintGCDetails -jar your-application.jar ``` 以上展示了一个综合性的命令行示例,其中包含了多种前述提到的技术手段应用于实战当中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值