一个小业务,流量并不大,功能也很简单,spring framework+mybatis+quartz,一启动就看到gc的频次和full gc的频次非常高:

4.202: [Full GC 4.202: [Tenured: 0K->6653K(349568K), 0.1948910 secs] 139776K->6653K(506816K), [Perm : 26687K->26687K(26688K)], 0.1950470 secs] [Times: user=0.20 sys=0.00, real=0.19 secs]
5.618: [GC 5.618: [ParNew: 139904K->4231K(157376K), 0.0060210 secs] 146557K->10885K(506944K), 0.0061230 secs] [Times: user=0.03 sys=0.01, real=0.01 secs]
6.286: [GC 6.286: [ParNew: 144135K->10898K(157376K), 0.0073450 secs] 150789K->17551K(506944K), 0.0074440 secs] [Times: user=0.04 sys=0.01, real=0.01 secs]
6.814: [GC 6.814: [ParNew: 150802K->15087K(157376K), 0.0118750 secs] 157455K->25929K(506944K), 0.0119640 secs] [Times: user=0.07 sys=0.02, real=0.01 secs]
7.451: [Full GC 7.451: [Tenured: 10841K->25946K(349568K), 0.2066400 secs] 164311K->25946K(506944K), [Perm : 32127K->32127K(32128K)], 0.2067430 secs] [Times: user=0.23 sys=0.01, real=0.20 secs]
8.552: [Full GC 8.553: [Tenured: 25946K->29686K(349568K), 0.2255000 secs] 55914K->29686K(506944K), [Perm : 37568K->37568K(37568K)], 0.2256070 secs]

在10s内就进行了3次full gc,而gc3次,且花的时间也较多。

jvm的启动参数是:

-server -Xms512m -Xmx1024m -Xss256m  -XX:SurvivorRatio=8 -XX:NewRatio=5 -XX:+UseParNewGC -XX:+HeapDumpOnOutOfMemoryError
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/xx/gc.log

其实,仔细看gc日志不难发现,每次full gc时,tenured区和perm区的总大小和当前大小的差值:

  • Tenured: 25946K->29686K(349568K):都不是一个数量级,所以空闲还是有丢丢的;

  • Perm : 37568K->37568K(37568K),是相等的,这明显很有问题,内存严重不够呀。


最后想到设置perm的初始大小:64m:-XX:PermSize=64m

结果,真的木发生fullgc了 ,启动的时候还有gc,那是因为我的新生代设置太小了:

2.439: [GC 2.439: [ParNew: 69952K->4078K(78656K), 0.0117950 secs] 69952K->4078K(515584K), 0.0118850 secs] 
[Times: user=0.04 sys=0.02, real=0.01 secs]
4.102: [GC 4.102: [ParNew: 74030K->8704K(78656K), 0.0116460 secs] 74030K->8751K(515584K), 0.0117330 secs]
[Times: user=0.08 sys=0.00, real=0.01 secs]
4.899: [GC 4.899: [ParNew: 78656K->7203K(78656K), 0.0089280 secs] 78703K->10806K(515584K), 0.0090070 secs]
[Times: user=0.05 sys=0.01, real=0.01 secs]
5.503: [GC 5.503: [ParNew: 77155K->6532K(78656K), 0.0081250 secs] 80758K->13226K(515584K), 0.0082490 secs]
[Times: user=0.04 sys=0.01, real=0.01 secs]
5.896: [GC 5.896: [ParNew: 76484K->8704K(78656K), 0.0050150 secs] 83178K->15397K(515584K), 0.0050910 secs]
[Times: user=0.04 sys=0.00, real=0.00 secs]
6.179: [GC 6.179: [ParNew: 78656K->6929K(78656K), 0.0078420 secs] 85349K->17865K(515584K), 0.0079240 secs]
[Times: user=0.03 sys=0.02, real=0.01 secs]
6.441: [GC 6.441: [ParNew: 76881K->8704K(78656K), 0.0063420 secs] 87817K->22031K(515584K), 0.0064180 secs]
[Times: user=0.03 sys=0.01, real=0.01 secs]
6.693: [GC 6.693: [ParNew: 78656K->7043K(78656K), 0.0068150 secs] 91983K->22658K(515584K), 0.0068970 secs]
[Times: user=0.04 sys=0.02, real=0.01 secs]
6.926: [GC 6.926: [ParNew: 76995K->7519K(78656K), 0.0087600 secs] 92610K->25735K(515584K), 0.0088390 secs]
[Times: user=0.04 sys=0.03, real=0.00 secs]
7.545: [GC 7.545: [ParNew: 77471K->8203K(78656K), 0.0111190 secs] 95687K->28887K(515584K), 0.0112000 secs]

