You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jcmd执行VM.native_memory失败:权限错误及无效PID问题求助

问题描述

为排查潜在内存泄漏,我尝试用jcmd分析本机内存,操作步骤及遇到的问题如下:

  • 应用启动时添加VM参数:
-XX:NativeMemoryTracking=summary
  • 通过jps获取进程PID:
sudo ./jps -l
25125 MyService
  • 执行jcmd命令失败:
    常规命令执行报错:
sudo ./jcmd 25125 VM.native_memory
25125:
java.io.IOException: well-known file /tmp/.java_pid25125 is not secure: file should be owned by the current user (which is 0) but is owned by 37561
    at sun.tools.attach.LinuxVirtualMachine.checkPermissions(Native Method)
    at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:117)
    at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
    at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208)
    at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147)
    at sun.tools.jcmd.JCmd.main(JCmd.java:131)

尝试强制模式也报错:

sudo ./jcmd -F 25125 VM.native_memory
Invalid pid specified
  • 当前使用的OpenJDK版本:
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b11)
OpenJDK 64-Bit Server VM (build 25.362-b11, mixed mode)
解决办法

方法1:以进程所属用户身份执行jcmd

报错核心原因是/tmp/.java_pid25125文件归用户37561所有,但你通过sudo以root(用户ID 0)身份执行jcmd,权限不匹配。直接切换到进程所属用户执行命令即可:

su - 37561 -c "./jcmd 25125 VM.native_memory"

方法2:临时调整临时文件权限(不推荐,有安全风险)

若无法切换用户,可临时修改/tmp/.java_pid25125的所有者为root:

sudo chown root:root /tmp/.java_pid25125

执行完jcmd分析后,建议立即改回原所有者,避免影响应用正常运行:

sudo chown 37561:37561 /tmp/.java_pid25125

方法3:确认工具与应用的JDK版本一致性

确保你使用的jcmd和目标进程依赖的JDK版本完全一致,不同版本的JDK工具可能存在兼容性问题。可通过以下命令查看应用的JDK路径:

sudo ls -l /proc/25125/exe

然后使用该路径下的jcmd执行分析命令。


内容的提问来源于stack exchange,提问作者yanefedor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:10:26