jattach 怎么用:5 分钟给运行中的 JVM 发出一条命令

📅 2026/8/27 17:02:07
jattach 怎么用:5 分钟给运行中的 JVM 发出一条命令
jattach 怎么用5 分钟给运行中的 JVM 发出一条命令【免费下载链接】jattachJVM Dynamic Attach utility项目地址: https://gitcode.com/gh_mirrors/ja/jattachjattach 是一个给运行中的 Java 进程发指令的小工具加载探针、抓线程栈、导堆快照一条命令搞定。它本体只有一个极小的 C 程序不依赖 JDK装了 JRE 就能跑Linux 容器里也照样工作。原理速览它是怎么和 JVM 对话的HotSpot 自带一套动态附加协议jattach 把它做成了独立的小程序。整条链路三步触发监听器先在目标进程的工作目录写一个.attach_pidpid触发文件再补一发 SIGQUIT 信号JVM 见到文件就会在/tmp下开出 attach 监听套接字。连接并下发命令jattach 连上/tmp/.java_pidpid这个 Unix 域套接字把 threaddump、dumpheap 这类命令按协议格式发过去JVM 执行后把结果回传。跨容器自动适配它会先钻进目标进程的 mount、网络命名空间再切换成和它相同的用户所以从宿主机给容器里的 JVM 发命令也能一次成功。实现并不长HotSpot 部分集中在src/posix/jattach_hotspot.c想看细节直接翻源码。动手前30 秒完成环境自检装之前花 30 秒确认三件事检查项要求系统Linux含容器、Windows、macOS编译器C 编译器Linux/macOS 用 gcc 或 clangWindows 用 MSVC构建工具仅源码编译需要 make走包管理器则什么都不用装快速安装 jattach两条路线任选路线一一条命令源码编译没有现成仓库的发行版走这条一条命令克隆并编译git clone https://gitcode.com/gh_mirrors/ja/jattach cd jattach make编完可执行文件在build/jattach挪到 PATH 里即可用。路线二用包管理器直装发行版命令一句话说明Debian / Ubuntusudo apt install jattach官方源就有Alpine Linuxsudo apk add --no-cache jattach包在 edge/community 仓库Arch Linuxyay -S jattach从 AUR 安装FreeBSDsudo pkg install jattach官方源直装验证是否装好跑两条真实命令先敲一条不带参数的命令能打出版本号就是装好了$ jattach jattach 2.2 built on ... Usage: jattach pid cmd [args ...]再用ps aux | grep java找一个 Java 进程的 pid发出第一条真实指令$ jattach 12345 threaddump main #1 [0x...] java.lang.Thread.State: RUNNABLE能看到线程栈说明整条 attach 链路全通 ✅常见踩坑3 个高频问题速解报Process 1234 not foundpid 写错或进程已退出容器里的进程要在宿主机上用ps取 pid。报Failed to change credentials...目标 JVM 不属于当前用户换同用户执行或用 root 跑它会自动切权限。命令发出后卡住无输出JVM 的 attach 监听最长要等 6 秒或目标根本不是 HotSpot/OpenJ9 系进程确认进程状态正常后重试。装好就去试jattach pid jcmd help -all看看有哪些子命令想深挖机制直接读src/posix/里的源码。【免费下载链接】jattachJVM Dynamic Attach utility项目地址: https://gitcode.com/gh_mirrors/ja/jattach创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考