2013-05-15 47 views
0

我一直試圖控制使用JMX時RMI觸發的完整GC之間的時間間隔(稱爲分佈式 GC)。具體來說,我開始了我的Java平臺是這樣的:明確設置分佈式GC的時間間隔似乎不起作用

java -javaagent:../lib/licenceagent.jar=../etc/licence.lic,../etc/publicKeys.store -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:HeapDumpPath=../logs -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8004 -Dsun.rmi.dgc.server.gcInterval=7200000 -cp ../lib/myjar.jar:../etc:../data com.acme.myExecutable 

正如你所看到的,我設置服務器GC間隔爲2小時(該值以毫秒計)。因此,根據我在網上看到的情況,我應該期待Full GC(系統)每兩小時發生一次。不幸的是,這似乎並不是這種情況,並且在檢查GC日誌文件時,我每小時觀察一次完整GC(系統),這是此類GC的默認時間間隔。如果我將服務器的GC時間間隔設置爲小於一小時的值,例如我已經嘗試過每隔30秒給出一次GC的30000,我可以每隔30秒看到一次GC。

因此,似乎覆蓋默認間隔小於1小時的值將起作用,同時試圖讓FGCs不到一個小時的頻率不起作用。這與我在網上看到的相矛盾,在這裏人們似乎能夠通過這個選項來控制頻率。

我已經嘗試了一些東西,例如嘗試在發生衝突時更換啓動選項,甚至在啓動腳本中重要的參數順序(不是我知道這是真的)時更改其順序, 。想知道是否有人遇到同樣的問題,或者可以推薦一種方法來確保這項工作有效?

我的測試是一個CentOS 64位計算機上:

[根@機]#Java的版本

Java版本 「1.6.0_37」

的Java(TM)SE運行時環境(建立1.6.0_37-B06)

爪哇熱點(TM)64位服務器VM(建立20.12-B01,混合模式)

+0

您設置的系統屬性涉及本地GC,而不是分佈式GC。分佈式GC時間間隔通過客戶端設置的系統屬性進行控制。從你的頭銜和你的問題之間的不一致意見不清楚你真的想要控制哪一個。 – EJP

回答

1

我終於找到了解決這個問題的方法。 server.gcInterval不起作用的原因是爲了工作,需要定義客戶端coutnerpart client.gcInterval

我還沒有看到Oracle文檔中或Web上的任何地方提到的這種依賴關係,而我必須意識到這一點的唯一方法就是嘗試。

+0

我發現這也是Java 1.7(1.7.0_80) – SleepyTonic