Как запустить ручной JAVA GC из консоли linux без X11

Мне нужен способ, чтобы иметь возможность запускать полный GC из консольного скрипта linux на ubuntu. Я знаю, что это очень плохая практика, но не вдаваясь в подробности, это держит мой сервер работает, это предназначено только для 1 или 2 дней, пока я исправляю фактическую проблему, поэтому мне не нужно просыпаться ночью и выполнять ручной GC через jconsole или jvisualvm.

в качестве альтернативы я должен сделать скрипт мыши, который нажимает кнопку каждые 3-4 часа или около того, что еще хуже.

пожалуйста, помогите.

4 ответов


Если вы можете запустить приложение JMX-сервера (что, я считаю, подразумевается из вашего использования jconsole / jvisualvm), то вы можете вызвать память MBean в gc работа с помощью утилит командной строки.

во-первых, вам понадобится какой-то клиент командной строки JMX. Я использовал этот в прошлом для простых вызовов командной строки, и он работал нормально. (Edit: на самом деле я использовал его только сейчас, чтобы проверить следующую команду, и он успешно вызвал GC на локальный процесс котяра)

тогда вам нужно будет разработать команду для запуска сбора мусора. Я думаю, что это должно работать (вам, конечно, нужно будет изменить хосты/порты/учетные данные по мере необходимости):

java -jar cmdline-jmxclient-X.X.jar - localhost:8081 java.lang:type=Memory gc

наконец, вы можете запланировать вызов этой команды с помощью cron или эквивалент.

вуаля!


Если у вас есть oracle JVM 1.7, вы можете использовать jcmd чтобы перечислить PIDs jvm, а затем jcmd <pid> GC.run в GC.

jcmd <pid> help покажет вам, какие другие команды доступны.


jcmd <pid> GC.run

пример:

jcmd 20350 GC.run

Это не плохая практика, это невозможно-даже для java-приложения, выполняемого JVM. Существует вызов gc (), но даже это только намек на JVM для запуска сборки мусора. С консоли обычно нет способа повлиять на JVM во время его работы.

некоторые задали этот вопрос для платформы Windows, см. вопрос как запросить сборку мусора JVM (не из кода) при запуске из Windows командная строка

вы можете проверить аргументы JVM для размеров стека/кучи (как min, так и max). Есть много настроек, которые вы можете сделать в этой области, но они в основном специфичны для JVM, который вы используете.

настройка производительности JVM для больших приложений