簡介
jinfo是jdk自帶的命令,可以用來查看正在運行的Java應用程序的擴展參數,甚至支持在運行時,修改部分參數。
通常會先使用jps查看java進程的id,然后使用jinfo查看指定pid的jvm信息.
jps #通過jps來查看當前運行狀態的虛擬機進程
查看jvm的參數
jinfo -flags process_id
查看java系統參數
jinfo -sysprops process_id
虛擬機的這些參數可以通過下面的命令查看:
java -XX:+PrintFlagsFinal -version | grep manageable
除了通過啟動腳本可以設置參數,PrintGC默認是打開的,因此我們只需要打開PrintGCDetails參數。
jinfo -flag +PrintGC 27250 jinfo -flag +PrintGCDetails 27250
如果需要關閉GC日志的打印,使用下面的命令:
jinfo -flag -PrintGC 27250 jinfo -flag -PrintGCDetails 27250
查看是否開啟了GC日志的打印:
jinfo -flag PrintGC 27250 jinfo -flag PrintGCDetails 27250
常用JVM參數
-Xms:初始堆大小,默認為物理內存的1/64(<1GB);默認(MinHeapFreeRatio參數可以調整)空余堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制 -Xmx:最大堆大小,默認(MaxHeapFreeRatio參數可以調整)空余堆內存大於70%時,JVM會減少堆直到 -Xms的最小限制 -Xmn:新生代的內存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的New gen是不同的。整個堆大小=新生代大小 + 老生代大小 + 永久代大小。在保證堆大小不變的情況下,增大新生代后,將會減小老生代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。 -XX:SurvivorRatio:新生代中Eden區域與Survivor區域的容量比值,默認值為8。兩個Survivor區與一個Eden區的比值為2:8,一個Survivor區占整個年輕代的1/10。 -Xss:每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。應根據應用的線程所需內存大小進行適當調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。一般小的應用, 如果棧不是很深, 應該是128k夠用的,大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"-Xss is translated in a VM flag named ThreadStackSize”一般設置這個值就可以了。 -XX:PermSize:設置永久代(perm gen)初始值。默認值為物理內存的1/64。 -XX:MaxPermSize:設置持久代最大值。物理內存的1/4。