ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲免费av一区二区,国产伦精品一区二区三区免费迷,国内精品亚洲http://www.aygfsteel.com/zhangwei217245/category/43167.htmlAlways Beyond the Timezh-cnSun, 16 Mar 2014 15:15:27 GMTSun, 16 Mar 2014 15:15:27 GMT60【Tech Details】【è{】有关Java SPI机制http://www.aygfsteel.com/zhangwei217245/archive/2012/03/03/410530.htmlX-SpiritX-SpiritSat, 03 Mar 2012 03:34:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2012/03/03/410530.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/410530.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2012/03/03/410530.html#Feedback0http://www.aygfsteel.com/zhangwei217245/comments/commentRss/410530.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/410530.html
转自åQšhttp://blog.csdn.net/fenglibing/article/details/7083071

一个服åŠ?service)通常指的是已知的接口或者抽象类åQŒæœåŠ¡æä¾›æ–¹ž®±æ˜¯å¯¹è¿™ä¸ªæŽ¥å£æˆ–者抽象类的实玎ͼŒç„¶åŽæŒ‰spi标准存放到资源èµ\径META-INF/services目录下,文äšgçš„å‘½åäØ“è¯¥æœåŠ¡æŽ¥å£çš„å…¨é™å®šåã€‚å¦‚æœ‰ä¸€ä¸ªæœåŠ¡æŽ¥å£com.test.ServiceåQŒå…¶æœåŠ¡å®žçŽ°¾cÖMØ“com.test.ChildServiceåQŒé‚£æ­¤æ—¶éœ€è¦åœ¨META-INF/services中放¾|®æ–‡ä»¶com.test.ServiceåQŒå…¶ä¸­çš„内容ž®×ƒØ“该实现类的全限定名com.test.ChildServiceåQŒæœ‰å¤šä¸ªæœåŠ¡å®žçŽ°åQŒæ¯ä¸€è¡Œå†™ä¸€ä¸ªæœåŠ¡å®žçŽŽÍ¼Œ#åŽé¢çš„å†…å®¹äØ“æ³¨é‡ŠåQŒåƈ且该文äšg只能够是以UTF-8¾~–码ã€?/span>
    ˜q™ç§å®žçŽ°æ–¹å¼åQŒæ„Ÿè§‰å’Œæˆ‘们通常的开发方式差不多åQŒéƒ½æ˜¯å®šä¹‰ä¸€ä¸ªæŽ¥å£ï¼Œç„¶åŽå­ç±»å®žçŽ°çˆ¶ç±»ä¸­å®šä¹‰çš„æ–ÒŽ³•åQŒäؓ什么要搞这么一套标准以及单独搞一个配¾|®æ–‡ä»Óž¼Ÿ˜q™ç§æ–¹å¼ä¸»è¦æ˜¯é’ˆå¯¹ä¸åŒçš„æœåŠ¡æä¾›åŽ‚å•†åQŒå¯¹ä¸åŒåœºæ™¯çš„æä¾›ä¸åŒçš„解决æ–ÒŽ¡ˆåˆ¶å®šçš„一套标准,举个½Ž€å•的例子åQŒå¦‚现在的JDK中有支持音乐播放åQŒå‡è®‘֏ªæ”¯æŒmp3的播放,有些厂商惛_œ¨˜q™ä¸ªåŸºç¡€ä¹‹ä¸Šæ”¯æŒmp4的播放,有的æƒÏx”¯æŒmp5åQŒè€Œè¿™äº›åŽ‚å•†éƒ½æ˜¯ç¬¬ä¸‰æ–¹åŽ‚å•†åQŒå¦‚果没有提供SPI˜q™ç§å®žçŽ°æ ‡å‡†åQŒé‚£ž®±åªæœ‰ä¿®æ”¹JAVA的源代码了,那这个弊端也是显而易见的åQŒä¹Ÿž®±æ˜¯ä¸èƒ½å¤Ÿéšç€JDK的升¾U§è€Œå‡¾U§çŽ°åœ¨çš„åº”ç”¨äº†ï¼Œè€Œæœ‰äº†SPI标准åQŒSUN公司只需要提供一个播放接口,在实现播攄¡š„功能上通过ServiceLoad的方式加载服务,那么½W¬ä¸‰æ–¹åªéœ€è¦å®žçŽ°è¿™ä¸ªæ’­æ”¾æŽ¥å£ï¼Œå†æŒ‰SPI标准˜q›è¡Œæ‰“包成jaråQŒå†æ”‘Öˆ°classpath下面ž®±OK了,没有一点代码的侵入性ã€?/span>

    以下是找到的几篇文章åQ?/p>

    1ã€?a target="_blank" style="color: #ca0000; text-decoration: none;">http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.htmlåQŒè¿™ä¸ªæ˜¯å®˜æ–¹çš„æ–‡æ¡£ï¼Œæœ‰å¯¹service的详¾l†ä»‹¾lï¼ŒåŒ…括规范以及一个简单的½CÞZ¾‹åQŒè¿™ä¸ªæ˜¯å­¦ä¹ SPI必须看的文档åQ?/p>

    注:http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20ProvideråQŒè¿™ä¸ªæ˜¯1.4中对Service Provider的介¾lï¼ŒåŠ è²æœåŠ¡æ˜¯é€šè¿‡sun.misc.Service˜q›è¡ŒåŠ è²çš„ï¼Œ˜q™ä¸ªä¹Ÿæœ‰ç›¸åº”的示例,照做ž®±OKåQ?/p>

    2、Javaçš„SPI机制åQ?a target="_blank" style="color: #ca0000; text-decoration: none;">http://www.2cto.com/kf/201012/79868.htmlåQŒè¿™ä¸ªæ˜¯å›½äh写的一½‹‡ç¤ºä¾‹æ–‡ç« ï¼Œä¹ŸæŒºä¸é”™åQŒé‡Œé¢ä¹Ÿæœ‰ä¸€ä¸ªç®€å•çš„½CÞZ¾‹åQ?/p>

    3、Developing a Service Provider using Java API(Service Provider Interface)åQ?a style="color: #ca0000; text-decoration: none;">http://blog.csdn.net/fenglibing/article/details/7083526åQŒè¿™½‹‡æ–‡ç« æ˜¯è½¬çš„alexa发表在blogspot上面的,也是一个开发SPI的示例,有兴­‘£çš„也可以看看;

    4、Add Mp3 capabilities to Java Sound with SPIåQ?a target="_blank" style="color: #ca0000; text-decoration: none;">http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3.htmlåQŒè¿™æ˜¯ä¸€ä¸ªæ¯”较老的例子åQŒåŸºäºŽjdk1.3çš„ï¼Œå› äØ“åœ¨jdk1.3的时候还没有支持mp3格式åQŒåªæ”¯æŒAU, AIF, MIDI, and WAV½{‰æ ¼å¼ï¼Œä¹Ÿæ˜¯ä¸€ä¸ªå€¼å¾—参考的½CÞZ¾‹ã€?/p>

    我这边也写了一个简单得不能够再½Ž€å•çš„½CÞZ¾‹åQŒæºç å¯ä»¥è¿™é‡Œä¸‹è½½ï¼šhttp://download.csdn.net/detail/fenglibing/3939882




最后很重要一点:


如果惌™¦è¦†ç›–某个ProvideråQŒå¯ä»¥åœ¨å¯¹åº”çš„META-INF/services的配¾|®æ–‡ä»¶ä¸­åŠ ä¸Šæ–°service的一行,或者也可以写在另一个有依赖关系的jar包中åQŒåªè¦å’ŒåŽŸæ¥çš„Provider命名不同卛_¯ã€‚加载顺序上可以考虑使用@Priority注解来调整加载的优先¾U§ã€?/p>



@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

]]>
【Effective】Logging最佛_®žè·?/title><link>http://www.aygfsteel.com/zhangwei217245/archive/2011/02/12/409787.html</link><dc:creator>X-Spirit</dc:creator><author>X-Spirit</author><pubDate>Sat, 12 Feb 2011 11:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhangwei217245/archive/2011/02/12/409787.html</guid><wfw:comment>http://www.aygfsteel.com/zhangwei217245/comments/409787.html</wfw:comment><comments>http://www.aygfsteel.com/zhangwei217245/archive/2011/02/12/409787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhangwei217245/comments/commentRss/409787.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhangwei217245/services/trackbacks/409787.html</trackback:ping><description><![CDATA[<div><div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><strong>#意识</strong></div> <p><strong style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="color: #0000ff; font-size: medium;">ASAP (As Soon As Possible)原则</span></strong></p> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">当线上出现诡异问题,</div> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">当你意识到靠现有的日志无法定位问题时åQ?/div> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">当现象难以在你的开发环境重现时åQ?/div> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">è¯·ä¸è¦æ‰§è‘—äºŽæž¯åè‚‰çœ¼çœ‹ä»£ç ï¼Œå› äØ“åQšä¸€åQ‰ä¸ä¸€å®šæ˜¯ä½ ä»£ç é€»è¾‘问题åQŒå¯èƒ½æ˜¯è„æ•°æ®é€ æˆçš„,是老业务数据造成的,是分布式环境造成的,是其他子¾pȝ»Ÿé€ æˆçš„;二)¾U¿ä¸Šä¸šåŠ¡å¤„äºŽä¸ç¨³å®šä¸­åQŒæ¡ä»¶ä¸å…è®¸é—®é¢˜å®šä½æ— é™æœŸã€?/div> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">此时åQ?strong>è¯ïL«‹å›_œ¨é—®é¢˜ç›¸å…³çš„调用链条上åQŒä¸€‹Æ¡æ€§ï¼š</strong></div> <div style="color: #000000; font-family: å¾®èÊY雅黑; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"> <ul><li><strong>在函数的入口和出口打印日志,同时</strong><strong><span style="font-size: 10.5pt; font-family: å¾®èÊY雅黑, sans-serif; color: red;">打印输入、输出参æ•?/span></strong></li><li><strong>catch(){……}里打印stacktraceåQ?/strong><strong><span style="font-size: 10.5pt; font-family: å¾®èÊY雅黑, sans-serif;">同时</span><span style="font-size: 10.5pt; font-family: å¾®èÊY雅黑, sans-serif; color: red;">打印try块中关键变量的å€û|¼ˆé¿å…ä½ å‘现某个异常是问题½W¬ä¸€åŽŸå› åQŒå´ä¸çŸ¥é“是什么变量传入导致的åQ?/span></strong></li><li><strong>与其他模块交互的接口入口处打印输入参敎ͼŒ</strong></li></ul> </div> 卻I¼Œ<strong>解决¾U¿ä¸Šé—®é¢˜å½’æ ¹¾l“底要靠log、a lot of log outputåQ?/strong><br /> <div>在logging的力度上切勿犹犹豫èõUåQŒæˆ‘们的工程师习惯于吝啬地找两个函数打印日志、打包部¾|²ä¸€æŠŠã€æ²¡çœ‹å‡ºæ¥ã€å†æ‰‘Ö‡ ä¸ªå‡½æ•°æ‰“印、再部çÖv、等着现象重现再观察ã€?#8230;…åQŒä¸€æ¥äºŒåŽÀL—¶é—´æµé€ï¼Œé—²åº­ä¿¡æ­¥åQŒä»Žå®¢æœçŸ¥é“的小事故变成了全国皆知的大事故ã€?/div> <div>所以,再强调一遍:<strong>在你的调用链条上åQŒé€å±‚调用的函数入口和出口都打印详¾l†æ—¥å¿—,不怕多只怕少åQŒç„¶åŽéƒ¨¾|ÔŒ¼Œ½{‰å¾…现象重现åQŒæ¯•其功于一役!</strong></div> <div> </div> <div> <div><strong><span style="color: #0000ff; font-size: medium;">我们要记录什么?</span></strong></div> <div>1åQ‰å®ŒæˆæŸ™åÒŽ“ä½œæ‰€éœ€çš„æ—¶é—?/div> </div> <div> <p>通过它可以跟ítªäؓ什么系¾lŸå“åº”变慢或者太å¿?/p> <ul><li>处理完一个incoming request所耗费的时é—ß_¼Œ¾_„¡¡®åˆ°æ¯«¿U?/li><li>执行数据库查询的旉™—´</li><li>从磁盘或者存储介质获取数据的旉™—´</li><li>½{‰ç­‰</li></ul> </div> <div>2åQ‰å¼‚常和堆栈跟踪</div> <div> </div> <div>3åQ‰Sessions</div> <div>知道一个问题是ç”Þp°å¼•è“v的非帔R‡è¦ï¼Œå› æ­¤åœ¨æ—¥å¿—中使用会话标识½W¦å°±å˜å¾—必不可少。它可以½Ž€å•到是一ä¸?IP 地址或者是一个更复杂çš?UUIDåQŒåªè¦èƒ½åŒºåˆ†ä¸åŒçš„请求者就­‘›_¤Ÿã€?/div> <div> </div> <div>4åQ‰ç‰ˆæœ¬å·</div> <div> </div> <div><strong>#工具</strong></div> <div><strong><span style="color: #0000ff; font-size: medium;">推荐的Java Logging框架</span></strong></div> <div>1åQ‰log4jåQšæˆ‘ä»¬çš„é…ç½®æ˜¯ï¼Œlog4j.appender.CONSOLE.layout.ConversionPattern= [%-d{yyyy-MM-dd HH\:mm\:ss.SSS}] [%p] [%c] [%m]%nåQ?p是日志优先çñ”åQ?c是类目名åQ?m是输å‡ÞZ¿¡æ¯ï¼Œ%n是回车换行符ã€?/div> <div>2åQ‰logbackåQšlog4j创徏人Ceki Gülcü后箋推出了SLF4J+logback。SLF4J(Simple Logging Facade for Java)ä½œäØ“commons-logging的替代,为各¿Ulogging APIs提供了一个简单的¾lŸä¸€æŽ¥å£åQŒä‹É得最¾lˆç”¨æˆ¯‚ƒ½å¤Ÿåœ¨éƒ¨çÖv的时候配¾|®æ‰€å¸Œæœ›çš„logging APIs的实现。logback胜在性能åQŒæ®¿U?#8220;某些关键操作åQŒæ¯”如判定是否记录一条日志语句的操作åQŒå…¶æ€§èƒ½å¾—到了显著的提高。这个操作在logback 中需è¦?¾U³ç§’åQŒè€Œåœ¨ log4j ä¸­åˆ™éœ€è¦?0¾U?¿U’ã€?logback åˆ›å¾è®°å½•器(loggeråQ‰çš„速度也更快:13毫秒åQŒè€Œåœ¨ log4j ä¸­éœ€è¦?3毫秒。更重要的是åQŒå®ƒèŽ·å–å·²å­˜åœ¨çš„è®°å½•å™¨åªéœ€94¾U³ç§’åQ?è€? log4j éœ€è¦?234¾U³ç§’åQŒæ—¶é—´å‡ž®‘到äº?/23。跟java.util.logging(JUL)相比性能提高也是显著çš?#8221;ã€?/div> <div> </div> <div><strong>#配置</strong></div> <div><strong><span style="color: #0000ff; font-size: medium;">不要随便从网上找一个log4j的配¾|®æ–‡ä»Óž¼Œè¯ïL¡®è®¤ä½ ç†è§£æ¯ä¸€ä¸ªé…¾|®é¡¹</span></strong></div> <div>我们既然输出日志åQŒè‡ªç„¶æœŸæœ›åœ¨é¢å¯¹“<strong>˜q™ä¸ªé—®é¢˜æ˜¯å¦ä»Žè¿‡åŽÕd‡ å¤©å¼€å§‹å‡ºçŽŽÍ¼Ÿ</strong>”˜q™æ ·çš„疑问时åQŒä¸è‡³äºŽå‘现你的rollingPolicy错误讄¡½®å¯ÆD‡´åªèƒ½çœ‹åˆ°æœ€˜q‘几ž®æ—¶çš„æ—¥å¿—,或者日志发生时间没有精¼‹®åˆ°æ¯«ç§’ã€?/div> <div> </div> <div> <div><strong>#理念</strong></div> <div><strong><span style="color: #0000ff; font-size: medium;">可用grep抽取的日志:独立的行åQ?/span></strong></div> <div>我们æ€ÀL˜¯å¸Œæœ›èƒ½ç”¨grep处理日志文äšg。这意味着åQ?strong>一个日志条目永˜qœä¸åº”该跨多行,除非你是堆栈打印</strong>ã€?/div> </div> <div>我们会用grep问日志什么问题呢åQŸå¦‚åQ?/div> <div> <ul><li>用手机号13910******下单的顾客最˜q‘三天内都来自于哪些IPåQ?/li><li>‹¹è§ˆåœ°å€æ˜?***?from=kfapi的顾客,但referral却是搜烦引擎域名åQŒæœ€˜q‘三天有多少‹Æ¡ï¼Ÿ</li><li>最˜q‘一周内åQŒè®¢å•中心执行的所有事务,耗时最长的一‹Æ¡æ˜¯å¤šé•¿æ—‰™—´åQ?/li><li>××××的接口是否真的于18:00发送了一个请求,我们收到的参数是什么?</li></ul> </div> <div>¼‹®ä¿ä½ çš„æ—¥å¿—能回½{”è¿™æ ïLš„问题ã€?/div> <div> </div> <div><strong><span style="color: #0000ff; font-size: medium;">不同å…Ïx³¨é¢†åŸŸå†™ä¸åŒçš„æ—¥å¿—æ–‡äšg</span></strong></div> <div>当访问和调用极其频繁åQŒæœ‰æ—¶å€™ä½ ä¼šå‘现把你的工程里什么信息都打印åˆîC¸€ä¸ªæ—¥å¿—文仉™‡ŒåQŒä¼šè®©ä½ çœ‹å¾—头昏脑胀ã€?/div> <div>最½Ž€å•çš„½Cø™Œƒž®±æ˜¯Apache的访问日志和错误日志是分开的ã€?/div> <div>同样åQŒä½ ä¹Ÿå¯ä»¥æŠŠæ›´åŠ å®‰é™çš„äº‹ä»Óž¼ˆå¶å°”出现åQ‰ä¸Žæ›´åŠ å–§é—¹çš„äº‹ä»¶åˆ†å¼€å­˜å‚¨ã€?/div> <div>如,对外的开攑Öã^台可以打åîC¸‰¿Uæ—¥å¿—æ–‡ä»Óž¼šconnection logåQˆå¾ç«‹é“¾æŽ¥å’Œå…³é—­é“¾æŽ¥åQŒé™„带接入参敎ͼ‰åQŒmessage logåQˆå†…部调用链åQ‰ï¼Œstacktrace logåQˆå¼‚常的堆栈打印åQ‰ã€?/div> <div> </div> <div><strong>#具体实现</strong></div> <div> <div><strong><span style="color: #0000ff; font-size: medium;">臛_°‘¾_„¡¡®åˆ°æ¯«¿U?/span></strong></div> <div>日志必须包含旉™—´æˆ»I¼Œ¾_„¡¡®åˆ°è‡³ž®‘毫¿U’çñ”ã€?/div> </div> <div>如果只是记录到秒¾U§ï¼Œæˆ‘们曾明知代码因¾~ÞZ¹òq¶å‘控制而äñ”生BUGåQŒå´åªèƒ½éƒé—·åœ°çœ‹ç€¾_„¡¡®åˆ°ç§’¾U§çš„æ—¥å¿—ã€?/div> <div>对Java来说åQŒæœ€å¥½é…¾|®äØ“åQ?span style="font-family: tahoma;">yyyy-MM-dd/HH:mm:ss<span style="background-color: yellow; color: #ff0000;">.SSS</span>ã€?/span></div> <div> </div> <div> <div><strong><span style="color: #0000ff; font-size: medium;">请尽可能打印明确的会话标è¯?/span></strong></div> <div>日志条目里打åîC¸€ä¸ªä¼šè¯æ ‡è¯†ï¼ˆA certain session identifieråQ‰ï¼Œå½“有许多òq¶å‘è¯äh±‚打过来时åQŒä½ ž®Þpƒ½åŸÞZºŽæ­¤å­—ŒDµè¿‡æ»?client 了。比如,我们日志会补充打åîC¸€ä¸ªæµè§ˆå™¨ cookies 里种下的 UUID ã€?/div> </div> <div> </div> <div><strong><span style="color: #0000ff; font-size: medium;">log4jçš„isDebugEnabled判断</span></strong></div> <div>如果打印信息是常量字½W¦ä¸²æˆ–简单字½W¦ä¸²æ‹¼æŽ¥åQŒé‚£ä¹ˆä¸éœ€è¦if ( log.isDebugEnabled() )ã€?/div> <div>如果你拼装的动作比较耗资源,è¯ïL”¨if ( log.isDebugEnabled() )ã€?/div> <div> </div> <div> <div><strong><span style="color: #0000ff; font-size: medium;">如有可能åQŒè¯·ž®†æ€§èƒ½æ•°æ®æ ‡å‡†åŒ–输å‡?/span></strong></div> <div>˜q™æ ·æ›´æ–¹ä¾¿grep或hadoop做性能数据抽取和挖掘,从而能很轻村֜°è½¬æ¢ä¸ºå›¾å½¢ç›‘控ã€?/div> </div> <div>比如åQŒè®¢å•中心的性能数据格式为:<strong>树枝标志 å½“前节点起始旉™—´ [当前节点持箋旉™—´, 当前节点自èín消耗时é—? 在父节点中所占的旉™—´æ¯”例]</strong></div> <div> </div> <div> <div><strong><span style="color: #0000ff; font-size: medium;">哪些位置需要部¾|²æ€§èƒ½‹‚€‹¹‹ç‚¹ </span></strong></div> <div>åQ?åQ‰è®¿é—®æ•°æ®åº“çš„dao层;</div> <div>åQ?åQ‰è®¿é—®å¤–部资源的ext层;</div> <div>åQ?åQ‰è®¿é—®mq的方法;</div> <div>åQ?åQ‰ç­‰½{‰ï¼Œä¸€åˆ‡ä¸åœ¨ä½ è‡ªå·±è´Ÿè´£çš„å·¥½E‹æŽŒæ¡çš„部分åQˆå¤–部)åQŒæˆ–ä¸€åˆ‡ä½ è®¤äØ“è‡ªå·±å·¥ç¨‹çš„æ€§èƒ½å±é™©ç‚¹ï¼Œéƒ½éœ€è¦åŠ å…¥æ€§èƒ½ç›‘æŽ§æ—¥å¿—ã€?/div> </div> <div> </div> <div> </div> <div><strong>#Sample</strong></div> <div> <div><span style="color: #0000ff; font-size: medium;"><strong>一个好的启动日å¿?/strong></span></div> </div> <div><a target="_blank"><img style="width: 709px;" src="http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard%20-013%20%E5%89%AF%E6%9C%AC.png" alt="http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard%20-013%20%E5%89%AF%E6%9C%AC.png" /></a></div> <div>æ‰“å°äº†åº”ç”¨çš„ç‰ˆæœ¬åøP¼Œå®¢æˆ·ç«¯çš„会话标识åQŒå…³é”®æ­¥éª¤çš„æ‰§è¡Œæ—‰™•¿ã€?/div> <div> </div> <div><strong style="color: #0000ff; font-size: medium;">一个好的堆栈跟ítªæ—¥å¿?/strong></div> <div><a target="_blank"><img style="width: 709px;" src="http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard%20-%20014%E5%89%AF%E6%9C%AC.png" alt="http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard%20-%20014%E5%89%AF%E6%9C%AC.png" /></a></div></div><br /><br /><div>本文首发äº?a target="_blank">旁观è€?郑昀</a>çš?a target="_blank">55最佛_®žè·ëг»åˆ?/a>åQŒé“¾æŽ¥ï¼š<a target="_blank">http://www.cnblogs.com/zhengyun_ustc/archive/2012/12/15/logging_bp.html</a></div><img src ="http://www.aygfsteel.com/zhangwei217245/aggbug/409787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhangwei217245/" target="_blank">X-Spirit</a> 2011-02-12 19:55 <a href="http://www.aygfsteel.com/zhangwei217245/archive/2011/02/12/409787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆäº”、你有我有全都有—â€?ThreadLocal如何解决òq¶å‘安全性?åQ‰ã€æ›´æ–°é‡è¦è¡¥ç–‘ã€?/title><link>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/317651.html</link><dc:creator>X-Spirit</dc:creator><author>X-Spirit</author><pubDate>Sat, 24 Apr 2010 05:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/317651.html</guid><wfw:comment>http://www.aygfsteel.com/zhangwei217245/comments/317651.html</wfw:comment><comments>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/317651.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhangwei217245/comments/commentRss/317651.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhangwei217245/services/trackbacks/317651.html</trackback:ping><description><![CDATA[     摘要: 前面我们介绍了Java当中多个¾U¿ç¨‹æŠ¢å ä¸€ä¸ªå…±äº«èµ„源的问题。但不论是同步还是重入锁åQŒéƒ½ä¸èƒ½å®žå®žåœ¨åœ¨çš„解册™µ„源紧¾~ºçš„æƒ…况åQŒè¿™äº›æ–¹æ¡ˆåªæ˜¯é åˆ¶å®šè§„则来约束线½E‹çš„è¡ŒäØ“åQŒè®©å®ƒä»¬ä¸å†æ‹¼å‘½çš„争抢,而不是真正从实质上解决他们对资源的需求ã€? 在JDK 1.2当中åQŒå¼•入了java.lang.ThreadLocal。它为我们提供了一¿Uå…¨æ–°çš„æ€èµ\来解决线½E‹åƈ发的问题。但是他的名字难免让我们望文生义åQšæœ¬åœ°çº¿½E‹ï¼Ÿ ...  <a href='http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/317651.html'>阅读全文</a><img src ="http://www.aygfsteel.com/zhangwei217245/aggbug/317651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhangwei217245/" target="_blank">X-Spirit</a> 2010-04-24 13:36 <a href="http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/317651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆå››ã€åä½œï¼Œäº’斥下的协作——Java多线½E‹åä½œï¼ˆwait、notify、notifyAllåQ‰ï¼‰http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/316526.htmlX-SpiritX-SpiritSat, 24 Apr 2010 05:35:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/316526.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/316526.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/316526.html#Feedback9http://www.aygfsteel.com/zhangwei217245/comments/commentRss/316526.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/316526.html阅读全文

