所以我在遠程盒子上看着jmap堆,我想強制垃圾收集。你如何做到這一點沒有彈出jvisualvm或jconsole和朋友?如何從殼牌強制垃圾收集?
我知道你不應該強迫垃圾收集的做法 - 你應該找出爲什麼堆是大/增長。
我也意識到System.GC()實際上並沒有強制垃圾收集 - 它只是告訴GC你希望它發生。
說了這麼簡單嗎?我錯過了一些命令行應用程序?
所以我在遠程盒子上看着jmap堆,我想強制垃圾收集。你如何做到這一點沒有彈出jvisualvm或jconsole和朋友?如何從殼牌強制垃圾收集?
我知道你不應該強迫垃圾收集的做法 - 你應該找出爲什麼堆是大/增長。
我也意識到System.GC()實際上並沒有強制垃圾收集 - 它只是告訴GC你希望它發生。
說了這麼簡單嗎?我錯過了一些命令行應用程序?
你可以通過免費的jmxterm程序來做到這一點。
火起來就像這樣:
java -jar jmxterm-1.0-alpha-4-uber.jar
從那裏,你可以連接到主機和觸發GC:
$>open host:jmxport
#Connection to host:jmxport is opened
$>bean java.lang:type=Memory
#bean is set to java.lang:type=Memory
$>run gc
#calling operation gc of mbean java.lang:type=Memory
#operation returns:
null
$>quit
#bye
只看該jmxterm網站上的文檔有關的信息嵌入這在bash/perl/ruby /其他腳本中。我在Python中使用popen2或在Perl中使用open3來執行此操作。
UPDATE:這裏是一個班輪使用jmxterm:
echo run -b java.lang:type=Memory gc | java -jar jmxterm-1.0-alpha-4-uber.jar -n -l host:port
我不認爲有相同的命令行選項。
您將需要使用jvisualvm/jconsole。
我寧願建議你使用這些工具來識別,爲什麼你的程序是高內存。
反正你不應該強制GC,因爲它肯定會干擾GC算法,並使你的程序變慢。
還有一些其他的解決方案(大量的優秀人才在這裏的話):
gc()
。下面的例子是用於CMDLINE-jmxclient運行gc()
操作:
$ java -jar cmdline-jmxclient-0.10.3.jar - localhost:3812 'java.lang:type=Memory' gc
這是很好因爲它只有一行,你可以很容易地將它放在腳本中。
如果您運行的是jmap -histo:live
,那麼在打印任何內容之前,這將在堆上強制執行完整的GC。
*這是*什麼我'我在說話! – sourcedelica 2013-03-19 22:20:33
強制在所有javas上進行垃圾回收: ps axf | grep java | grep -v grep | awk'{print「jmap -histo:live」$ 1}'| sh – gtrak 2013-11-19 23:18:24
記錄在哪裏?如果沒有:現場(例如,當需要-F時)? – nafg 2014-08-29 09:25:49
剛:
kill -SIGQUIT <PID>
這會觸發堆轉儲而不是垃圾收集 – 2013-05-01 20:18:19
至少是solaris它會強制GC。 – 2014-02-04 23:27:12
即使在Solaris中,SIGQUIT也不會觸發GC或堆轉儲。 SIGQUIT將僅針對HotSpot觸發線程轉儲。對於IBM JVM,它是可配置的。 – 2015-08-28 19:15:32
如果使用jolokia與您的應用程序,你可以觸發使用此命令的垃圾回收:
curl http://localhost:8558/jolokia/exec/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
...
sudo -u <process_owner> jcmd <pid> GC.run
其中<process_owner>
的幫助來解決是運行與PID <pid>
進程的用戶。你可以得到從top
或htop
*不*相同現在http://stackoverflow.com/questions/1481178/how-to-force-garbage-collection-in-java – Raedwald 2016-03-31 16:02:37