原文網(wǎng)址:解決jstack的報(bào)錯(cuò):Unable to open socket file_IT利刃出鞘的博客-CSDN博客
簡(jiǎn)介
說明
本文介紹解決jstack的報(bào)錯(cuò)的方法,報(bào)錯(cuò)信息為:Unable to open socket file。
分享Java技術(shù)星球:自學(xué)精靈 - IT技術(shù)星球
詳細(xì)報(bào)錯(cuò)信息:
進(jìn)程號(hào): Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
概述
我們通常會(huì)用jstack、jmap等工具排查CPU占用高、內(nèi)存占用高等問題。但在使用這些命令時(shí)有時(shí)會(huì)報(bào)錯(cuò),如下所示:
原因及解決方案
1.用戶權(quán)限不正確
原因
如果執(zhí)行java程序的用戶與執(zhí)行jstack命令的用戶不一致,會(huì)導(dǎo)致報(bào)錯(cuò)。
解決方案
切換到執(zhí)行java程序的那個(gè)用戶再執(zhí)行jstack命令。
方法
第一步:查找java進(jìn)程對(duì)應(yīng)的用戶(命令為:ps -aux | grep "進(jìn)程號(hào)")
例:
第二步:使用su命令切換到對(duì)應(yīng)用戶
su root
2./tmp路徑?jīng)]有進(jìn)程信息
原因
java進(jìn)程啟動(dòng)的時(shí)候,默認(rèn)會(huì)在/tmp/hsperfdata_$USER下面創(chuàng)建一個(gè)以PID命名的文件,里面包含了一些信息,會(huì)被jstack、jmap命令使用到。當(dāng)文件不存在時(shí)就會(huì)報(bào)上述錯(cuò)誤。
導(dǎo)致/tmp下沒有相關(guān)文件的原因有:
使用了docker來啟動(dòng)
使用了systemd來啟動(dòng)(systemd用于監(jiān)控進(jìn)程狀態(tài))
解決方案
如果是使用了docker來啟動(dòng)
解決方法:需要進(jìn)入到容器中去執(zhí)行jstack命令。
如果是使用了systemd來啟動(dòng)
解決方法:修改一項(xiàng)配置:PrivateTmp=true改為false