X-Spirit 2010-04-24 13:35 发表评论
]]>
Java 多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆä¸‰ã€Lock来了åQŒå¤§å®‰™ƒ½è®©å¼€ã€?. Fair or Unfair? It is a question...】)http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315619.htmlX-SpiritX-SpiritSat, 24 Apr 2010 05:34:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315619.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/315619.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315619.html#Feedback4http://www.aygfsteel.com/zhangwei217245/comments/commentRss/315619.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/315619.html阅读全文

X-Spirit 2010-04-24 13:34 发表评论
]]>
Java 多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆä¸‰ã€Lock来了åQŒå¤§å®‰™ƒ½è®©å¼€ã€?. 认识重入锁】)http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315526.htmlX-SpiritX-SpiritSat, 24 Apr 2010 05:33:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315526.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/315526.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315526.html#Feedback9http://www.aygfsteel.com/zhangwei217245/comments/commentRss/315526.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/315526.html阅读全文

X-Spirit 2010-04-24 13:33 发表评论
]]>
Java 多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆäºŒã€ç»™æˆ‘一把锁åQŒæˆ‘能创造一个规矩)http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315283.htmlX-SpiritX-SpiritSat, 24 Apr 2010 05:32:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315283.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/315283.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315283.html#Feedback9http://www.aygfsteel.com/zhangwei217245/comments/commentRss/315283.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/315283.html阅读全文

