在 Kubernetes Pod 里查看 Java 应用的 JVM 参数
September 11, 2024Less than 1 minute
在 Kubernetes Pod 里查看 Java 应用的 JVM 参数
想确认线上 Pod 里的 Java 进程到底跑了哪些 JVM 参数(堆大小、GC 策略等),不用翻部署 YAML 猜,直接进容器问 JVM 自己。前提是镜像里带了 jcmd 或 jinfo(JDK 一般有,精简的 JRE 镜像可能没有)。
进容器
kubectl exec -it <pod-name> -- /bin/bash
把 <pod-name> 换成实际 Pod 名,进去后是一个容器内的 shell。
找 Java 进程的 PID
ps aux | grep java
容器里一般就一个 Java 进程,PID 通常是 1。多个 JVM 实例时认准目标那个。
用 jcmd 查
jcmd <pid> VM.flags
VM.flags 列出当前所有生效的 JVM 标志,是最直接的一条。jcmd <pid> help 还能看到更多可查的项(VM.system_properties、GC.heap_info 等)。
用 jinfo 查
jinfo <pid>
jinfo 直接打印 JVM 标志和系统属性,信息更全一些。
几点提醒
- 镜像里没有
jcmd/jinfo的话,可以从 OpenJDK 或其它 JDK 发行版里取出来,或者干脆换个带完整 JDK 的镜像。 - 多 JVM 共存的 Pod,先用
ps确认 PID 对应的是你要看的那个进程,别查错。