java - remote - Información de proceso jps no disponible-jconsole y jvisualvm no funcionan
visualvm linux (4)
Después de una actualización de Windows, mi jps, jconsole et jvisualvm ya no funcionan.
Jps me da los identificadores de proceso, pero me dice que la process information unavailable
Y no puedo conectarme a esos procesos con jvisualvm como solía hacerlo.
Estoy ejecutando el 1.6.0_22 jre.
Ya tuve el problema en el pasado, prueba este truco y funcionó. Pero esta vez, mala suerte, no ayuda.
Edición: encontré una solución : en mi carpeta temporal, sí hsperfdata_<username>
la hsperfdata_<username>
. Aparentemente hubo un problema con el caso de mi nombre de usuario. La carpeta fue llamada hsperfdata_myname. Después de haber sido destruido y recreado por una llamada a jps, se llamó hasperfdata_MYNAME.
Muy extraño.
En Unix, asegúrese de que se está ejecutando como el usuario que lo inició.
En mi carpeta temporal, destruí la carpeta hsperfdata_. Aparentemente hubo un problema con el caso de mi nombre de usuario. La carpeta fue llamada hsperfdata_myname. Después de haber sido destruido y recreado por una llamada a jps, se llamó hasperfdata_MYNAME.
Muy extraño.
Escribí una secuencia de comandos para aplicar la solución alternativa, a la que llamo desde algunas de mis secuencias de comandos de supervisión, hasta que se solucione.
#!/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
Estamos teniendo el mismo problema aquí.
El truco de la carpeta tmp tampoco nos funcionó.
Hasta ahora, hemos encontrado algunas maneras de hacer que las cosas vuelvan a funcionar:
- una restauración del sistema
- cambie el nombre de la carpeta temporal en "C: / Documents and Settings / myusername / Local Settings" y cree una nueva carpeta temporal (no estoy seguro de que esto sea algo seguro en relación con Windows ...)
- empezar a eliminar cosas de la carpeta temporal manualmente
- Probablemente el más seguro: ejecute ccleaner, esto limpiará la carpeta temporal