JVM 配置方法(根据需求需求)
- 最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能够满足我们的需求,特别是在生产环境,此时需要手动修改Tomcat启动时的内存参数分配。
- Tomcat是一款Java应用,那么JVM的配置便与其运行性能密切相关,而JVM优化的重点则集中在内存分配和GC策略的调整上,因为内存会直接影响服务的运行效率和吞吐量,JVM垃圾回收机制则会不同程度地导致程序运行中断。可以根据应用程序的特点,选择不同的垃圾回收策略,调整JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改善程序运行性能。
JVM内存模型图:
JVM内存配置选项
- windows 平台(catalina.bat):
set JAVA_OPTS=‐server ‐Xms2048m ‐Xmx2048m ‐XX:MetaspaceSize=256m - XX:MaxMetaspaceSize=256m ‐XX:SurvivorRatio=8
- linux 平台(catalina.sh):
JAVA_OPTS="‐server ‐Xms1024m ‐Xmx2048m ‐XX:MetaspaceSize=256m ‐XX:MaxMetaspaceSize=512m ‐XX:SurvivorRatio=8"
参数说明 :
- -Xms: 堆内存的初始大小(1024m相当于1G)
- -Xmx: 堆内存的最大大小(这两项大小设置一样,设置为可用内存的80%)
- -Xmn: 新生代的内存大小,官方建议是整个堆得3/8。
- -XX:MetaspaceSize: 元空间内存初始大小, 在JDK1.8版本之前配置为 - XX:PermSize(永久代)
- -XX:MaxMetaspaceSize: 元空间内存最大大小, 在JDK1.8版本之前配置为 -XX:MaxPermSize(永久代)
- -XX:InitialCodeCacheSize - XX:ReservedCodeCacheSize: 代码缓存区大小
- -XX:NewRatio: 设置新生代和老年代的相对大小比例。这种方式的优点是新生代大小会随着整个堆大小动态扩展。如 -XX:NewRatio=3 指定老年代 /新生代为 3/1。 老年代占堆大小的 3/4,新生代占 1/4 。
- -XX:SurvivorRatio:指定伊甸园区 (Eden) 与幸存区大小比例。如-XX:SurvivorRatio=10 表示伊甸园区 (Eden)是 幸存区 To 大小的 10 倍 (也是幸存区 From的 10 倍)。 所以, 伊甸园区 (Eden) 占新生代大小的 10/12, 幸存区 From 和幸存区 To 每个占新生代的 1/12 。 注意, 两个幸存区永远是一样大的。
修改好以后可以,再次用ab命令测试3-5遍,取平均值,看看效果如何
进行查看详细的jvm内存情况:
[root@kk /]# ps -ef |grep java root 1386 4897 0 22:51 pts/0 00:00:00 grep --color=auto java root 28465 1 0 Jan08 ? 00:03:46 /usr/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start
- 用抓取的java进程号,jmap命令进行查看内存(大概会有一个这样的表)
#没有jmap命令就安装一下 yum install -y java-1.8.0-openjdk-devel-debug
[root@kk /]# jmap -heap 28465
Attaching to process ID 28465, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.232-b09 using thread-local object allocation. Parallel GC with 2 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 994050048 (948.0MB) NewSize = 20971520 (20.0MB) MaxNewSize = 331350016 (316.0MB) OldSize = 41943040 (40.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 157286400 (150.0MB) used = 124317056 (118.5579833984375MB) free = 32969344 (31.4420166015625MB) 79.03865559895833% used From Space: capacity = 14155776 (13.5MB) used = 8112320 (7.73651123046875MB) free = 6043456 (5.76348876953125MB) 57.30749059606482% used To Space: capacity = 16777216 (16.0MB) used = 0 (0.0MB) free = 16777216 (16.0MB) 0.0% used PS Old Generation capacity = 52953088 (50.5MB) used = 22250152 (21.219398498535156MB) free = 30702936 (29.280601501464844MB) 42.01861088818843% used 21942 interned Strings occupying 1932104 bytes.
额,暂告一段落,........GC垃圾回收正在学习中,未完待续ing...............
继续阅读

我的微信
这是我的微信扫一扫
评论