ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕日韩欧美精品高清在线,天堂中文在线8,国产精品一区在线看http://www.aygfsteel.com/DLevin/category/54907.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 08:47:19 GMTThu, 13 Aug 2015 08:47:19 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Œæˆ‘们发现偶ž®?d¨¡ng)ä¼?x¨¬)出现一些GemFireçš„Function执行特别慢,òq¶ä¸”­‘…过了两分钟åQˆäØ“(f¨´)了保证数据的一致性,我们在写之前需要先拿一个LockåQŒå› ä¸ÞZ¸èƒ½æ¯ä¸ªKey都对应一个LockåQŒå› è€Œæˆ‘们ä‹É用了Guavaçš„Stripe LockåQˆå…³äºŽStripe Lock可以参è€?a href="http://www.aygfsteel.com/DLevin/archive/2013/12/25/407990.html">˜q™é‡Œ</a>åQ‰ï¼Œè€Œä¸”˜q™ä¸ªLock本èín我们指定äº?分钟的超时时é—ß_(d¨¢)¼Œå› è€Œå¦‚果写­‘…过两分钟,我们ž®×ƒ¼š(x¨¬)收到ExceptionåQ‰ã€‚这个问题其实已¾lå›°æ‰îCº†æˆ‘们好几òq´äº†åQŒåˆšå‰æ®µæ—‰™—´åQŒæˆ‘们发现长旉™—´çš„Stop-The-World GCä¼?x¨¬)引赯‚¿™ä¸ªé—®é¢˜ï¼Œè€Œä¸”˜q™ç§æ—¶å€™å¾ˆå¤šæ—¶å€™ä¼š(x¨¬)引è“v那个节点从集¾Ÿ¤ä¸­é€€å‡ºï¼Œòq¶ä¸æ˜¯æ‰€æœ‰çš„˜q™ç§é”™è¯¯éƒ½æœ‰GC的问题,我特地查了GC的日志,有些˜q™ç§å†™è¶…˜q‡ä¸¤åˆ†é’Ÿçš„æƒ…况下åQŒGC一直处于非常健åºïL(f¨¥ng)š„状态,而且查了GemFire的日志和我们自己的日志,也没有发çŽîC“Q何异常。由于我们每个数据保留两分䆾拯‚´åQŒä¹Ÿž®±æ˜¯è¯´æ¯‹Æ¡æ•°æ®å†™éƒ½è¦å†™ä¸¤ä¸ªèŠ‚ç‚¹ï¼Œä¸¤åˆ†é’Ÿå¯¹CPU来说可以做太多的事情åQŒå› è€Œåªæœ‰IO才能在某些时候äñ”生这¿Ué—®é¢˜ï¼Œåœ¨é—®é¢˜å‘生的时候也没有ä»ÖM½•overflow数据åQŒè€Œä¸”本地操作åQŒå³ä½¿å¯¹IO来说2分钟也是一个非帔R•¿çš„æ—¶é—´äº†åQŒå› è€Œæˆ‘们只能怀疑这是写另一个节点引èµïL(f¨¥ng)š„åQŒå¯¹å¦ä¸€ä¸ªèŠ‚ç‚¹ï¼Œå®ƒæ˜¯åœ¨åŒä¸€ä¸ªData Center中,而且基本是在同一个Chasis内部åQŒå› è€Œå®ƒä»¬ä¹‹é—´å°äº?M的数据量通信也不太可能花åŽ?分钟的时é—ß_(d¨¢)¼Œæ‰€ä»¥å‰©ä¸‹çš„æˆ‘们ž®±åªèƒ½æ€€ç–‘网¾lœçš„问题了,比如数据丢包、网¾lœæŠ–动、网¾lœæµé‡å¤ªå¤§ä¸€èµ·ä¼ è¾“变慢等åQŒä½†æ˜¯æˆ‘们没有找åˆîC“Q何相关的问题。所以我们很长一ŒD‰|—¶é—´ç´ æ‰‹æ— ½{–,只能怪GemFire闭源åQŒæˆ‘们不知道˜q™ä¸¤åˆ†é’Ÿæ˜¯ä¸æ˜¯GemFire自己内部在做一些不ä¸ÞZh知的事情åQŒå› è€Œå¤ªå¿™äº†è€Œæ¯æ¥å¾—å?qi¨¢ng)处理我们的写请求。虽然我一直觉得不½Ž¡åœ¨å¤„理什么炒作,两分钟都没有响应æ ÒŽ(gu¨©)œ¬æ— æ³•解释的通,更何况GemFire节点之间òq¶æ²¡æœ‰æŠ¥å‘Šæœ‰ä»ÖM½•异常åQŒæˆ–者像以前发现的一个节点向Locator举报另一个节ç‚ÒŽ(gu¨©)²¡æœ‰å“åº”的问题åQŒLocator自己也能很正常的向那个节点发送新的成员信息(ViewåQ‰ï¼Œå› è€Œçœ‹èµäh¥å‘是˜q™ä¸ªèŠ‚ç‚¹è™½ç„¶èŠ×ƒº†ä¸¤åˆ†é’Ÿå¤šæ¥å†™ä¸€ä¸ªæ•°æ®ï¼Œä½†æ˜¯å®ƒè¿˜æ˜¯æœ‰å“åº”的,有点“假死”的赶脚ã€?br /> <br /> <h2>问题发现</h2> ˜q™ä¸ªé—®é¢˜˜q™ä¹ˆå‡ å¹´ä»¥æ¥æ—¶ä¸æ—¶çš„ž®×ƒ¼š(x¨¬)发生åQŒè€Œä¸”因䨓(f¨´)以前èŠÞqš„æ—‰™—´å¤ªå¤šäº†ï¼Œè€Œä¸”也没有找åˆîC“Q何出错的地方åQŒçŽ°åœ¨çƒ¦æ€§ä¸åŽ»èŠ±å¤ªå¤šæ—‰™—´åœ¨ä¸Šé¢äº†åQŒæ›´ä½•况˜q™ä¸ªå®ƒå¾ˆé•¿æ—¶é—´æ‰å‘生一‹Æ¡ï¼Œòq¶ä¸”今年以来ž®×ƒ¸€ç›´æ²¡å‘生˜q‡ï¼Œç›´åˆ°å‰å‡ å‘¨å‡ºçŽîC¸€‹Æ¡ï¼Œæˆ‘有点不信邪的重新去看这个问题,依然没有扑ֈ°ä»ÖM½•可疑的地方,GC日志、应用程序日志、GemFire自己的日志、网¾lœã€CPU使用情况½{‰æ‰€æœ‰çš„都是正常的,除了问题发生的那个时刻,应用½E‹åºæ²¡æœ‰ä»ÖM½•日志åQŒå¦å¤–在问题发生之前出现˜q‡Log4J日志文äšgçš„RollingåQˆæˆ‘们ä‹É用RollingFileAppenderåQŒåƈ且只保留20个日志文ä»Óž¼‰åQŒä½†æ˜¯Log4J日志文äšgRoll的日志出çŽîCº†æ–­ç»“åQŒåœ¨å¼€å§‹è¦Roll到真正完成Roll中间˜q˜æœ‰å‡ è¡ŒGemFire自èínçš„æ—¥å¿—ï¼Œæ­¤æ—¶æˆ‘åÆˆæ²¡æœ‰è§‰å¾—˜q™ä¸ªæ˜¯æœ‰å¾ˆå¤§é—®é¢˜çš„ï¼Œå› äØ“(f¨´)我始¾lˆè§‰å¾—Log4J除了它自己提到åã^均对性能æœ?0%的媄响以外,它就是一个简单的把日志写到文件的˜q‡ç¨‹åQŒä¸ä¼?x¨¬)媄响的整个应用½E‹åºæœ¬èínåQŒå› ä¸ºå®ƒå¤ªç®€å•了åQŒç›´åˆîC»Šå¤©è¿™ä¸ªé—®é¢˜å†‹Æ¡å‡ºçŽŽÍ¼Œä¾ç„¶æ²¡æœ‰ä»ÖM½•å…¶ä»–æ–šw¢çš„æ”¶èŽøP¼Œæ‰€æœ‰çš„地方都显½Cºæ­£å¸¸çŠ¶æ€ï¼Œç”šè‡³æˆ‘ä»¬ä¹‹å‰å‘çŽ°çš„ç½‘å¡é—®é¢˜ä»Šå¤©ä¹Ÿæ²¡æœ‰å‘ç”ŸåQŒç„¶è€ŒåŒæ äh˜¯å‡ºé—®é¢˜çš„两分钟没有出现应用程序日志,日志文äšgRoll的日志和上次¾cÖM¼¼åQŒå¼€å§‹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>日志打印的操作是synchronizedåQŒä¹Ÿž®±æ˜¯è¯´åœ¨æ—¥å¿—æ–‡äšgRoll的时候,所有其它需要打日志的线½E‹éƒ½è¦ç­‰å¾…直到Roll完成åQŒå¦‚果这个Roll˜q‡ç¨‹­‘…过äº?分钟åQŒé‚£ä¹ˆå°±ä¼?x¨¬)发生我们看到的Stripe Lock­‘…æ—¶åQŒä¹Ÿž®±æ˜¯å‘生了程åº?#8220;假死”的状态ã€?/strong>重新查看Log4J打印日志的方法调用栈åQŒå®ƒä¼?x¨¬)在两个地方用synchronizedåQŒå³åŒä¸€ä¸ªCategoryåQˆLoggeråQ‰ç±»å®žä¾‹å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>以及(qi¨¢ng)同一个Appender在doApppendæ—Óž¼š(x¨¬)<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æ–ÒŽ(gu¨©)³•中,˜q›ä¸€æ­¥åˆ†æžï¼Œåœ¨ä¸‹é¢ä¸¤å¥è¯ä¹‹é—´åQŒä»–们分别花费了­‘…过100s和超˜q?1s的时é—ß_(d¨¢)¼š(x¨¬)</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的性能作了一些简单测试:(x¨¬)</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ˆæ¨¡æ‹Ÿæ—¥å¿—,每行都会(x¨¬)flushåQ‰ï¼š(x¨¬)</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­‘…过36såQŒè€Œå‘我们有十几台机器同时使用相同的NFSåQŒåƈ且每台机器上都跑二三十个½E‹åºåQŒå¦‚果那ŒD‰|—¶é—´åŒæ—¶æœ‰ä¸Šä¸‡ä¸ªçš„æ—¥å¿—写,可以预计辑ֈ°100s情况是可能发生的ã€?/div><div>关于NFS性能的问题,在《构建高性能WEB站点》的书(330™åµï¼‰ä¸­ä¹Ÿæœ‰æ¶‰å?qi¨¢ng)。简单的介绍åQŒNFSç”±Sunåœ?984òq´å¼€å‘,是主‹¹å¼‚æž„åã^台实现文件共享的首选方案。它òq¶æ²¡æœ‰è‡ªå·Þqš„传输协议åQŒè€Œæ˜¯ä½¿ç”¨RPCåQˆRemote Procedure CallåQ‰åè®®ï¼ˆåº”用层)åQŒRPC协议默认底层åŸÞZºŽUDP传输åQŒä½†æ˜¯è‡ªå·±å®žçŽ°åœ¨ä¸¢åŒ…æ—¶çš„é‡ä¼ æœºåˆ¶åQŒè€Œä¸”NFS服务器采用多˜q›ç¨‹æ¨¡åž‹åQŒé»˜è®¤è¿›½E‹äØ“(f¨´)4åQŒä½†æ˜¯ä¸€èˆ¬éƒ½ä¼?x¨¬)调优增加服务进½E‹æ•°åQŒç„¶è€?#8220;不管怎么对NFS˜q›è¡Œæ€§èƒ½ä¼˜åŒ–åQŒNFSæ³¨å®šä¸é€‚åˆä½œäØ“(f¨´)I/O密集型文件共享方案,但可以作ä¸ÞZ¸€èˆ¬ç”¨é€”,比如提供站点内部的资源共享,它的优势在于å®ÒŽ(gu¨©)˜“搭徏åQŒè€Œä¸”可以减少不必要的数据冗余ã€?#8221;</div><div>可以使用命ä×o(h¨´)åQ?#8220;nfsstat -c”获取对NFS服务器的操作的简单统计,具体可以参考《构建高性能WEB站点》的相关章节åQŒé‡Œé¢è¿˜æœ‰æ›´è¯¦ç»†çš„对NFS服务器性能的测试ã€?/div><div><br /><h2>æ€È»“</h2><strong>从这个事件我æ€È»“了两件事情:(x¨¬)</strong></div><div>1. 日志的媄响可能是全局性的åQŒå› è€Œè¦éžå¸¸ž®å¿ƒåQŒä¸€ä¸ªè€—时的操作可能引èµïL(f¨¥ng)¨‹åºçš„“假死”åQŒå› è€Œè¦éžå¸¸ž®å¿ƒã€?/div><div>2. 虽然把日志打印在NFS上,对大量的日志文äšg查找ä¼?x¨¬)方便很多,但是˜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>Commons Logging存在的ClassLoader问题详解http://www.aygfsteel.com/DLevin/archive/2012/11/10/391122.htmlDLevinDLevinFri, 09 Nov 2012 16:51:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/11/10/391122.htmlhttp://www.aygfsteel.com/DLevin/comments/391122.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/11/10/391122.html#Feedback2http://www.aygfsteel.com/DLevin/comments/commentRss/391122.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/391122.html阅读全文

