Как вы заставляете сбор мусора из оболочки?
поэтому я смотрю на кучу с jmap на удаленном ящике, и я хочу заставить сборку мусора на нем. Как вы это делаете, не заходя в jvisualvm или jconsole и друзей?
Я знаю, что вы не должны быть в практике принудительной сборки мусора-вы должны просто выяснить, почему куча большая/растет.
Я также понимаю систему.GC () на самом деле не заставляет сборку мусора-он просто говорит GC, что вы хотите, чтобы это произошло.
имея говорит, что есть способ сделать это легко? Какое-то приложение командной строки мне не хватает?
8 ответов:
вы можете сделать это через бесплатный jmxterm
Если вы запустите
jmap -histo:live
, Это заставит полный GC в куче, прежде чем он что-либо напечатает.
есть несколько других решений (много хороших уже здесь):
- напишите немного кода для доступа к MemoryMBean и звонок
gc()
.- С помощью клиента командной строки JMX (например cmdline-jmxclient,jxmterm) и запустить
gc()
операция над памятьюниже приведен пример командной строки-jmxclient:
$ java -jar cmdline-jmxclient-0.10.3.jar - localhost:3812 'java.lang:type=Memory' gc
Это хорошо, потому что это только одна линия и вы можете поместить его в сценарий очень легко.
кроме user3198490'ы ответ. При выполнении этой команды может появиться следующее сообщение об ошибке:
$ jcmd 1805 GC.run [16:08:01] 1805: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded ...
это можно решить с помощью этот ответ stackoverflow
sudo -u <process_owner> jcmd <pid> GC.run
здесь
<process_owner>
- это пользователь, который запускает процесс с PID<pid>
. Вы можете получить оба отtop
илиhtop
Если вы используете jolokia С помощью вашего приложения вы можете запустить сборку мусора с помощью этой команды:
curl http://localhost:8558/jolokia/exec/java.lang:type=Memory/gc
Я не думаю, что есть какой-либо параметр командной строки для же.
вам нужно будет использовать jvisualvm / jconsole для того же.
Я бы скорее предложил вам использовать эти инструменты для идентификации, почему ваша программа высоко на памяти.
в любом случае вы не должны заставлять GC, так как это, безусловно, нарушит алгоритм GC и замедлит вашу программу.