jps не возвращает вывод, даже когда запущены процессы Java - PullRequest
16 голосов
/ 27 сентября 2010

Я пытаюсь отладить некоторые проблемы с процессами Java на коробке Solaris, но работа jps не возвращает вывод.И jstack выдает ошибку «Отказано в доступе».Коробка является частью кластера из 3 одинаковых серверов, jps и jstack отлично работают на 2 других серверах.

Я нашел следующее сообщение на форуме от кого-то с такой же проблемой, но без ответов: http://forums.sun.com/thread.jspa?threadID=5422237

Чтобы прояснить, как работает bps и grep для java, все java-процессы выполняются правильно, но jps ничего не дает (анонимный с помощью 'program' и 'client' для защиты виновных):

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 : ~/
->

Я спросили отсюда http://forums.oracle.com/forums/message.jspa?messageID=5408592 У меня есть проблема:

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

Это означает, что jps отказано в доступе к каталогу psperfdata.

Кто-нибудь сталкивался с этой проблемойи знаете как это решить?

Ответы [ 6 ]

15 голосов
/ 01 октября 2010

Оказывается, пользователь не имел доступа к / tmp из-за некоторых проблем с монтированием файловой системы.Это приводит к тому, что файлы внутри hsperfdata_ никогда не будут записываться, даже если пользователь имел доступ к самой папке / tmp / hsperfdata_.

6 голосов
/ 09 октября 2013

tldr: sudo jps работал для меня (по причинам, приведенным в других ответах)

6 голосов
/ 31 марта 2011

Убедитесь, что программа, которую вы пытаетесь «обнаружить» с помощью jps (и jstack, между прочим), запускается без установки параметра java.io.tmpdir или установки по умолчанию системы.

Существует рядошибки в Sun Developer Network местоположения временных каталогов не должны быть жестко запрограммированы , Исправлено для 6938627 прерываний визуального мониторинга, когда -Djava.io.tmpdir и Сделать временный каталог использовать свойство Java.io.tmpdir , которые актуальны здесь.

История: Java Java Update 6 22 использовала жестко закодированный временный каталог для хранения данных, собранных для использования jps и jstack.Программы jps и jstack знали, где искать.

Однако из-за того, что кто-то поднял «ошибку» в Java 6 Update 23, он «исправил» ее, чтобы вместо этого использовать java.io.tmpdir параметр времени выполнения java.Теперь по умолчанию используется системное местоположение, которое было «жестко закодированным».Но если вы установите опцию при вызове вашей Java-программы, она будет использовать ее вместо этого.Результат: jps и jstack смотрят туда, где ожидают, и ничего не находят.

Поэтому решение состоит в том, чтобы убедиться, что для параметра java.io.tmpdir задано значение по умолчанию системы (например, вMac:

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

)

при вызове вашей программы.Тогда jps и jstack найдут его.

Мой коллега Глин Нормингтон описывает это в своем блоге .Очевидно, в Java 6 обновление 25.

исправлено.
2 голосов
/ 29 сентября 2010

Попробуйте:

jps -J-Djava.io.tmpdir=/app/client/program/tomcat/temp
0 голосов
/ 10 января 2017

Кроме того, убедитесь, что ваш стартовый скрипт содержит , а не , включая -XX:+PerfDisableSharedMem, потому что с этой опцией JVM не будет записывать статистику, делая процесс невидимым для jps и jstat. * 1006. *

Подробнее см. https://support.datastax.com/hc/en-us/articles/208269876-Java-utilities-such-as-jps-or-jstat-unable-to-monitor-DSE-processes.

0 голосов
/ 28 марта 2013

Вы используете jps как тот же пользователь, который запускает процессы Java? Даже если вы запустите jps от имени пользователя root, он вернет только процессы, запущенные этим пользователем (в данном случае root).

...