DLevin 2012-11-10 00:51 发表评论
]]>
深入源码之JDK Logginghttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390992.htmlDLevinDLevinWed, 07 Nov 2012 16:49:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390992.htmlhttp://www.aygfsteel.com/DLevin/comments/390992.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390992.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/390992.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/390992.html阅读全文

DLevin 2012-11-08 00:49 发表评论
]]>
深入源码之SLF4Jhttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390991.htmlDLevinDLevinWed, 07 Nov 2012 16:44:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390991.htmlhttp://www.aygfsteel.com/DLevin/comments/390991.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/11/08/390991.html#Feedback4http://www.aygfsteel.com/DLevin/comments/commentRss/390991.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/390991.html阅读全文

DLevin 2012-11-08 00:44 发表评论
]]>
深入源码之Commons Logging http://www.aygfsteel.com/DLevin/archive/2012/11/04/390755.htmlDLevinDLevinSat, 03 Nov 2012 17:20:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/11/04/390755.htmlhttp://www.aygfsteel.com/DLevin/comments/390755.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/11/04/390755.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/390755.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/390755.html阅读全文

DLevin 2012-11-04 01:20 发表评论
]]>
【è{】Log4j/common log和各¿UæœåŠ¡å™¨é›†æˆçš„é—®é¢?/title><link>http://www.aygfsteel.com/DLevin/archive/2012/11/02/390639.html</link><dc:creator>DLevin</dc:creator><author>DLevin</author><pubDate>Thu, 01 Nov 2012 18:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/DLevin/archive/2012/11/02/390639.html</guid><wfw:comment>http://www.aygfsteel.com/DLevin/comments/390639.html</wfw:comment><comments>http://www.aygfsteel.com/DLevin/archive/2012/11/02/390639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/DLevin/comments/commentRss/390639.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/DLevin/services/trackbacks/390639.html</trackback:ping><description><![CDATA[转自åQ?a >http://xinyanfei.blog.sohu.com/72361504.html</a><br />我从转到Java开发后åQŒä¸€ç›´åœ¨å¼€å‘Application ServeråQŒæ‰€ä»¥åŸºæœ¬æ²¡æœ‰å’Œå¤§åž‹çš„Web Server打过交道åQŒæ‰€ä»¥å…³äºŽcommon logging在这些server上部¾|²æ—¶é‡åˆ°çš„问题也只能是从理论上去解释。感觉这½‹‡æ–‡ç« ä»‹¾lçš„不错åQŒæ‰€ä»¥è{载过来ã€?br /><br /><span id="wmqeeuq" class="Apple-style-span" style="color: #62613b; font-family: Verdana, Arial, Helvetica, 宋体, sans-serif; line-height: 25px; ">  目前的很多商业和非商业的服务器中间äšg都默认集成了common-log甚至是log4j.因此当我门把我们的应用发布在上面的时å€?都会(x¨¬)遇到关于logæ–šw¢çš„é—®é¢?<br style="line-height: 25px; " />  1.webshpere下面集成log4j.<br style="line-height: 25px; " />  "WebSphere的类装入器方式有两种方式åQšPARENT_FIRSTå’ŒPARENT_LAST。默认值是PARENT_FIRSTåQŒè¿™¿Uæ–¹å¼åœ¨è½½å…¥å½“前classpath的类之前先蝲入其上一¾U§classloader能够装入的类。这是标准的JVM classloader的默认策略。如果采用PARENT_LASTåQŒåˆ™˜q‡ç¨‹æ­£å¥½ç›¸ååQŒå³å…ˆè²å…¥å½“前classpath的类åQŒå†è½½å…¥å…¶ä¸Šä¸€¾U§classloader能够装入的类åQŒè¿™æ ·å¯ä»¥ç”¨å½“前classpath中更新的¾c»è¦†ç›–其上一¾U§classloader的相同类。受¾c»è£…入器方式影响的classloader包括application classloader、WAR classloader以及(qi¨¢ng)å…׃ín¾cÕdº“çš„classloaderã€?<br style="line-height: 25px; " /> å› äØ“(f¨´)websphere在共享类库的classloader中有一套common logging,但是¼‹®æ²¡æœ‰åˆé€‚配¾|®æ–‡ä»?如果我们把配¾|®æ­£¼‹®çš„log4j.propertiesæ–‡äšg攑֜¨å…׃ín¾cÕdº“ä¸?我们ä¼?x¨¬)发现l(f¨¡)og4j可以˜qè¡Œ.但还有另外一个很通用的方å¼?-改变webshpere的类库加载顺åº?我们让他先加载我们web应用所需的类åº?åÏxˆ‘们把web应用的加栽方式改为PARENT_LAST.<br style="line-height: 25px; " />  å“?ž®½ç®¡æˆ‘小心的提防,今天˜q˜æ˜¯ä¸­æ‹›äº?在我的配¾|®é‡Œ,log4j的配¾|®æ–‡ä»¶åªèƒ½è¯»å–一‹Æ?不能一个应用一个配¾|®æ–‡ä»?ä¸ÞZº†è®©å®ƒåŠ è²è‡ªå·±çš„é…¾|?可以自己å†?或者用springçš?servlet/listeneråŽÀL‰‹åŠ¨åŠ è½½è¿™ä¸ªé…¾|®æ–‡ä»?<br style="line-height: 25px; " /> 2.jboss下面的集成log4j<br style="line-height: 25px; " />  å¤§å®¶å¯èƒ½éƒ½æ›¾åœ¨äØ“(f¨´)jboss下面配置log4j郁闷˜q?jboss比webshpereèµ°çš„˜q˜è¿œ.无论你的™å¹ç›®æ˜¯å¦ä½¿ç”¨äº†log4j,jboss在自己启动的时候就已经˜qè¡Œä»–了.也就是说在jboss加蝲自己å…׃ín¾cÕdº“的时å€?已经è¯Õd–了自己log4j.xmlæ–‡äšg配置.˜q™ä¸ªæ–‡äšg在conf中可以找åˆ?å¦‚æžœä½ éœ€è¦äØ“(f¨´)你的应用单独配置一个catagory,你需要直接在˜q™é‡Œé…ç½®åQ?br style="line-height: 25px; " />   åœ¨webloader装蝲应用的时å€?如果应用中有log4j的包,ä¼ég¹Žæ€Õd‡ºçްappender已被占用的问é¢?½W”者把log4j的包˜qžå¸¦åº”用中的log4j配置文äšg一òq¶ç§»åŽ?世界清净äº?<br style="line-height: 25px; " />关于ä¸ÞZº†è®©åº”用自带的log4j配置文äšg生效,有äh廸™®®ä¿®æ”¹<br style="line-height: 25px; " /> <attribute name="Java2ClassLoadingCompliance">false</attribute><br style="line-height: 25px; " />å’?br style="line-height: 25px; " /> <attribute name="UseJBossWebLoader">false</attribute><br style="line-height: 25px; " />˜q™ä¸¤ä¸ªå±žæ€§ï¼Ž<br style="line-height: 25px; " /> åQ“.sunone下面集成log4j<br style="line-height: 25px; " />    距离上次用SunOne服务器已¾lå¥½é•¿æ—¶é—´äº†,ä¼ég¹ŽsunOneçš„log有些¾cÖM¼¼jboss,也是一个服务器的log集中½Ž¡ç†.ç”׃ºŽä½¿ç”¨çš„不是很å¤?暂且在这里站个位å­?<br style="line-height: 25px; " />随手贴点关于log的信æ?<br style="line-height: 25px; " /><a style="line-height: 21px; color: #62613b; font: normal normal normal 12px/normal Verdana, Arial, Helvetica, 宋体, sans-serif; text-decoration: underline; ">http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions</a><br style="line-height: 25px; " /><a style="line-height: 21px; color: #62613b; font: normal normal normal 12px/normal Verdana, Arial, Helvetica, 宋体, sans-serif; text-decoration: underline; ">http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html</a></span><br /><img src ="http://www.aygfsteel.com/DLevin/aggbug/390639.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> 2012-11-02 02:08 <a href="http://www.aygfsteel.com/DLevin/archive/2012/11/02/390639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入Log4J源码之LoggerRepositoryå’ŒConfiguratorhttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382678.htmlDLevinDLevinMon, 09 Jul 2012 18:38:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382678.htmlhttp://www.aygfsteel.com/DLevin/comments/382678.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382678.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/382678.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/382678.html阅读全文

DLevin 2012-07-10 02:38 发表评论
]]>
深入Log4J源码之Appenderhttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382676.htmlDLevinDLevinMon, 09 Jul 2012 18:23:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382676.htmlhttp://www.aygfsteel.com/DLevin/comments/382676.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/07/10/382676.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/382676.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/382676.html阅读全文

