一个小业务,流量并不大,功能也很简单,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. 【POJ】1185 炮兵阵地(状压dp)

    题目 传送门:QWQ 分析 看到$ M<=10 $考虑状压. 然后把每行都压一下,那么每个状态相关的就是上一行和上上行的状态. 然后枚举. 然后复杂度最坏是$ O(100 \times 1024 ...

  2. Linux gdb调试器用法全面解析

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...

  3. 将jar包安装到maven仓库

    <!-- https://mvnrepository.com/artifact/ojdbc/ojdbc --><!-- (参数一):下载到本地的ojdbc-10.2.0.4.0.ja ...

  4. 第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]

    Learn Android Studio 汉化教程 Let’s reset even further to remove all traces of your work on the deprecat ...

  5. 剖析tcp与udp及应用场景协议方案选择

    什么是TCP和UDP TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层协议(包 括:HTTP.SMTP.SNMP.FTP和Telne ...

  6. OpenCL 三种内存对象的使用

    ▶ 包括带有 CL_MEM_READ_ONLY,CL_MEM_WRITE_ONLY,CL_MEM_READ_WRITE 标识的显示拷贝(函数 clEnqueueWriteBuffer 和 clEnqu ...

  7. Wasserstein距离 和 Lipschitz连续

    EMD(earth mover distance)距离: 在计算机科学与技术中,地球移动距离(EMD)是一种在D区域两个概率分布距离的度量,就是被熟知的Wasserstein度量标准.不正式的说,如果 ...

  8. verilog 计算机网络 仿真 激励 pcap

    做verilog网络逻辑时,需要产生正确的数据包格式激励,手写激励真烦人,现在让testbench读取pcap文件,则可以精确还原数据包的bit与时序,省去了一大批麻烦 1.设计读取逻辑 `times ...

  9. docker 基本使用和安装提速

    https://www.cnblogs.com/Erik_Xu/p/6662936.html#redis >yum install -y docker 道客提速 先安装curl >yum ...

  10. linux命令之scp远程文件复制

    scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到本地的轻松文件传输操作.下面简单的讲解一些关于scp命令的操作,给有用的人一些参考: 首先是本地到远程的操作:操作的格式如下 ...