喜闻乐见呀。

将新生代区的大小设置下,gc的频率也没这么高了,-XX:NewSize=256m。

tomcat启动时就频繁gc和full gc的更多相关文章

  1. Tomcat启动时载入某个servlet

    当我们做一个java项目时,有几个功能都须要载入servlet或者实现某个共同的方法,尽管我们一味地在每个功能中依次载入也不是不能够,可是当某个servlet 或者方法被频繁地载入和应用.我们将面向对 ...

  2. Tomcat启动时自动加载Servlet

    1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...

  3. MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法

    MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:4 ...

  4. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  5. Tomcat启动时为什么要配置CATALINA_HOME环境变量??

    CATALINA_HOME的值被设为Tomcat的安装目录,如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令 1.Tom ...

  6. docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞

    docker+tomcat 启动时非常慢,一般正常启动几十秒的,发现docker+tomcat启动竟需要几分钟,不可思议 根本原因是 SecureRandom 这个 jre 的工具类的问题.那为什么 ...

  7. Tomcat启动时项目重复加载的问题

    最近在项目开发测试的时候,发现Tomcat启动时项目重复加载,导致资源初始化两次的问题  导致该问题的原因: 如下图:在Eclipse中将Server Locations设置为“Use Tomcat ...

  8. tomcat启动时卡住

    tomcat启动时卡住 进入jdk/jre/lib/security/java.security文件 找到securerandom.source将这一行隐藏 并在下面一行加入securerandom. ...

  9. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

随机推荐

  1. hdu1 247 Hat’s Words(字典树)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. 集群(heartbeat)搭建

    HA 即(high available cluster)高可用集群,又称双机热备,保证关键性业务的不间断提供服务. 如:两台机器A和B,正常情况A提供服务,B待命闲置:一但A宕机或服务宕掉,自动切换至 ...

  3. 线程等待 Join()方法

    Join()方法是让一个线程等待另一个线程的完成 下面看个例子: package project11; public class TestJoin extends Thread { public vo ...

  4. 使用css弹性盒子模型

    提示: 当期内容不充实, 修改后再来看吧 以下称:弹性子元素: 子元素, 弹性容器: 容器 弹性盒子的属性 1. css弹性盒子模型规定了弹性元素如何在弹性容器内展示 2. 弹性元素默认显示在弹性容器 ...

  5. Nginx实战入门教程

    Nginx 简介 Nginx是一个高性能的http和反向代理服务器,它看起来好像不太符合英文单词的拼写习惯,因为Nginx是由名为 伊戈尔·赛索耶夫 的俄罗斯人开发的.Nginx主要特点为占用内存小, ...

  6. pandas read_csv读取大文件的Memory error问题

    今天在读取一个超大csv文件的时候,遇到困难:首先使用office打不开然后在python中使用基本的pandas.read_csv打开文件时:MemoryError 最后查阅read_csv文档发现 ...

  7. 使用Fiddler对Android手机的应用数据进行抓包分析

    文章源自: http://blog.csdn.net/zshq280017423/article/details/8928616/ 对于Android开发的同事最头疼的事情莫过于真机抓包,然后Fidd ...

  8. 分享一个jquery插件,弥补一下hover事件的小小不足

    hover事件有一个缺点:当你的鼠标无意划过一个dom元素(瞬间划过,这个时候用户可能不想触发hover事件),会触发hover事件 应该设置一个时差来控制hover事件的触发 比如jd左边的菜单 你 ...

  9. selenium webdriver ——执行javascript代码

    在代码中import org.openqa.selenium.JavascriptExecutor;就可以使用executeScript.executeAsyncScript这两个方法了 execut ...

  10. 32.使用来MethodFilterInterceptor灵活拦截

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 步骤一.建立MethodAction,代码如下: package com.a ...