DLevin 2012-07-10 02:23 发表评论
]]>
深入Log4J源码之Layouthttp://www.aygfsteel.com/DLevin/archive/2012/07/04/382131.htmlDLevinDLevinTue, 03 Jul 2012 17:05:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/07/04/382131.htmlhttp://www.aygfsteel.com/DLevin/comments/382131.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/07/04/382131.html#Feedback1http://www.aygfsteel.com/DLevin/comments/commentRss/382131.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/382131.html阅读全文

DLevin 2012-07-04 01:05 发表评论
]]>
深入Log4J源码之Log4J Corehttp://www.aygfsteel.com/DLevin/archive/2012/06/28/381667.htmlDLevinDLevinWed, 27 Jun 2012 18:09:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/06/28/381667.htmlhttp://www.aygfsteel.com/DLevin/comments/381667.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/06/28/381667.html#Feedback4http://www.aygfsteel.com/DLevin/comments/commentRss/381667.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/381667.html阅读全文

DLevin 2012-06-28 02:09 发表评论
]]>
深入Log4J源码之SimpleLoghttp://www.aygfsteel.com/DLevin/archive/2012/06/12/380647.htmlDLevinDLevinTue, 12 Jun 2012 15:38:00 GMThttp://www.aygfsteel.com/DLevin/archive/2012/06/12/380647.htmlhttp://www.aygfsteel.com/DLevin/comments/380647.htmlhttp://www.aygfsteel.com/DLevin/archive/2012/06/12/380647.html#Feedback3http://www.aygfsteel.com/DLevin/comments/commentRss/380647.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/380647.html阅读全文

