基础:

业务代码

rose框架(底层是spring)

resin4

java 1.6.0_38-b05

centos

初始配置:

只修改了以下三个值

-Xmx5000M // max的heap的大小。

-Xms5000M // min的heap的大小,就是一初始给的大小,不够先GC,还不够再加,直到max。

-Xmn2000M //young区的大小,一般来讲:heap=Y+O,P是额外的值。Sun推荐Y=heap*(3/8)。

gc情况解读:

# jstat -gcutil 20538 1000 100

S0 S1 E O P YGC YGCT FGC FGCT GCT

0.00 51.96 62.53 73.42 99.93 35830 1554.778 185 1089.488 2644.266

0.00 51.96 69.83 73.42 99.93 35830 1554.778 185 1089.488 2644.266

0.00 51.96 77.75 73.42 99.93 35830 1554.778 185 1089.488 2644.266

0.00 51.96 85.79 73.42 99.93 35830 1554.778 185 1089.488 2644.266

0.00 51.96 92.35 73.42 99.93 35830 1554.778 185 1089.488 2644.266

S0\S1是survivor区,就是没被gc掉的对象,在这两个survivor里来回导来导去,满足条件最后进行O区。

E是Eden区,E+S0+S1=Y。

从jstat的数据看,这个机器大概15s发生一次YGC,很长时间没有FGC了(超过1天以上),而且P区已经99.93%使用了。

各区内存情况解读:

#jmap -heap 20538

Attaching to process ID 20538, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 20.13-b02

using thread-local object allocation.

Parallel GC with 8 thread(s)

Heap Configuration:

MinHeapFreeRatio = 40 //如果连40%空闲都空不出来,就需要增加heap到xmx了。

MaxHeapFreeRatio = 70 //如果70%空闲了就别折腾了,减少去xms。

MaxHeapSize      = 5242880000 (5000.0MB) -Xmx

NewSize          = 2097152000 (2000.0MB)  // -Xmn

MaxNewSize       = 2097152000 (2000.0MB)

OldSize          = 5439488 (5.1875MB)  //old区的初始大小 此默认值在32位平台上是4M,在64位平台上是5M多。基本无用。

NewRatio         = 2  // Y/O=1/2  表示Y区要占三分之一

SurvivorRatio    = 8 //Y区里的S与E的比例:S/E = 2/8,Y区里十分之一当S区(因为有两个S)。

PermSize         = 21757952 (20.75MB)  //P区默认配置初始值

MaxPermSize      = 85983232 (82.0MB) //P区默认配置最大值   32位的服务器时是64M,64位服务器时是64×(0.3*64) =82.2M左右。

Heap Usage:

PS Young Generation

Eden Space:

capacity = 1966604288 (1875.5MB)

used     = 968355296 (923.4955749511719MB)

free     = 998248992 (952.0044250488281MB)

49.23996667294971% used

From Space:

capacity = 64880640 (61.875MB)

used     = 32440384 (30.93756103515625MB)

free     = 32440256 (30.93743896484375MB)

50.00009864267677% used

To Space:

capacity = 65273856 (62.25MB)

used     = 0 (0.0MB)

free     = 65273856 (62.25MB)

0.0% used

PS Old Generation

capacity = 3145728000 (3000.0MB)

used     = 2375317280 (2265.279083251953MB)

free     = 770410720 (734.7209167480469MB)

75.50930277506511% used

PS Perm Generation

capacity = 80805888 (77.0625MB)

used     = 80753328 (77.01237487792969MB)

free     = 52560 (0.0501251220703125MB)

99.93495523494525% used

P区虽然显示的99%used,但是与max相比还有剩余,在spring AOP众多,一次性启动的特点下,相比82M的max,才使用到77M,还有上扬的空间。实测FGC的发生也只是一天一次。

是否需要优化判定:

YGCT/YGC=40ms  且十几秒才一次,健康

FGCT/FGC=5s  但是一天也没几次,业务允许,一般健康可优化。未来可考虑优化为多次FGC减少FGCT的时长。

后续思考:

