Windows更新后,我的jps,jconsole和jvisualvm不再工作了。
Jps为我提供了流程ID,但它告诉我process information unavailable
而且我无法像以前那样使用jvisualvm连接到这些进程。
我正在运行1.6.0_22 jre。
我过去已经遇到过这个问题,尝试this trick,并且它有效。但这一次,运气不好,没有用。
修改:
我找到了一个解决方案:在我的临时文件夹中,我确实销毁了hsperfdata_<username>
文件夹。显然我的用户名存在问题。该文件夹名为hsperfdata_myname。在通过调用jps进行销毁和重新创建之后,它被称为hasperfdata_MYNAME。
很奇怪。
答案 0 :(得分:25)
在我的临时文件夹中,我确实销毁了hsperfdata_文件夹。显然我的用户名存在问题。该文件夹名为hsperfdata_myname。在通过调用jps进行销毁和重新创建之后,它被称为hasperfdata_MYNAME。
很奇怪。
答案 1 :(得分:10)
在unix上,确保以启动它的用户身份运行。
答案 2 :(得分:0)
我们在这里遇到同样的问题。
tmp文件夹技巧也不适用于我们。
到目前为止,我们已经找到了一些让事情再次发挥作用的方法:
答案 3 :(得分:0)
我编写了一个脚本来应用解决方法,我从我的一些监控脚本中调用,直到修复它为止。
#!/bin/bash
# Name: fix_jps.bash
# Author: Cameron Pierce
#
# Purpose: create /tmp/hsperfdata directories that jps and jstat can work with
## VARIABLES
RETVAL=""
fileHSP=""
filePID=""
fileLOG=/tmp/fix_jps.log
# for every /tmp/hsperfdata_[name] directory that exists
for fileHSP in `ls -d /tmp/hsperfdata_*`; do
#echo "entry ${fileHSP}" # DEBUG
# if our search returns entries that are not directories, skip them
if [ ! -d ${fileHSP} ]; then
continue
fi
#ls ${fileHSP} # DEBUG
# alternative to ls below
#FINDFILES=(${fileHSP}/*)
#if [ ${#FINDFILES[@]} -gt 0 ]; then
# echo "files in $fileHSP: ${#FINDFILES[@]} "
#fi
for filePID in `ls ${fileHSP}/ 2>> ${fileLOG} | grep "[[:digit:]]\{1,\}"`; do
#echo "pid name: ${filePID}" # DEBUG
# if the directory was empty, move on to the next fileENTRY
if [ "${filePID}" == "" ]; then
#echo "the contents of the variable filePID appear to be empty \"${filePID}\"" # DEBUG
# remove the fileHSP if empty; this will clean up user hsperfdata dirs
rmdir ${fileHSP} 2>> ${fileLOG}
continue
# if a symlink already exists, move on to the next fileENTRY
elif [ -h /tmp/hsperfdata_${filePID} ]; then
#echo "symlink already exists for /tmp/hsperfdata_${filePID}" # DEBUG
continue
fi
#echo "name: ${filePID}"
# if a process exists for filePID, create a symlink to the source file
ps -eo pid | awk '{print $1}' | grep -q "^${filePID}$"
RETVAL=$?
# if a process exists with pid of filePID and a symlink doesn't exists, create symlink
if [ $RETVAL -eq 0 -a ! -e /tmp/hsperfdata_${filePID} ]; then
ln -s ${fileHSP}/${filePID} /tmp/hsperfdata_$filePID
#echo ls -l /tmp/hs perfdata_${filePID} # DEBUG
fi
done
done
# remove broken symlinks
#find -L /tmp/hsperfdata_* -type l # DEBUG
find -L /tmp/hsperfdata_* -type l -delete