一个小业务,流量并不大,功能也很简单,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. Bootstrap-Plugin:模态框(Modal)插件

    ylbtech-Bootstrap-Plugin:模态框(Modal)插件 1.返回顶部 1. Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是 ...

  2. nc工具用法

    http://man.linuxde.net/nc_netcat nc命令用法举例 什么是nc

  3. OpenGL 画高斯随机函数

    高斯函数代码 const float CFFTOceanShader::_getGaussianRandomFloat() const { float u1 = rand() / (float)RAN ...

  4. c#中的可选参数和命名参数的使用

    C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...

  5. 20165233 Java第七、十章学习总结

    20165233 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 ch07 内部类:Java支持在一个类中声明另一个类,这样的类称为内部类,而包含内部类的类称 ...

  6. echart改变legend样式及分页

    legend: { type: 'scroll', orient: 'horizontal', bottom:0, left:'center', itemGap: 0, itemWidth: 10, ...

  7. Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool

    1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/de ...

  8. c#,条码

    static void Generate2(string text){ BarcodeWriter writer = new BarcodeWriter(); //使用ITF 格式,不能被现在常用的支 ...

  9. C# JSON 序列化

    1.JavaScriptSerializer System.Web.Extensions.dll System.Web.Script.Serialization命名空间 Serialize Deser ...

  10. VS2013默认打开HTML文件没有设计视图

    打开VS菜单->工具->选项->文本编辑器->文件扩展名,右侧输入html,再下拉列表选HTML(Web窗体)编辑器,点添加,确定. 第二条是彻底解决VS2013不能编辑HTM ...