Спасибо за Вашу мудрость, людей. Мой сценарий оставлял некоторые дочерние процессы на выходе и отрицание подсказка сделанный вещами легче. Я записал эту функцию, которая будет использоваться в других сценариях при необходимости:
# kill my group's subprocesses: killGroup
# kill also myself: killGroup -x
# kill another group's subprocesses: killGroup N
# kill that group all: killGroup -x N
# N: PID of the main process (= process group ID).
function killGroup () {
local prid mainpid
case $1 in
-x) [ -n "$2" ] && kill -9 -$2 || kill -9 -$ ;;
"") mainpid=$ ;;
*) mainpid=$1 ;;
esac
prid=$(ps ax -o pid,pgid | grep $mainpid)
prid=${prid//$mainpid/}
kill -9 $prid 2>/dev/null
return
}
Аплодисменты.
jconsole просто предоставляет оболочку для JMX MBeans, которые находятся на платформе MBeanServer.
Вы можете написать программу для подключения к вашей виртуальной машине, используя Attach API , который затем запросит MBeans.
Или вы можете открыть платформу MBeanServer через RMI и таким образом запросить MBean.
См. пакет java.lang.management для получения дополнительной информации
Взгляните на jmap
, который можно использовать для получения дампа кучи с консоли.
Для данных, не включенных в дамп кучи, я считаю, что jconsole просто использует JMX для подключения к работающей JVM для получения статистики - так что, вероятно, можно создать собственное приложение, которое могло бы получать те же типы статистики из JMX.
jstack предлагает ряд полезных битов информации в обычном выводе. Использование памяти кучи доступно напрямую с разбивкой по регионам GC; количество потоков можно определить с помощью perl / grep / и т. д.
Это частичный ответ на ваш вопрос:
set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m