??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲男人天堂网,91麻豆精品久久久久蜜臀,人成免费电影一二三区在线观看http://blogjava.net/DLevin/category/54889.htmlIn general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatrazh-cnThu, 13 Aug 2015 10:48:42 GMTThu, 13 Aug 2015 10:48:42 GMT60Log4J引v的程序“装歠Z?/title><link>http://www.aygfsteel.com/DLevin/archive/2015/08/13/426751.html</link><dc:creator>DLevin</dc:creator><author>DLevin</author><pubDate>Thu, 13 Aug 2015 08:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/DLevin/archive/2015/08/13/426751.html</guid><wfw:comment>http://www.aygfsteel.com/DLevin/comments/426751.html</wfw:comment><comments>http://www.aygfsteel.com/DLevin/archive/2015/08/13/426751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/DLevin/comments/commentRss/426751.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/DLevin/services/trackbacks/426751.html</trackback:ping><description><![CDATA[<h2>问题起因</h2> 依然是在使用GemFire的集中Q我们发现偶会出现一些GemFire的Function执行特别慢,q且过了两分钟Qؓ了保证数据的一致性,我们在写之前需要先拿一个LockQ因Z能每个Key都对应一个LockQ因而我们用了Guava的Stripe LockQ关于Stripe Lock可以参?a href="http://www.aygfsteel.com/DLevin/archive/2013/12/25/407990.html">q里</a>Q,而且q个Lock本n我们指定?分钟的超时时_因而如果写过两分钟,我们׃收到ExceptionQ。这个问题其实已l困C我们好几q了Q刚前段旉Q我们发现长旉的Stop-The-World GC会引赯个问题,而且q种时候很多时候会引v那个节点从集中退出,q不是所有的q种错误都有GC的问题,我特地查了GC的日志,有些q种写超q两分钟的情况下QGC一直处于非常健L状态,而且查了GemFire的日志和我们自己的日志,也没有发CQ何异常。由于我们每个数据保留两分䆾拯Q也是说每ơ数据写都要写两个节点,两分钟对CPU来说可以做太多的事情Q因而只有IO才能在某些时候生这U问题,在问题发生的时候也没有Moverflow数据Q而且本地操作Q即使对IO来说2分钟也是一个非帔R的时间了Q因而我们只能怀疑这是写另一个节点引LQ对另一个节点,它是在同一个Data Center中,而且基本是在同一个Chasis内部Q因而它们之间小?M的数据量通信也不太可能花?分钟的时_所以剩下的我们只能怀疑网l的问题了,比如数据丢包、网l抖动、网l流量太大一起传输变慢等Q但是我们没有找CQ何相关的问题。所以我们很长一D|间素手无{,只能怪GemFire闭源Q我们不知道q两分钟是不是GemFire自己内部在做一些不Zh知的事情Q因而太忙了而每来得及处理我们的写请求。虽然我一直觉得不在处理什么炒作,两分钟都没有响应Ҏ无法解释的通,更何况GemFire节点之间q没有报告有M异常Q或者像以前发现的一个节点向Locator举报另一个节Ҏ有响应的问题QLocator自己也能很正常的向那个节点发送新的成员信息(ViewQ,因而看h向是q个节点虽然׃两分钟多来写一个数据,但是它还是有响应的,有点“假死”的赶脚?br /> <br /> <h2>问题发现</h2> q个问题q么几年以来时不时的׃发生Q而且因ؓ以前q旉太多了,而且也没有找CQ何出错的地方Q现在烦性不去花太多旉在上面了Q更何况q个它很长时间才发生一ơ,q且今年以来׃直没发生q,直到前几周出Cơ,我有点不信邪的重新去看这个问题,依然没有扑ֈM可疑的地方,GC日志、应用程序日志、GemFire自己的日志、网l、CPU使用情况{所有的都是正常的,除了问题发生的那个时刻,应用E序没有M日志Q另外在问题发生之前出现qLog4J日志文g的RollingQ我们用RollingFileAppenderQƈ且只保留20个日志文ӞQ但是Log4J日志文gRoll的日志出C断结Q在开始要Roll到真正完成Roll中间q有几行GemFire自n的日志,此时我ƈ没有觉得q个是有很大问题的,因ؓ我始l觉得Log4J除了它自己提到^均对性能?0%的媄响以外,它就是一个简单的把日志写到文件的q程Q不会媄响的整个应用E序本nQ因为它太简单了Q直C天这个问题再ơ出玎ͼ依然没有M其他斚w的收P所有的地方都显C正常状态,甚至我们之前发现的网卡问题今天也没有发生Q然而同h出问题的两分钟没有出现应用程序日志,日志文gRoll的日志和上次cMQ开始Roll到结束出现GemFire日志的交叉? <div><fieldset><legend>最q一ơ发生的日志</legend> <div>[info 2015/08/12 01:56:07.736 BST …] ClientHealthMonitor: Registering client with member id …</div> <div>log4j: rolling over count=20971801</div> <div>log4j: maxBackupIndex=20</div> <div>[info 2015/08/12 01:56:12.265 BST …] ClientHealthMonitor: Unregistering client with member id …</div> <div>……</div> <div>[info 2015/08/12 01:56:23.773 BST …] ClientHealthMonitor: Registering client with member id …</div> <div>log4j: Renaming file logs/….log.19 to logs/….log.20</div> </fieldset></div> <div><fieldset><legend>一周前发生的日?/legend> <div>[info 2015/08/04 01:43:45.761 BST …] ClientHealthMonitor: Registering client with member id …</div> <div>log4j: rolling over count=20971665</div> <div>log4j: maxBackupIndex=20</div> <div>……</div> <div>[info 2015/08/04 01:45:25.506 BST …] ClientHealthMonitor: Registering client with member id …</div> <div>log4j: Renaming file logs/….log.19 to logs/….log.20</div> </fieldset></div> <div>看似q个是一个规律(套用同事的一句话Q一ơ发生时偶然Q两ơ发生就是科学了Q。然而此时我其实依然不太怿Log4J?#8220;凶手”Q因为我一直觉得Log4J是一个简单的日志输出框架Q它要是出问题也只是它自q问题Q是局部的Q而这个问题的出现明显是全局的,直到我突然脑子一闪而过Q?strong>日志打印的操作是synchronizedQ也是说在日志文gRoll的时候,所有其它需要打日志的线E都要等待直到Roll完成Q如果这个Rollq程过?分钟Q那么就会发生我们看到的Stripe Lock时Q也是发生了程?#8220;假死”的状态?/strong>重新查看Log4J打印日志的方法调用栈Q它会在两个地方用synchronizedQ即同一个CategoryQLoggerQ类实例Q?br /> <div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> callAppenders(LoggingEvent event) {<br />         <span style="color: #0000FF; ">int</span> writes = 0;<br />         <span style="color: #0000FF; ">for</span>(Category c = <span style="color: #0000FF; ">this</span>; c != <span style="color: #0000FF; ">null</span>; c=c.parent) {<br />             <span style="color: #008000; ">//</span><span style="color: #008000;"> Protected against simultaneous call to addAppender, removeAppender,<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span style="color: #008000; "><br /> </span>            <span style="color: #0000FF; ">synchronized</span>(c) {<br />                 <span style="color: #0000FF; ">if</span>(c.aai != <span style="color: #0000FF; ">null</span>) {<br />                     writes += c.aai.appendLoopOnAppenders(event);<br />                 }<br />                 <span style="color: #0000FF; ">if</span>(!c.additive) {<br />                     <span style="color: #0000FF; ">break</span>;<br />                 }<br />             }<br />         }<br /> 。。?br />     }</div> </div>以及同一个Appender在doApppendӞ<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">synchronized</span> <span style="color: #0000FF; ">void</span> doAppend(LoggingEvent event) {<br />      。。?br />      <span style="color: #0000FF; ">this</span>.append(event);<br />    }</div><div>而Roll的过E就是在appendҎ中,q一步分析,在下面两句话之间Q他们分别花费了过100s和超q?1s的时_</div><div>log4j: maxBackupIndex=20<br />。。?/div><div>log4j: Renaming file logs/….log.19 to logs/….log.20</div><div>而这两句之间只包含了两个File.exists()Q一个File.delete()Q一个File.rename()操作Q?/div><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> rollOver() {<br />      。。?br />      <span style="color: #0000FF; ">if</span>(maxBackupIndex > 0) {<br />        <span style="color: #008000; ">//</span><span style="color: #008000;"> Delete the oldest file, to keep Windows happy.</span><span style="color: #008000; "><br /></span>        file = <span style="color: #0000FF; ">new</span> File(fileName + '.' + maxBackupIndex);<br />        <span style="color: #0000FF; ">if</span> (file.exists())<br />            renameSucceeded = file.delete();<br />        <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = maxBackupIndex - 1; i >= 1 && renameSucceeded; i--) {<br />            file = <span style="color: #0000FF; ">new</span> File(fileName + "." + i);<br />            <span style="color: #0000FF; ">if</span> (file.exists()) {<br />                target = <span style="color: #0000FF; ">new</span> File(fileName + '.' + (i + 1));<br />                LogLog.debug("Renaming file " + file + " to " + target);<br />                renameSucceeded = file.renameTo(target);<br />            }<br />        }<br />      。。?br />      }<br />    }</div><div><h2>NFS单性能试和分?/h2>因而我对NFS的性能作了一些简单测试:</div><div>只有一个线E时Q在NFS下rename性能Q?/div><div>1 file:                    3ms</div><div>10 files:                48ms</div><div>20 files:                114ms</div><div>相比较,在本地磁盘rename的性能Q?/div><div>1 file:                    1ms</div><div>3 files:                  1ms</div><div>10 files:                3ms</div><div>对NFS和本地磁盘写的性能Q模拟日志,每行都会flushQ:</div><table border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse;"> <tbody><tr style="height:13.4pt"> <td width="139" valign="top" style="width: 1.45in; border: 1pt solid windowtext; padding: 0in 5.4pt; height: 13.4pt;"> <p> </p> </td> <td width="78" valign="top" style="width: 58.5pt; border-style: solid solid solid none; border-top-color: windowtext; border-right-color: windowtext; border-bottom-color: windowtext; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; padding: 0in 5.4pt; height: 13.4pt;"> <p><span style="color:#1F497D">NFS</span></p> </td> <td width="78" valign="top" style="width: 58.5pt; border-style: solid solid solid none; border-top-color: windowtext; border-right-color: windowtext; border-bottom-color: windowtext; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; padding: 0in 5.4pt; height: 13.4pt;"> <p><span style="color:#1F497D">LOCAL</span></p> </td> </tr> <tr> <td width="139" valign="top" style="width: 1.45in; border-style: none solid solid; border-right-color: windowtext; border-bottom-color: windowtext; border-left-color: windowtext; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0in 5.4pt;"> <p><span style="color:#1F497D">1 writer, 11M</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">443ms</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">238ms</span></p> </td> </tr> <tr> <td width="139" valign="top" style="width: 1.45in; border-style: none solid solid; border-right-color: windowtext; border-bottom-color: windowtext; border-left-color: windowtext; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0in 5.4pt;"> <p><span style="color:#1F497D">1 writer, 101M</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">2793ms</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">992ms</span></p> </td> </tr> <tr> <td width="139" valign="top" style="width: 1.45in; border-style: none solid solid; border-right-color: windowtext; border-bottom-color: windowtext; border-left-color: windowtext; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0in 5.4pt;"> <p><span style="color:#1F497D">10 writers, 11M</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">~4400ms</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">~950ms</span></p> </td> </tr> <tr> <td width="139" valign="top" style="width: 1.45in; border-style: none solid solid; border-right-color: windowtext; border-bottom-color: windowtext; border-left-color: windowtext; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0in 5.4pt;"> <p><span style="color:#1F497D">10 writers, 101M</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">~30157ms</span></p> </td> <td width="78" valign="top" style="width:58.5pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt"> <p><span style="color:#1F497D">~5500ms</span></p> </td> </tr></tbody></table><div><br />一些其他的l计Q?/div><div><strong>100同时?</strong></div><div>Create 20 files spend: 301ms</div><div>Renaming 20 files spends: 333ms</div><div>Delete 20 files spends: 329ms</div><div></div><div><strong>1000同时?</strong></div><div>Create 20 files spend: 40145ms</div><div>Renaming 20 files spends: 39273ms<br /></div><div><strong>而在1000个同时写的过E中Q重命名Q?/strong></div><div>Rename file: LogTest1.50 take: <strong>36434ms</strong></div><div>Rename file: LogTest1.51 take: <strong>39ms</strong></div><div>Rename file: LogTest1.52 take: <strong>34ms</strong><br /></div><div>也就是说在这个模拟过E中Q一个文件的rename过36sQ而向我们有十几台机器同时使用相同的NFSQƈ且每台机器上都跑二三十个E序Q如果那D|间同时有上万个的日志写,可以预计辑ֈ100s情况是可能发生的?/div><div>关于NFS性能的问题,在《构建高性能WEB站点》的书(330)中也有涉及。简单的介绍QNFS由Sun?984q开发,是主异构^台实现文件共享的首选方案。它q没有自q传输协议Q而是使用RPCQRemote Procedure CallQ协议(应用层)QRPC协议默认底层ZUDP传输Q但是自己实现在丢包时的重传机制Q而且NFS服务器采用多q程模型Q默认进Eؓ4Q但是一般都会调优增加服务进E数Q然?#8220;不管怎么对NFSq行性能优化QNFS注定不适合作ؓI/O密集型文件共享方案,但可以作Z般用途,比如提供站点内部的资源共享,它的优势在于Ҏ搭徏Q而且可以减少不必要的数据冗余?#8221;</div><div>可以使用命oQ?#8220;nfsstat -c”获取对NFS服务器的操作的简单统计,具体可以参考《构建高性能WEB站点》的相关章节Q里面还有更详细的对NFS服务器性能的测试?/div><div><br /><h2>ȝ</h2><strong>从这个事件我ȝ了两件事情:</strong></div><div>1. 日志的媄响可能是全局性的Q因而要非常心Q一个耗时的操作可能引L序的“假死”Q因而要非常心?/div><div>2. 虽然把日志打印在NFS上,对大量的日志文g查找会方便很多,但是q是一个很耗性能的设计,特别是当大量的程序共享这个NFS的时候,因而要量避免?/div><img src ="http://www.aygfsteel.com/DLevin/aggbug/426751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/DLevin/" target="_blank">DLevin</a> 2015-08-13 16:28 <a href="http://www.aygfsteel.com/DLevin/archive/2015/08/13/426751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java CMS GC 361s引发的血?/title><link>http://www.aygfsteel.com/DLevin/archive/2015/08/01/426418.html</link><dc:creator>DLevin</dc:creator><author>DLevin</author><pubDate>Fri, 31 Jul 2015 19:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/DLevin/archive/2015/08/01/426418.html</guid><wfw:comment>http://www.aygfsteel.com/DLevin/comments/426418.html</wfw:comment><comments>http://www.aygfsteel.com/DLevin/archive/2015/08/01/426418.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/DLevin/comments/commentRss/426418.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/DLevin/services/trackbacks/426418.html</trackback:ping><description><![CDATA[     摘要: 文章从Java CMS GCp361s后引起GemFire节点掉出集群q程中各个节点交互的详细程以及日志情况Q重点介l了ParNewQCMS GC promotion failed和concurrent mode failure产生的原因以及解x案。解x案从两方面入手:JVM参数调优和减类的创建,其中JVM参数调优q程中详l介l了ParNew和CMS的工作原理、调优参数、各U不同情况下产生的GC日志解释Q着重于避免Full GC引v长时间停的问题?nbsp; <a href='http://www.aygfsteel.com/DLevin/archive/2015/08/01/426418.html'>阅读全文</a><img src ="http://www.aygfsteel.com/DLevin/aggbug/426418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/DLevin/" target="_blank">DLevin</a> 2015-08-01 03:02 <a href="http://www.aygfsteel.com/DLevin/archive/2015/08/01/426418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">޽</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͻ</a>| <a href="http://" target="_blank">˷</a>| <a href="http://" target="_blank">פ</a>| <a href="http://" target="_blank">ͭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽʡ</a>| <a href="http://" target="_blank">ָɽ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">㺺</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">괨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ų</a>| <a href="http://" target="_blank">ƾ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank">Ĭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Ѯ</a>| <a href="http://" target="_blank">׼</a>| <a href="http://" target="_blank">Ϫ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>