java 1.6.0_38-b05 vm 20.13-b02优化手记

标签: java jvm | 发表时间:2013-11-27 11:05 | 作者:54chen
出处:http://www.54chen.com

以下内容由 [五四陈科学院]提供

jvm

基础:
业务代码
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优化永远是最后一项任务。



想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [java b05 vm] 推荐:

java 1.6.0_38-b05 vm 20.13-b02优化手记

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. rose框架(底层是spring). -Xmx5000M // max的heap的大小. -Xms5000M // min的heap的大小,就是一初始给的大小,不够先GC,还不够再加,直到max. -Xmn2000M //young区的大小,一般来讲:heap=Y+O,P是额外的值.

Java HotSpot VM中的JIT编译

- - 并发编程网 - ifeve.com
原文地址 译者:郭蕾 校对:丁一. 本文是Java HotSpot VM and just-in-time(JIT) compilation系列的第一篇. Java HotSpot虚拟机是Oracle收购Sun时获得的,JVM和开源的OpenJDK都是以此虚拟机为基础发展的. 如同其它虚拟机,HotSpot虚拟机为字节码提供了一个运行时环境.

VM將可跨LAN移轉

- MorrisC - iThome Online
思科與VMware合作,推出跨LAN進行VMotion的新網通技術VXLAN(Virtual Extensible LAN),改變原先IEEE 802.1Q用於辨識位於不同LAN虛擬機器的封包格式,從12位元增加為24位元,可記錄更多的封包資訊,以分辨不同網段.

虚拟机Oracle VM VirtualBox安装windows8

- - 牛B博客 niub.us
昨天晚上微软公布了Windows 8 Release Preview下载地址:. 中文(简体)32 位 (x86)(2.48 GB) http://iso.esd.microsoft.com/WRPDL/D29D6C5B1D8AF956B5DA9DF738CFD92DFD4F6C8FB/Windows8-ReleasePreview-32bit-ChineseSimplified.iso.

VM性能的快速测试方法

- - 婉兮清扬
前段时间陆续发布了一些对公有云服务性能评测的数据. 经常有同行问我怎么样去做这些性能评测. 其实这些性能评测都很简单,任何一个具备Linux基础知识的工程师都可以完成. 我们通常使用UnixBench来评估虚拟机整机性能,mbw来评估内存性能,iozone来评估磁盘IO性能,iperf来评估网络性能,pgbench来评估数据库性能.

笔记: Xen VM 里面的 MySQL 服务器优化

- - #raynix's notes
我一直都对公司 Xen VM 的数据库服务器不满, 因为实在是太慢了. 但是几百个 GB 的商业数据我可不敢动, 于是先在测试服务器上证实一下我的想法. 硬盘就是普通的 SATA 7200RPM, VM 用的是 LVM 分区. 然后我用之前写的一个小程序做批量更新, 32K 记录. 缺省配置下, 运行时长达到24分钟, 而优化后则只需要27秒.

Hyper-V 建置的 VM 它的網路很慢的解決方法

- - SSORC.tw
Hyper-V 建立的 VM,這個 VM 是 Linux ,在使用 SSH console 操作時,覺得卡卡的、lag lag,. 用了 iperf3 測試一下網路速度. - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval.

Androidアプリを他機へ可搬化するVM, Alien Dalvik 2.0がロンチ–iOSにも対応

- 三十不归 - TechCrunch Japan
今日(米国時間10/6)、Myriad GroupがAlien Dalvik 2.0のロンチを発表した. GoogleのAndroidオペレーティングシステムが搭載しているDalvik仮想マシン(Virtual Machine, VM)の、ポートだ. これをテレビ、eブック、タブレットなどAndroid機ではない製品が載せることにより、それらの上でAndroidのアプリケーションを動かせるようになる(たとえばAppleのiPadの上で).

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.