我确实尝试过搜索,但 pmap 上似乎没有太多内容,所以这里是。
我有一个与 WebLogic 实例配合使用的脚本来收集它们的数据,我们可以将这些数据发送给开发人员进行故障排除。数据收集中包含指定实例 PID 上的 pmap,但当实例遇到线程阻塞、OC 较大或处于失败状态时,pmap 会挂起。
由于我们使用的服务器上没有安装超时(也不能安装),我尝试编写一个条件,让 pmap 进程运行不超过 45 秒,如果超过则终止它,但它没有似乎不起作用,因为 pmap 仍然挂在受影响的实例上。
这是代码:
echo "Running pmap for a maximum of 45 seconds..."
pmap -x $1 > /tmp/pmapdump.txt &
pmapPID=$!
sleep 10
pmapRunning=$(pgrep -fl "${pmapPID}" |head -1 |awk '{print $1}')
if [ "${pmapRunning}" != "" ]; then
sleep 30
echo "The pmap appears to be stuck. This typically happens if the instance is in a failed state or has stuck threads."
echo "Killing the pmap and moving on with the rest of the script..."
kill -9 "${pmapPID}"
else
:
fi
这是由主脚本调用的,并且似乎执行正确,除了不终止进程并像我决定创建此脚本之前那样挂起。
非常感谢任何帮助/建议,因为我开始为此烦恼不已。