X-Spirit 2010-04-24 13:32 发表评论
]]>
Java多线½E‹åŒæ­¥é—®é¢˜çš„æŽ¢ç©¶åQˆä¸€ã€çº¿½E‹çš„先来后到åQ?/title><link>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315080.html</link><dc:creator>X-Spirit</dc:creator><author>X-Spirit</author><pubDate>Sat, 24 Apr 2010 05:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315080.html</guid><wfw:comment>http://www.aygfsteel.com/zhangwei217245/comments/315080.html</wfw:comment><comments>http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315080.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhangwei217245/comments/commentRss/315080.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhangwei217245/services/trackbacks/315080.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315080.html'>阅读全文</a><img src ="http://www.aygfsteel.com/zhangwei217245/aggbug/315080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhangwei217245/" target="_blank">X-Spirit</a> 2010-04-24 13:31 <a href="http://www.aygfsteel.com/zhangwei217245/archive/2010/04/24/315080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Effective】JVM 调优参数说明http://www.aygfsteel.com/zhangwei217245/archive/2010/03/16/411107.htmlX-SpiritX-SpiritTue, 16 Mar 2010 14:42:00 GMThttp://www.aygfsteel.com/zhangwei217245/archive/2010/03/16/411107.htmlhttp://www.aygfsteel.com/zhangwei217245/comments/411107.htmlhttp://www.aygfsteel.com/zhangwei217245/archive/2010/03/16/411107.html#Feedback0http://www.aygfsteel.com/zhangwei217245/comments/commentRss/411107.htmlhttp://www.aygfsteel.com/zhangwei217245/services/trackbacks/411107.html å†…部服务参数配置åQ?/div> JAVA_OPTS="-server -XX:+UseParNewGC -Xms1024m -Xmx2048m -XX:MaxNewSize=128m -XX:NewSize=128m -XX:PermSize=96m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:CMSInitiatingOccupancyFraction=1 -XX:+CMSIncrementalMode -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=20000 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0  -XX:CMSIncrementalDutyCycleMin=10 -XX:CMSIncrementalDutyCycle=30 -XX:CMSMarkStackSize=8M -XX:CMSMarkStackSizeMax=32M"

