Jps информация о процессе недоступна - jconsole и jvisualvm не работают
После обновления Windows мои jps, jconsole et jvisualvm больше не работают.
Jps дает мне идентификаторы процесса, но он сообщает мне process information unavailable
И я не могу подключиться к этим процессам с помощью jvisualvm, как я привык.
Я запускаю 1.6.0_22 jre.
У меня уже была проблема в прошлом, она пытается этот трюк, и это сработало. Но на этот раз, неудача, это не помогает.
Изменить:
Я нашел решение: в моей временной папке я уничтожил папку hsperfdata_<username>
. По-видимому, возникла проблема с моим именем пользователя. Папка называлась hsperfdata_myname. После того, как был уничтожен и повторно создан вызовом jps, он был вызван hasperfdata_MYNAME.
Очень странно.
Ответы
Ответ 1
В моей временной папке я уничтожил папку hsperfdata_. По-видимому, возникла проблема с моим именем пользователя. Папка называлась hsperfdata_myname. После того, как был уничтожен и повторно создан вызовом jps, он был вызван hasperfdata_MYNAME.
Очень странно.
Ответ 2
В unix убедитесь, что вы работаете как пользователь, который его запустил.
Ответ 3
у нас такая же проблема.
Тэг папки tmp также не сработал для нас.
До сих пор мы нашли несколько способов заставить все работать снова:
- восстановление системы
- переименуйте папку temp в разделе "C:\Documents and Settings\myusername\Local Settings" и создайте новую временную папку (я не уверен, что это безопасно для Windows)...
- вручную удалите материал из папки temp
- возможно самый безопасный: запустите ccleaner, это очистит временную папку
Ответ 4
Я написал script, чтобы применить обход, который я вызываю из некоторых моих сценариев мониторинга, пока это не будет исправлено.
#!/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