DLevin 2012-06-12 23:38 发表评论
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÌÒ½­ÏØ| ³çÎÄÇø| ÂúÖÞÀïÊÐ| ÀÖÆ½ÊÐ| ÑôË·ÏØ| ·Ê¶«ÏØ| ½­ÁêÏØ| ÆÖ½­ÏØ| ̨ÖÝÊÐ| ×ñÒåÊÐ| ÓÀ°²ÊÐ| °¢À­ÉÆÓÒÆì| ÍÍÁôÏØ| ´ó¹ØÏØ| ´óÀíÊÐ| ÌïÑôÏØ| ÎÚÉóÆì| ÌìÌ¨ÏØ| èë´¨ÏØ| ¸¡É½ÏØ| ƽ½­ÏØ| ÄÚ»ÆÏØ| ËÄ×ÓÍõÆì| ÉØ¹ØÊÐ| ÀÉÏªÏØ| ÄϹ¬ÊÐ| Âé³ÇÊÐ| ÂÞ¶¨ÊÐ| ȪÖÝÊÐ| ÕØ¶«ÊÐ| ÐðÓÀÏØ| ¶ÑÁúµÂÇìÏØ| ÓÀÐËÏØ| ¿­ÀïÊÐ| Ì¨Ç°ÏØ| ÓÀºÍÏØ| Çø¡£| ±±Æ±ÊÐ| É«´ïÏØ| µÂÇìÏØ| ±£¿µÏØ|