JVM新生代和老生代比例如何设置?
一、查看启动时显式参数
jps -v
- 功能:列出所有Java进程及其显式传递的JVM参数(如
-Xmx
、-XX:+UseG1GC
)。 - 示例:
说明:适用于快速查看进程启动时指定的参数。jps -v 输出示例:23864 common-mistakes-0.0.1-SNAPSHOT.jar -Xms1g -Xmx1g
- 功能:列出所有Java进程及其显式传递的JVM参数(如
ps -ef | grep java
- 功能:通过系统进程查看命令行中显式设置的JVM参数(需在
CMD
列中识别)。 - 示例:
适用场景:容器或非JDK环境下的参数查看。ps -ef | grep java 输出示例:java -Xms1g -Xmx1g -jar app.jar
- 功能:通过系统进程查看命令行中显式设置的JVM参数(需在
二、查看所有默认参数(含隐式参数)
java -XX:+PrintFlagsFinal -version
- 功能:打印JVM所有参数的最终值(包括默认值和用户修改后的值)。
- 输出格式:
name = value
:未修改的默认值。name := value
:被修改后的值。
- 示例:
关键参数:java -XX:+PrintFlagsFinal -version > flags.txt 查看堆内存参数:grep -i heap flags.txt
MaxHeapSize
(最大堆)、InitialHeapSize
(初始堆)、MetaspaceSize
(元空间)。
-XX:+PrintCommandLineFlags
- 功能:仅打印启动时显式和隐式设置的参数(如
-XX:InitialHeapSize
)。 - 示例:
java -XX:+PrintCommandLineFlags -version 输出示例:-XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 ```。
- 功能:仅打印启动时显式和隐式设置的参数(如
三、实时查看运行中JVM参数
jinfo
- 查看单个参数:
输出:jinfo -flag 示例:查看最大堆大小 jinfo -flag MaxHeapSize 12345
-XX:MaxHeapSize=4294967296
。 - 查看所有参数:
jinfo -flags 输出所有JVM参数(含默认值和修改值) ```。
- 查看单个参数:
jmap -heap
- 功能:查看堆内存配置及GC信息(如堆大小、新生代比例)。
- 示例:
jmap -heap 输出示例:Heap Configuration: NewSize=20.0MB, MaxHeapSize=4096.0MB ```。
四、容器环境中的参数查看
- Docker容器
- 进入容器后使用
jcmd
:docker exec -it sh jcmd VM.flags 输出所有JVM参数(如-XX:MaxGCPauseMillis=200) ```。
- 注意:需确保容器内安装JDK工具链。
- 进入容器后使用
五、其他辅助工具
- VisualVM
- 功能:图形化查看JVM参数、堆内存、线程状态等(需JDK 6+)。
- 操作:启动后双击目标进程,进入"概述"标签页查看参数。
- JConsole
- 功能:监控JVM运行时参数及性能指标(需启用JMX)。
- 启动:
jconsole
。
总结
场景 | 推荐命令 | 输出内容 |
---|---|---|
查看显式启动参数 | jps -v 或 ps -ef | grep java | 进程ID及显式参数 |
查看所有参数(含默认) | java -XX:+PrintFlagsFinal | 参数键值对(含修改标记) |
实时动态参数 | jinfo -flags | 运行中参数值 |
容器环境 | docker exec ... jcmd VM.flags | 容器内JVM参数 |
注意:生产环境建议结合监控工具(如Prometheus+Grafana)持续跟踪参数变化。