在catalina.sh启动脚本中增加如下配置:
JAVA_OPTS="-server -Xms1024m -Xmx3G -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=20 -XX:+HeapDumpOnOutOfMemoryError -XX:NewRatio=3 -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Xloggc:/usr/local/tomcat1/gc.log -XX:HeapDumpPath=/usr/local/tomcat1/heap.dump"
然后后续可以在注意观察一下。
具体参数的意思:
-server 启动jvm的server模式,该模式启动的时候较慢,但在正式环境中对jvm性能有一定优化作用
-Xms1024m 初始化内存大小
-Xmx3G 最大内存大小
-XX:+UseAdaptiveSizePolicy 使用并行垃圾处理器的时候,优化内存中年轻代和年老代的比例
-XX:+UseParallelGC 年轻代使用并行垃圾收集器
-XX:+UseParallelOldGC 年老代使用并行垃圾收集器
-XX:ParallelGCThreads=20 并行垃圾收集器的线程数量
-XX:+HeapDumpOnOutOfMemoryError 在程序出发OutOfMemoryError的时候,导出堆信息
-XX:NewRatio=3 设置年轻代在整个堆内存的大小(例如目前jvm内存为1G,则年轻大大小为1G * (1 / (1 + 3)) = 250M,年老代为1G - 250M = 700M),因为本web项目中,有一些数据是初始化就加载到内存中,因此可以略微设置较大的年老代内存大小,以减少Full GC。
-XX:PermSize=128m 设置永久代内存大小,该大小会影响到类的加载,因为spring、hibernate等大量使用代理模式,会动态创建很多新的类,因此需要设置该,如果不设置可能导致程序 PermGen Space Error
-XX:MaxPermSize=256m 设置永久代的最大 大小
-XX:+PrintGCDetails 记录GC详细信息
-XX:+PrintGCTimeStamps 记录GC发生的时间,已程序启动多少秒的形式记录
-XX:+PrintGCApplicationConcurrentTime GC时应用并发执行的时间
-XX:+PrintGCApplicationStoppedTime GC时,应用程序停止的时间
-XX:+PrintHeapAtGC GC前后,输出各个内存区域大小
-Xloggc:/usr/local/tomcat1/gc.log 记录GC日志,设置日志路径
-XX:HeapDumpPath=/usr/local/tomcat1/heap.dump 在程序出发OutOfMemoryError的时候,导出堆信息的路径
JAVA_OPTS="-server -Xms1024m -Xmx3G -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=20 -XX:+HeapDumpOnOutOfMemoryError -XX:NewRatio=3 -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Xloggc:/usr/local/tomcat1/gc.log -XX:HeapDumpPath=/usr/local/tomcat1/heap.dump"
然后后续可以在注意观察一下。
具体参数的意思:
-server 启动jvm的server模式,该模式启动的时候较慢,但在正式环境中对jvm性能有一定优化作用
-Xms1024m 初始化内存大小
-Xmx3G 最大内存大小
-XX:+UseAdaptiveSizePolicy 使用并行垃圾处理器的时候,优化内存中年轻代和年老代的比例
-XX:+UseParallelGC 年轻代使用并行垃圾收集器
-XX:+UseParallelOldGC 年老代使用并行垃圾收集器
-XX:ParallelGCThreads=20 并行垃圾收集器的线程数量
-XX:+HeapDumpOnOutOfMemoryError 在程序出发OutOfMemoryError的时候,导出堆信息
-XX:NewRatio=3 设置年轻代在整个堆内存的大小(例如目前jvm内存为1G,则年轻大大小为1G * (1 / (1 + 3)) = 250M,年老代为1G - 250M = 700M),因为本web项目中,有一些数据是初始化就加载到内存中,因此可以略微设置较大的年老代内存大小,以减少Full GC。
-XX:PermSize=128m 设置永久代内存大小,该大小会影响到类的加载,因为spring、hibernate等大量使用代理模式,会动态创建很多新的类,因此需要设置该,如果不设置可能导致程序 PermGen Space Error
-XX:MaxPermSize=256m 设置永久代的最大 大小
-XX:+PrintGCDetails 记录GC详细信息
-XX:+PrintGCTimeStamps 记录GC发生的时间,已程序启动多少秒的形式记录
-XX:+PrintGCApplicationConcurrentTime GC时应用并发执行的时间
-XX:+PrintGCApplicationStoppedTime GC时,应用程序停止的时间
-XX:+PrintHeapAtGC GC前后,输出各个内存区域大小
-Xloggc:/usr/local/tomcat1/gc.log 记录GC日志,设置日志路径
-XX:HeapDumpPath=/usr/local/tomcat1/heap.dump 在程序出发OutOfMemoryError的时候,导出堆信息的路径