2010-09-27 12 views
15

Estoy tratando de solucionar algunos problemas con los procesos java en un cuadro de Solaris, pero al ejecutar jps no se devuelve ningún resultado. Y jstack da el error 'Permiso denegado'. La caja es parte de un grupo de 3 servidores idénticos, jps y jstack funcionan bien en los otros 2 servidores.jps no devuelve ningún resultado incluso cuando los procesos java se están ejecutando

me encontré con el siguiente mensaje en el foro de alguien con el mismo problema, pero no hay respuestas: http://forums.sun.com/thread.jspa?threadID=5422237

Para aclarar puntos básicos de funcionamiento y grep para Java da a todos los Procesos de Java correctamente, pero JPS da nada (anónima con el 'programa' y 'cliente' para proteger a los culpables):

program @ clientdelivery2 : ~/ 
-> bps auxww|grep java 
program  3427 5.5 54.067742726649544 ?  S Sep 25 1039:47 /usr/jdk/instances/jdk1.6.0_16/bin/amd64/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/app/client/program/tomcat/conf/logging.properties -Xmx6144m -XX:PermSize=128m -XX:MaxPermSize=512m -Djava.endorsed.dirs=/app/client/program/tomcat/endorsed -classpath :/app/client/program/tomcat/bin/bootstrap.jar -Dcatalina.base=/app/client/program/tomcat -Dcatalina.home=/app/client/program/tomcat -Djava.io.tmpdir=/app/client/program/tomcat/temp org.apache.catalina.startup.Bootstrap start 
program 29915 0.1 11.915252441467896 ?  S 14:55:28 3:59 /usr/jdk/instances/jdk1.6.0_16/bin/amd64/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/app/clientclone/program/tomcat/conf/logging.properties -Xmx2g -XX:PermSize=128m -XX:MaxPermSize=512m -Dcom.sun.management.jmxremote -Djava.endorsed.dirs=/app/clientclone/program/tomcat/endorsed -classpath :/app/clientclone/program/tomcat/bin/bootstrap.jar -Dcatalina.base=/app/clientclone/program/tomcat -Dcatalina.home=/app/clientclone/program/tomcat -Djava.io.tmpdir=/app/clientclone/program/tomcat/temp org.apache.catalina.startup.Bootstrap start 
program  1573 0.0 0.0 4760 1332 pts/5 S 17:05:24 0:00 grep --colour java 

program @ clientdelivery2 : ~/ 
-> jps 

program @ clientdelivery2 : ~/ 
-> 

Pregunté por ahí y desde aquí http://forums.oracle.com/forums/message.jspa?messageID=5408592 Tengo que la cuestión es:

12460/2: mkdir("/tmp/hsperfdata_program", 0755) Err#13 EACCES [ALL] 

Significado Se le niega el acceso a jps al directorio psperfdata.

¿Alguien se ha encontrado con este problema y sabe cómo solucionarlo?

+0

procesos Java se ejecutan como el mismo usuario que estoy corriendo JPS y jstack como. bps puede listar los procesos. –

+0

El problema del asker es diferente, pero para mí fue debido a que el trabajo cron eliminó los archivos en '/ tmp/hsperfdata_ *' cuando tienen más de 10 días. Esto resultó en procesos java de larga ejecución que no aparecen en la salida 'jps'. Ver [referencia] (http://www.semicomplete.com/blog/geekery/jps-shows-nothing-useful.html). – ADTC

Respuesta

13

Resulta que el usuario no tiene acceso a/tmp a causa de algún problema con el montaje del sistema de archivos. Esto lleva a que los archivos dentro de hsperfdata_ nunca se escriban, aunque el usuario tenía acceso a la carpeta/tmp/hsperfdata_.

+1

+1: Tuve el mismo problema por el cual el/tmp/hsperfdata_ era propiedad de alguien que no era el usuario; alguien lo había probado. Tuve que volver a conectarlo con el usuario correcto y reiniciar los procesos para que jps funcione correctamente. – mogsie

+0

El problema del asker es diferente, pero para mí fue debido a que el trabajo de cron eliminó los archivos en '/ tmp/hsperfdata_ *' cuando tienen más de 10 días. Esto resultó en procesos java de larga ejecución que no aparecen en la salida 'jps'. Ver [referencia] (http://www.semicomplete.com/blog/geekery/jps-shows-nothing-useful.html). – ADTC

2

Probar:

jps -J-Djava.io.tmpdir=/app/client/program/tomcat/temp 
+0

Cambia nada. ¿Por qué sugieres eso? –

+2

Porque es donde jps busca 'hsperfdata_ *' dirs. ¿Existe alguno en '/ app/client/program/tomcat/temp'? Si 'java.io.tmpdir' no está configurado, se vería en'/tmp'. Si jps no puede encontrar el directorio hsperfdata (o si no hay archivos en ese directorio), no informará nada. – kschneid

+3

probablemente debería haber añadido que los argumentos de los dos procesos Java que muestra son: '-Djava.io.tmpdir =/app/cliente/programa/Tomcat/temp' y' -Djava.io.tmpdir =/app/clientclone/program/tomcat/temp'. – kschneid

6

Asegúrese de que el programa que se está tratando de 'detectar' con JPS (y jstack, por cierto) se ejecuta sin ajustar la configuración java.io.tmpdir o estableciéndolo en el sistema por defecto.

Existen varios errores en la Red de desarrolladores de Sun temp dir locations should not be hardcoded, Fix for 6938627 breaks visualvm monitoring when -Djava.io.tmpdir y Make temporary directory use property java.io.tmpdir que son relevantes aquí.

La historia: java Java 6 Update 22 solía usar un directorio temporal codificado para poner los datos recopilados para su uso por jps y jstack. Los programas jps y jstack sabían dónde buscar.

Sin embargo, como alguien planteó un 'error' en la actualización 23 de Java 6, 'lo arreglaron' para usar la configuración java.io.tmpdir java runtime en su lugar. Ahora, esto se establece de manera predeterminada en una ubicación específica del sistema, que es la que estaba 'codificada'. Pero si configura la opción al invocar su programa java, entonces usará eso en su lugar. Resultado: jps y jstack miran donde esperan y no encuentran nada.

La solución, por tanto, es asegurarse de que la opción java.io.tmpdir se establece en el sistema por defecto (por ejemplo, en el Mac:

> java -Djava.io.tmpdir=$TMPDIR javamain 

)

al invocar su programa. Entonces jps y jstack lo encontrarán.

Mi colega Glyn Normington describe esto en su blog. Aparentemente, hay una solución en Java 6 Update 25.

+0

Gracias, especialmente por el enlace a la publicación de Glyn. Estaba bastante seguro de que solía ver el proceso Java de Tomcat localmente sin ningún problema. – jabley

0

¿Está ejecutando JPS como el mismo usuario que ejecuta los procesos Java? Incluso si ejecuta jps como root, solo devolverá los procesos ejecutados por ese usuario (root, en este caso).

5

tldr: sudo jps trabajó para mí (por razones invocadas en otras respuestas)

Cuestiones relacionadas