JVM参数设置及JVM工具使用
主要通过以下的几个jvm参数来设置堆内存的:
-Xmx512m 最大总堆内存,一般设置为物理内存的1/4
-Xms512m 初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了
-Xmn192m 年轻带堆内存,sun官方推荐为整个堆的3/8
堆内存的组成 总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存
年轻带堆内存 对象刚创建出来时放在这里
年老带堆内存 对象在被真正会回收之前会先放在这里
持久带堆内存 class文件,元数据等放在这里
-XX:PermSize=128m 持久带堆的初始大小
-XX:MaxPermSize=128m 持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。
在tomcat上双击 ,点 open lunch configuration,在argument签页下,直接在VMargument后面追加设置 ,如 -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M
例如:我的配置:
-Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M
利用JDK自导的jmap查看:(先用jps查看pid,然后个jmap查看内存)
jps 查出的三个pid
C:\Users\liqia>jps 520404 Bootstrap 575844 Jps 348088
通过任务管理器查看进程的ID可以看到:
也就是说带Bootstrap的是Tomcat,348088是eclipse。 1. 查看JVM内存信息:(验证刚才的配置) 方法一:
C:\Users\liqia>jmap -heap 520404 Attaching to process ID 520404, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.80-b11 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 5452595200 (5200.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 536870912 (512.0MB) MaxPermSize = 536870912 (512.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 1363673088 (1300.5MB) used = 1122021344 (1070.0429382324219MB) free = 241651744 (230.45706176757812MB) 82.27934934505359% used From Space: capacity = 227016704 (216.5MB) used = 172383432 (164.39765167236328MB) free = 54633272 (52.10234832763672MB) 75.93425019508696% used To Space: capacity = 227016704 (216.5MB) used = 0 (0.0MB) free = 227016704 (216.5MB) 0.0% used PS Old Generation capacity = 3635412992 (3467.0MB) used = 73744 (0.0703277587890625MB) free = 3635339248 (3466.929672241211MB) 0.0020284903025400204% used PS Perm Generation capacity = 536870912 (512.0MB) used = 58398232 (55.692893981933594MB) free = 478472680 (456.3071060180664MB) 10.877518355846405% used
方法二:利用tomcat的自带项目查看:到tomcat主页点击server status 方法三:用JDK自带的jvisualvm.exe查看
2 查看pid为348088的内存(验证eclipse的配置) eclipse.ini配置
-startup plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417 -product org.eclipse.epp.package.jee.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 1024M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 1024m --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Dosgi.requiredJavaVersion=1.7 -Xms4096m -Xmx4096m -XX:PermSize=512m -XX:MaxPermSize=512m -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
jps命令查看内存信息:
C:\Users\liqia>jmap -heap 348088 Attaching to process ID 348088, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.80-b11 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 4294967296 (4096.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 536870912 (512.0MB) MaxPermSize = 536870912 (512.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 1145569280 (1092.5MB) used = 202738320 (193.34632873535156MB) free = 942830960 (899.1536712646484MB) 17.697604460901744% used From Space: capacity = 146800640 (140.0MB) used = 46552800 (44.396209716796875MB) free = 100247840 (95.60379028320312MB) 31.711578369140625% used To Space: capacity = 139460608 (133.0MB) used = 0 (0.0MB) free = 139460608 (133.0MB) 0.0% used PS Old Generation capacity = 2863661056 (2731.0MB) used = 154200136 (147.05670928955078MB) free = 2709460920 (2583.943290710449MB) 5.384720222978791% used PS Perm Generation capacity = 536870912 (512.0MB) used = 153296424 (146.19486236572266MB) free = 383574488 (365.80513763427734MB) 28.553684055805206% used