前端应用参数配置åQ?/span>
 JAVA_OPTS="-server  -Xmx4096m -Xms4096m -Xmn480m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:CMSFullGCsBeforeCompaction=0 
-XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 
-Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0" 

参数说明åQ?/p>

-Xmx1280måQšè®¾¾|®JVMæœ€å¤§å¯ç”¨å†…å­˜äØ“1280mã€‚æœ€å¤§å¯è®¾äØ“3550m。具体应用可适当调整ã€?/p>

-Xms1280måQšè®¾¾|®JVM初始内存ä¸?280m。此值可以设¾|®ä¸Ž-Xmx相同åQŒä»¥é¿å…æ¯æ¬¡åžƒåœ¾å›žæ”¶å®ŒæˆåŽJVM重新分配内存ã€?/p>

-Xmn480måQšè®¾¾|®å¹´è½ÖM»£å¤§å°ä¸?80m。整个堆大小=òq´è½»ä»£å¤§ž®?+ òq´è€ä»£å¤§å° + 持久代大ž®ã€‚持久代一般固定大ž®äØ“64måQŒæ‰€ä»¥å¢žå¤§å¹´è½ÖM»£åŽï¼Œž®†ä¼šå‡å°òq´è€ä»£å¤§å°ã€‚此值对¾pȝ»Ÿæ€§èƒ½å½±å“è¾ƒå¤§åQŒSun官方推荐配置为整个堆çš?/8ã€?/p>

