Подтвердить что ты не робот

Jps не возвращает выход даже при запуске java-процессов

Я пытаюсь отладить некоторые проблемы с java-процессами в окне Solaris, но запуск jps не приводит к выходу. И jstack дает ошибку "Permission denied". Ящик является частью кластера из 3 одинаковых серверов, jps и jstack работают на двух других серверах.

Я нашел следующее сообщение на форуме от кого-то с той же проблемой, но не ответил: 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.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

История: java Java 6 Update 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 найдут его.

Мой коллега Глин Нормингтон описывает это на blog. По-видимому, исправление в Java 6 Update 25.

Ответ 3

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

Ответ 4

Try:

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

Ответ 5

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

Ответ 6

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

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