虽然FGC并不频繁,但因为xmx值比较大,导致了O区相对变大,同时FGC缓慢,考虑从两个方向:1.调整Y区大小,让YGC去到O区的数据更少,让FGC频率更加慢(有可能很难有变化)2.调整整体的大小,让FGC频繁一点点但更加快一点 3.调整FGC的算法,让速度快一点到1秒内来。

对照组结果后续有结论了再来续本文内容。

GC优化永远是最后一项任务。

java 0b,java 1.6.0_38-b05 vm 20.13-b02优化手记相关推荐

  1. 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析

    来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...

  2. Kylin启动异常:java.lang.outofMemoryError:Requested array size exceeds VM limit

    问题背景: 1.在Kylin里跑一个较大的cube,其中这个cube是一个大表事实表,关联两张维度表,在第三步: Extract Fact Table Distinct 报错,查看Mapreduce的 ...

  3. 什么是java?以及java的初步简单学习

    什么是Java编程 List item 语言Java编程语言:应用场景:非windows平台下互联网环境的开发首选JDK JRE JVMJDK是Java开发工具箱,包括了JREJRE是Java运行时环 ...

  4. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  5. 深入理解Java虚拟机-Java内存区域透彻分析

    Java虚拟机深入理解系列全部文章更新中- 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别J ...

  6. java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福

    java与java ee 微服务是一种体系结构样式,其中每个服务都实现为一个独立的系统. 他们可以使用自己的持久性系统(尽管不是强制性的),部署,语言等. 由于系统由一个以上的服务组成,因此每个服务将 ...

  7. java 分析java死锁_Java死锁示例–如何分析死锁情况

    java 分析java死锁 死锁是两个线程或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,它将导致死锁情况,然后我们将看到如何对其 ...

  8. java 分析java死锁_有益的CountDownLatch和棘手的Java死锁

    java 分析java死锁 您是否曾经使用过java.util.concurrent.CountDownLatch ? 这是在两个或多个线程之间实现同步的非常方便的类,在该类中,一个或多个线程可以等待 ...

  9. java路径Java开发中获得非Web项目的当前项目路径

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java路径 Java开发中指定路径搜索文件也是经常遇到的,比如遍历某个目录下的文件.须要取得项目的路径.调用调查主要有两种 1.利用S ...

最新文章

  1. PHP项目学习——控件
  2. VMware vCenter 6.0 安装及群集配置介绍
  3. OSChina 周三乱弹 ——是不是兄弟?是兄弟就帮我解决下!
  4. 自动化测试|录制回放效果差异检测
  5. 复数矩阵QR分解算法的C++实现
  6. TcpSocket编程与Event编写学习的好例子
  7. Person matching query does not exist;Django增删改查异常
  8. 大数据开发你需要知道的十个技术
  9. 人工智能加速期:算法为王还是场景落地优先 ?
  10. 浅析GDAL库C#版本支持中文路径问题
  11. GD32F103替换STM32F103
  12. 在html中做框架的页面,网页中的框架(详解)
  13. 计算机build是什么意思英语,build是什么意思
  14. Faster-rcnn 源码学习(二)
  15. 【思前享后】区块链架构与特点
  16. 一文概览神经网络优化算法
  17. JavaWeb项目----实现用户登录、注册、对商品信息进行的添加、删除、修改功能
  18. API 接口测试,用这个开源的工具准没错
  19. 对字符串 “ABC” 所有子集的列举
  20. 【期末复习】计算机网络 物理层

热门文章

  1. mysql构建url给scrapy_Python Scrapy从mysq填充起始url
  2. python爬虫学习(一) requests模块
  3. Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算
  4. Python教程:通过函数名调用函数的3种场景实现
  5. 关于python中多态的理解。
  6. 王者荣耀连接不上服务器最新赛季排名,王者荣耀新赛季连掉三段 初期不能打排位是有原因的...
  7. ubuntu apt-get指令和apt指令的区别?
  8. 【放置奇兵】新版公会战问题
  9. chrome浏览器如何重新打开关闭的标签页?(快捷键ctrl+shift+t)
  10. opencv python 将RGB表示的图像转换为HSV(或Ycbcr)表示