-Xss256kåQšè®¾¾|®æ¯ä¸ªçº¿½E‹çš„堆栈大小。JDK5.0以后每个¾U¿ç¨‹å †æ ˆå¤§å°ä¸?MåQŒä»¥å‰æ¯ä¸ªçº¿½E‹å †æ ˆå¤§ž®äØ“256K。更具应用的¾U¿ç¨‹æ‰€éœ€å†…存大小˜q›è¡Œè°ƒæ•´ã€‚在相同物理内存下,减小˜q™ä¸ªå€ÆDƒ½ç”Ÿæˆæ›´å¤šçš„线½E‹ã€‚但是操作系¾lŸå¯¹ä¸€ä¸ªè¿›½E‹å†…的线½E‹æ•°˜q˜æ˜¯æœ‰é™åˆ¶çš„åQŒä¸èƒ½æ— é™ç”Ÿæˆï¼Œ¾léªŒå€¼åœ¨3000~5000左右ã€?/p>

-XX:PermSize=64måQšæŒ‡å®?jvm ä¸?Perm Generation 的最ž®å€¹{€?˜q™ä¸ªå‚数需要看你的实际情况。可以通过jmap 命ä×o看看到底需要多ž®‘ã€?/p>

-XX:MaxPermSize=128måQšæŒ‡å®?Perm Generation 的最大å€?/p>

-XX:+UseConcMarkSweepGCåQ?/strong>讄¡½®òq¶å‘攉™›†å™?/p>

-XX:ParallelGCThreads=8åQ?/strong>配置òq¶è¡Œæ”‰™›†å™¨çš„¾U¿ç¨‹æ•ŽÍ¼Œå»I¼šåŒæ—¶å¤šå°‘个线½E‹ä¸€èµ¯‚¿›è¡Œåžƒåœ‘Ö›žæ”¶ã€‚此值最好配¾|®ä¸Žå¤„理器数目相½{‰ã€?/p>

-XX:CMSFullGCsBeforeCompaction=0åQ?/strong>ç”׃ºŽòq¶å‘攉™›†å™¨ä¸å¯¹å†…存空间进行压¾~©ã€æ•´ç†ï¼Œæ‰€ä»¥è¿è¡Œä¸€ŒD‰|—¶é—´ä»¥åŽä¼šäº§ç”Ÿ“¼„Žç‰‡”åQŒä‹Éå¾—è¿è¡Œæ•ˆçŽ‡é™ä½Žã€‚æ­¤å€ÆD®¾¾|®è¿è¡Œå¤šž®‘次GC以后对内存空间进行压¾~©ã€æ•´ç†ã€?/p>

-XX:+UseCMSCompactAtFullCollectionåQ?/strong>打开对年老代的压¾~©ã€‚可能会影响性能åQŒä½†æ˜¯å¯ä»¥æ¶ˆé™¤ç¢Žç‰‡ã€?/p>

-XX:SurvivorRatio=8åQ?/strong>每个survivor space å’?eden之间的比例ã€?/p>

-XX:MaxTenuringThreshold=7åQ?/strong>讄¡½®åžƒåœ¾æœ€å¤§å¹´é¾„。如果设¾|®äØ“0的话åQŒåˆ™òq´è½»ä»£å¯¹è±¡ä¸¾lè¿‡Survivor区,直接˜q›å…¥òq´è€ä»£ã€‚对于年老代比较多的应用åQŒå¯ä»¥æé«˜æ•ˆçŽ‡ã€‚å¦‚æžœå°†æ­¤å€ÆD®¾¾|®äؓ一个较大å€û|¼Œåˆ™å¹´è½ÖM»£å¯¹è±¡ä¼šåœ¨SurvivoråŒø™¿›è¡Œå¤š‹Æ¡å¤åˆÓž¼Œ˜q™æ ·å¯ä»¥å¢žåŠ å¯¹è±¡å†å¹´è½ÖM»£çš„å­˜‹zÀL—¶é—ß_¼Œå¢žåŠ åœ¨å¹´è½ÖM»£åŒ™¢«å›žæ”¶çš„æ¦‚率ã€?/p>

-XX:GCTimeRatio=19åQ?/strong>讄¡½®åžƒåœ¾å›žæ”¶æ—‰™—´å ç¨‹åºè¿è¡Œæ—¶é—´çš„癑ֈ†æ¯”,公式ä¸?/(1+n)ã€?/p>

-XnoclassgcåQ?/strong>¼›ç”¨¾cÕdžƒåœ‘Ö›žæ”Óž¼Œæ€§èƒ½ä¼šæœ‰ä¸€å®šæé«˜ã€?/p>

-XX:+DisableExplicitGCåQ?/strong>当此参数打开æ—Óž¼Œåœ¨ç¨‹åºä¸­è°ƒç”¨System.gc()ž®†ä¼šä¸è“v作用。默认是offã€?/p>

-XX:+UseParNewGCåQ?/strong>讄¡½®òq´è½»ä»£äØ“òq¶è¡Œæ”‰™›†ã€‚可与CMS攉™›†åŒæ—¶ä½¿ç”¨ã€?/p>

-XX:-CMSParallelRemarkEnabledåQ?/strong>在ä‹Éç”?UseParNewGC 的情况下 , ž®½é‡å‡å°‘ mark 的时间ã€?/p>

-XX:CMSInitiatingOccupancyFraction=70åQ?/strong>指示åœ?old generation 在ä‹É用了 70% 的比例后 , 启动 concurrent collectorã€?/p>

-XX:SoftRefLRUPolicyMSPerMB=0åQ?/strong>每兆堆空闲空间中SoftReference的存‹zÀL—¶é—´ã€?/p> @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÇØ°²ÏØ| ÇìÔªÏØ| Íå×ÐÇø| Ç­¶«| µÂ±£ÏØ| °²ÐÂÏØ| ÄôÀ­Ä¾ÏØ| ƽ¶ÈÊÐ| ´ëÃÀÏØ| ʯÆÁÏØ| ´ó³§| ÑÓÇìÏØ| ɳÌïÇø| Çຣʡ| ¿â³µÏØ| ÄÚÇðÏØ| Õò°²ÏØ| ×ϽðÏØ| ÔÀÑôÊÐ| ¾°µÂÕòÊÐ| ʯÊ×ÊÐ| ËÕÄáÌØ×óÆì| ½­¶¼ÊÐ| ²ßÀÕÏØ| ÑÎÔ´ÏØ| ¼ÎÐËÊÐ| Ǩ°²ÊÐ| ¶¼½­ÑßÊÐ| À´·ïÏØ| ±±íÕÇø| ¶«·½ÊÐ| ÆÕÍÓÇø| ÄÏÕÄÏØ| ËÉ×ÌÊÐ| ³üÖÝÊÐ| Î÷ÇàÇø| ½ðÉ³ÏØ| ÎÚÉóÆì| ÄþºÓÏØ| Ë«ÁÉÊÐ| ¿Í·þ|