﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-The NoteBook of EricKong-随笔分类-JVM</title><link>http://www.blogjava.net/jjshcc/category/54857.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Jul 2015 16:16:43 GMT</lastBuildDate><pubDate>Thu, 23 Jul 2015 16:16:43 GMT</pubDate><ttl>60</ttl><item><title>java GC日志参数设置</title><link>http://www.blogjava.net/jjshcc/archive/2015/07/23/426391.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Thu, 23 Jul 2015 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2015/07/23/426391.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/426391.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2015/07/23/426391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/426391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/426391.html</trackback:ping><description><![CDATA[<p style="text-transform: none; background-color: rgb(249,249,245); text-indent: 0px; margin: 0px 0px 20px; letter-spacing: normal; font: 16px/27px 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; white-space: normal; color: rgb(44,62,80); word-spacing: 0px; -webkit-text-stroke-width: 0px">增加GC相关选项：</p>
<div style="text-transform: none; background-color: rgb(249,249,245); text-indent: 0px; letter-spacing: normal; font: 16px/27px 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; white-space: normal; color: rgb(44,62,80); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="md-section-divider"></div><pre style="background-image: none; border-bottom: 0px solid; border-left: 0px solid; padding-bottom: 9px; text-transform: none; text-indent: 0px; margin: 0px 0px 20px; padding-left: 9px; background-attachment: scroll; letter-spacing: normal; padding-right: 9px; display: block; font: 14px/20px Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; background-position: 0px 0px; color: rgb(51,51,51); word-break: break-all; border-top: 0px solid; border-right: 0px solid; word-spacing: 0px; padding-top: 9px; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 2px inset, rgba(102, 128, 153, 0.0470588) 45px 0px 0px inset, rgba(102, 128, 153, 0.0470588) 0px 1px 0px" class="prettyprint linenums prettyprinted"><ol style="padding-bottom: 0px; margin: 0px 0px 0px 35px; padding-left: 0px; padding-right: 0px; color: ; padding-top: 0px" class="linenums"><li style="line-height: 20px; padding-left: 15px" class="L0"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">verbose</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(0,0,0)" class="pln">gc</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L1"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">UseGCLogFileRotation</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L2"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">NumberOfGCLogFiles</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">5</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L3"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">GCLogFileSize</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">512K</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L4"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">PrintGCDetails</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L5"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">PrintGCTimeStamps</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L6"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">PrintGCDateStamps</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L7"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">PrintTenuringDistribution</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L8"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">PrintGCApplicationStoppedTime</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L9"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(102,0,102)" class="typ">Xloggc</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(0,136,0)" class="str">/var/</span><span style="color: rgb(0,0,0)" class="pln">app</span><span style="color: rgb(102,102,0)" class="pun">/</span><span style="color: rgb(0,0,0)" class="pln">log</span><span style="color: rgb(102,102,0)" class="pun">/</span><span style="color: rgb(102,0,102)" class="typ">Push</span><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">server</span><span style="color: rgb(102,102,0)" class="pun">/</span><span style="color: rgb(0,0,0)" class="pln">gc</span><span style="color: rgb(102,102,0)" class="pun">.</span><span style="color: rgb(0,0,0)" class="pln">log</span></code></li></ol></pre>
<ol style="padding-bottom: 0px; text-transform: none; background-color: rgb(249,249,245); text-indent: 0px; margin: 0px 0px 10px 25px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 16px/27px 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; white-space: normal; color: rgb(44,62,80); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><li style="line-height: 27px">如果不能确定所需内存，使用自动jvm自动调优；</li><li style="line-height: 27px">大致确定所需内存后，使用-Xmx -Xms设置堆大小；</li><li style="line-height: 27px">观察GC log确定FullGC后剩余堆大小（即为活跃数据大小）；</li><li style="line-height: 27px">整个堆大小宜为老年代活跃数据大小的3-4倍；</li><li style="line-height: 27px">永久带大小应该比永久带活跃数据大1.2~1.5倍；</li><li style="line-height: 27px">新生代空间应该为老年代空间活跃数据的1~1.5倍；</li><li style="line-height: 27px">通过top命令观察栈占用空间、直接内存占用空间，决定所需机器内存大小；</li><li style="line-height: 27px">新生代大小决定了Minor GC的周期和时长，缩短新生代大小可以减少停顿时长，但是增加了GC频率；在调整新生代大小时，尽量保持老年代大小不变；</li><li style="line-height: 27px">老年代大小不应该小于活跃数据的1.5倍；新生代空间至少为java堆大小的10%；增加堆大小时，注意不要超过可用物理内存数；</li><li style="line-height: 27px">从throughput收集器迁移到CMS时，需要将老年代空间增加20%~30%；</li><li style="line-height: 27px">新生代分为Eden和Survivor两部分，Survivor可以通过<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:SurvivorRatio=xx</code>来控制，对应的大小为<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-Xmn&lt;value&gt;/(ratio+2)</code>；</li><li style="line-height: 27px">通过<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:MaxTenuringThreshold=&lt;n&gt;</code>来指定晋升阈值（年龄），n为0~15之间；</li><li style="line-height: 27px">期望Survivor空间为剩余总存活对象大小的2倍(age=1；</li><li style="line-height: 27px">注意调节Survivor大小时，保持Eden大小不变；</li><li style="line-height: 27px">如果Survivor空间足够大，且对象大部分并未到达老年代，那么就可以将晋升年纪指定的足够大（15）。在Eden与Survivor之间复制和CMS老年代空间压缩之间，我们宁愿选择前者；</li><li style="line-height: 27px">CMS必须能以对象从新生代提升到老年代的同等速度对老年代中的对象进行收集，否则，就会失速；</li><li style="line-height: 27px">如果观察到'concurrent mode failures'，意味着失速已经发生，必须减少<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:CMSInitiatingOccupancyFraction=&lt;percent&gt;</code>的值；</li><li style="line-height: 27px">使用上述选项的同时，最好同时使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+UseCMSInitiatingOccupancyOnly</code>，强制使用该比例,该比例的大小应该大于老年代占用空间和活跃数据大小之比，一般而言<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">老年代大小*该比例&gt;1.5*老年代活跃数据大小</code>；</li><li style="line-height: 27px">使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+ExplicitGCInvokesConcurrentAndUnloadsCloasses</code>可以使用CMS进行显式垃圾回收（<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">System.gc()</code>)；通过<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+DisableExplicitGC</code>关闭显示垃圾回收（慎用）；</li><li style="line-height: 27px">使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+CMSClassUnloadingEnabled</code>打开永久带垃圾回收，使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+CMSPermGenSweepingEnabled</code>打开CMS对永久带的扫描；使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:CMSInitiatingPermOccupancyFraction=&lt;perscent&gt;</code>激活回收比例阈值；</li><li style="line-height: 27px">使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:ParallelGCThreads=&lt;n&gt;</code>控制扫描线程数；使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+CMSScavengeBeforeRemark</code>强制重新标记前进行一次MinorGC；如果由大量的引用对象或可终结对象要处理，使用<code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+ParallelRefProcEnabled</code>；</li><li style="line-height: 27px">CMS包括Minor GC所带来的开销应该小于10%；</li><li style="line-height: 27px">如果缺少长时间调优的条件，安全起见，可以使用G1，仅设置如下参数即可：</li></ol>
<div style="text-transform: none; background-color: rgb(249,249,245); text-indent: 0px; letter-spacing: normal; font: 16px/27px 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; white-space: normal; color: rgb(44,62,80); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="md-section-divider"></div><pre style="background-image: none; border-bottom: 0px solid; border-left: 0px solid; padding-bottom: 9px; text-transform: none; text-indent: 0px; margin: 0px 0px 20px; padding-left: 9px; background-attachment: scroll; letter-spacing: normal; padding-right: 9px; display: block; font: 14px/20px Monaco, Menlo, Consolas, 'Courier New', monospace; word-wrap: break-word; white-space: pre-wrap; background-position: 0px 0px; color: rgb(51,51,51); word-break: break-all; border-top: 0px solid; border-right: 0px solid; word-spacing: 0px; padding-top: 9px; -webkit-text-stroke-width: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 2px inset, rgba(102, 128, 153, 0.0470588) 45px 0px 0px inset, rgba(102, 128, 153, 0.0470588) 0px 1px 0px" class="prettyprint linenums prettyprinted"><ol style="padding-bottom: 0px; margin: 0px 0px 0px 35px; padding-left: 0px; padding-right: 0px; color: ; padding-top: 0px" class="linenums"><li style="line-height: 20px; padding-left: 15px" class="L0"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">d64</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L1"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(102,0,102)" class="typ">Xmx5g</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L2"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(102,0,102)" class="typ">Xms5g</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L3"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">PermSize</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">100m</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L4"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">MaxPermSize</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">100m</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L5"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">MaxDirectMemorySize</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">1g</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L6"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:+</span><span style="color: rgb(102,0,102)" class="typ">UseG1GC</span></code></li><li style="line-height: 20px; padding-left: 15px" class="L7"><code style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: transparent; padding-left: 0px; padding-right: 0px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: pre-wrap; color: ; font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 0px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px"><span style="color: rgb(102,102,0)" class="pun">-</span><span style="color: rgb(0,0,0)" class="pln">XX</span><span style="color: rgb(102,102,0)" class="pun">:</span><span style="color: rgb(102,0,102)" class="typ">MaxGCPauseMillis</span><span style="color: rgb(102,102,0)" class="pun">=</span><span style="color: rgb(0,102,102)" class="lit">80</span></code></li></ol></pre>
<p style="text-transform: none; background-color: rgb(249,249,245); text-indent: 0px; margin: 0px 0px 20px; letter-spacing: normal; font: 16px/27px 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; white-space: normal; color: rgb(44,62,80); word-spacing: 0px; -webkit-text-stroke-width: 0px">G1不必明确设置新生代大小，其自动调优也十分可靠，对于停顿时间往往在长时间运行后可以达到预期效果；对吞吐量优先的应用，可能不是那么明显。</p><img src ="http://www.blogjava.net/jjshcc/aggbug/426391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2015-07-23 14:30 <a href="http://www.blogjava.net/jjshcc/archive/2015/07/23/426391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM监控与调优</title><link>http://www.blogjava.net/jjshcc/archive/2015/07/10/426139.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Fri, 10 Jul 2015 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2015/07/10/426139.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/426139.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2015/07/10/426139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/426139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/426139.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JVM监控与调优光说不练假把式，学习Java GC机制的目的是为了实用，也就是为了在JVM出现问题时分析原因并解决之。通过学习，我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（如果您对Java的内存区域划分和内存回收机制尚不明确，那在阅读本文前，请先阅读我的前一篇博客《Java系...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjshcc/archive/2015/07/10/426139.html'>阅读全文</a><img src ="http://www.blogjava.net/jjshcc/aggbug/426139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2015-07-10 09:03 <a href="http://www.blogjava.net/jjshcc/archive/2015/07/10/426139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GC 日志分析</title><link>http://www.blogjava.net/jjshcc/archive/2015/06/18/425769.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Thu, 18 Jun 2015 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2015/06/18/425769.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/425769.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2015/06/18/425769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/425769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/425769.html</trackback:ping><description><![CDATA[<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px"><strong>不同的JVM及其选项会输出不同的日志。</strong></p>
<h2 style="text-align: left; line-height: normal; text-transform: none; background-color: rgb(255,255,255); font-variant: normal; font-style: normal; margin-top: 0px; text-indent: 0px; letter-spacing: normal; font-family: Arial, Helvetica, San-serif; white-space: normal; margin-bottom: 0px; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">GC 日志</h2>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">生成下面日志使用的选项：<span class="Apple-converted-space">&nbsp;</span><code>-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:d:/GClogs/tomcat6-gc.log</code>。</p><pre style="text-align: left; line-height: normal; text-transform: none; background-color: rgb(255,255,255); font-variant: normal; font-style: normal; text-indent: 0px; letter-spacing: normal; color: rgb(0,0,0); font-size: 14px; font-weight: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px">4.231: [GC 4.231: [DefNew: 4928K-&gt;512K(4928K), 0.0044047 secs] 6835K-&gt;3468K(15872K), 0.0045291 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 
4.445: [Full GC (System) 4.445: [Tenured: 2956K-&gt;3043K(10944K), 0.1869806 secs] 4034K-&gt;3043K(15872K), [Perm : 3400K-&gt;3400K(12288K)], 0.1870847 secs] [Times: user=0.05 sys=0.00, real=0.19 secs] 
</pre>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">最前面的数字<span class="Apple-converted-space">&nbsp;</span><code>4.231</code><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><code>4.445</code><span class="Apple-converted-space">&nbsp;</span>代表虚拟机启动以来的秒数。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px"><code>[GC</code><span class="Apple-converted-space">&nbsp;</span>和<span class="Apple-converted-space">&nbsp;</span><code>[Full GC</code><span class="Apple-converted-space">&nbsp;</span>是垃圾回收的停顿类型，而不是区分是新生代还是年老代，如果有<span class="Apple-converted-space">&nbsp;</span><code>Full</code><span class="Apple-converted-space">&nbsp;</span>说明发生了<span class="Apple-converted-space">&nbsp;</span><code>Stop-The-World</code><span class="Apple-converted-space">&nbsp;</span>。如果是调用<span class="Apple-converted-space">&nbsp;</span><code>System.gc()</code><span class="Apple-converted-space">&nbsp;</span>触发的，那么将显示的是<span class="Apple-converted-space">&nbsp;</span><code>[Full GC (System)</code><span class="Apple-converted-space">&nbsp;</span>。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">接下来的<span class="Apple-converted-space">&nbsp;</span><code>[DefNew</code>,<span class="Apple-converted-space">&nbsp;</span><code>[Tenured</code>,<span class="Apple-converted-space">&nbsp;</span><code>[Perm</code><span class="Apple-converted-space">&nbsp;</span>表示 GC 发生的区域，区域的名称与使用的 GC 收集器相关。 Serial 收集器中新生代名为 "Default New Generation"，显示的名字为 "[DefNew"。对于ParNew收集器，显示的是 "[ParNew"，表示 &#8220;Parallel New Generation&#8221;。 对于 Parallel Scavenge 收集器，新生代名为 "PSYoungGen"。年老代和永久代也相同，名称都由收集器决定。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">方括号内部显示的 &#8220;4928K-&gt;512K(4928K)&#8221; 表示 &#8220;GC 前该区域已使用容量 -&gt; GC 后该区域已使用容量 (该区域内存总容量) &#8221;。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">再往后的 &#8220;0.0044047 secs&#8221; 表示该区域GC所用时间，单位是秒。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">再往后的 &#8220;6835K-&gt;3468K(15872K)&#8221; 表示 &#8220;GC 前Java堆已使用容量 -&gt; GC后Java堆已使用容量 （Java堆总容量）&#8221;。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">再往后的 &#8220;0.0045291 secs&#8221; 是Java堆GC所用的总时间。</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">最后的 &#8220;[Times: user=0.00 sys=0.00, real=0.00 secs]&#8221; 分别代表 用户态消耗的CPU时间、内核态消耗的CPU时间 和 操作从开始到结束所经过的墙钟时间。墙钟时间包括各种非运算的等待耗时，如IO等待、线程阻塞。CPU时间不包括等待时间，当系统有多核时，多线程操作会叠加这些CPU时间，所以user或sys时间会超过real时间。</p>
<h2 style="text-align: left; line-height: normal; text-transform: none; background-color: rgb(255,255,255); font-variant: normal; font-style: normal; margin-top: 0px; text-indent: 0px; letter-spacing: normal; font-family: Arial, Helvetica, San-serif; white-space: normal; margin-bottom: 0px; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">堆的分代</h2>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px"><img style="border-bottom: medium none; border-left: medium none; max-width: 100%; height: auto !important; border-top: medium none; border-right: medium none" alt="JVM-heap-generations" src="http://coderbee.net/wp-content/uploads/2013/12/JVM-heap-generations.png" /></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">在上图中：</p>
<ul style="list-style-position: outside; text-align: left; padding-bottom: 2px; text-transform: none; background-color: rgb(255,255,255); list-style-type: disc; text-indent: 5px; margin: 2px; padding-left: 2px; letter-spacing: normal; padding-right: 2px; font: 14px Verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; text-decoration: none; padding-top: 2px; -webkit-text-stroke-width: 0px"><li style="padding-bottom: 2px; margin: 0px 0px 0.5em 30px">young区域就是新生代，存放新创建对象；</li><li style="padding-bottom: 2px; margin: 0px 0px 0.5em 30px">tenured是年老代，存放在新生代经历多次垃圾回收后仍存活的对象；</li><li style="padding-bottom: 2px; margin: 0px 0px 0.5em 30px">perm是永生代，存放类定义信息、元数据等信息。</li></ul>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px Arial, Helvetica, San-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">当GC发生在新生代时，称为Minor GC，次收集；当GC发生在年老代时，称为Major GC，主收集。 一般的，Minor GC的发生频率要比Major GC高很多。</p><img src ="http://www.blogjava.net/jjshcc/aggbug/425769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2015-06-18 11:28 <a href="http://www.blogjava.net/jjshcc/archive/2015/06/18/425769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一次CMS GC问题排查过程（理解原理+读懂GC日志）</title><link>http://www.blogjava.net/jjshcc/archive/2015/06/18/425768.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Thu, 18 Jun 2015 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2015/06/18/425768.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/425768.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2015/06/18/425768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/425768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/425768.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这个是之前处理过的一个线上问题，处理过程断断续续，经历了两周多的时间，中间各种尝试，总结如下。这篇文章分三部分：1、问题的场景和处理过程；2、GC的一些理论东西；3、看懂GC的日志先说一下问题吧问题场景：线上机器在半夜会推送一个700M左右的数据，这个时候有个数据置换的过程，也就是说有700M*2的数据在heap区域中，线上系统超时比较多，导致了很严重（严重程度就不说了）的问题。问...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjshcc/archive/2015/06/18/425768.html'>阅读全文</a><img src ="http://www.blogjava.net/jjshcc/aggbug/425768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2015-06-18 11:24 <a href="http://www.blogjava.net/jjshcc/archive/2015/06/18/425768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>