<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Java代碼觸發生成ThreadDump

    Posted on 2009-11-30 23:13 Gavin.lee 閱讀(588) 評論(0)  編輯  收藏 所屬分類: java SE & EE
    ThreadDump對于JVM診斷和調優是個好東西. 以前, 我們生成ThreadDump, 一般都需要另外連到服務器上的進程管理器才行, 不管是Ctrl+Break還是kill –3, 比較不方便. 有時候, 也許想遠程直接生成并檢查一下服務器的ThreadDump, 這個怎么辦呢? 幸好我們有以下代碼可以做到:
    package yixun.wap.tools;

    import java.util.Map;

    /**  
     * 使用 Java 遠程代碼生成 ThreadDump. 適用于 JDK 1.5+.  
     * 參考: {
    @link ThreadgetStackTrace()}  
     * {
    @link ThrowablegetStackTrace()}  
     * 
    @see StackTraceElement  
     
    */

    public class ThreadDumpBuilder {
        
    /**  
         * 生成并返回 Thread Dump.  
         * 
    @return  
         
    */

        
    public String build() {
            StringBuilder output 
    = new StringBuilder(1000);
            
    for (Map.Entry stackTrace : Thread.getAllStackTraces().entrySet()) {
                appendThreadStackTrace(output, (Thread) stackTrace.getKey(),
                        (StackTraceElement[]) stackTrace.getValue());
            }

            
    return output.toString();
        }


        
    /**  
         * 處理并輸出堆棧信息.  
         * 
    @param output  
         *            輸出內容  
         * 
    @param thread  
         *            線程  
         * 
    @param stack  
         *            線程堆棧  
         
    */

        
    private void appendThreadStackTrace(StringBuilder output, Thread thread,
                StackTraceElement[] stack) 
    {
            
    // 忽略當前線程的堆棧信息   
            if (thread.equals(Thread.currentThread())) {
                
    return;
            }


            output.append(thread).append(
    "<br/>");
            
    for (StackTraceElement element : stack) {
                output.append(
    "\t").append(element).append("\n<br/>");
            }

        }


    }


    然后在一個JSP里或者Servlet中任意調用即可:
    
    <%=new ThreadDumpBuilder().build() %>
    
    ===== END OF THREAD DUMP ===============
    
    參考資料:
    1. Atlassian Confluence 3.0 管理控制臺
    2. JDK的DEMO
    jdk1.5.0\demo\management\FullThreadDump
    原文:http://ajava.org/course/java/13843.html 
    java.lang
    類 StackTraceElement 方法:
     boolean  equals(Object obj)
              如果指定的對象是另一個 StackTraceElement 實例,并且該對象表示的執行點與該實例的相同,則返回 ture。
     String  getClassName()
              返回類的完全限定名,該類包含由該堆棧跟蹤元素所表示的執行點。
     String  getFileName()
              返回源文件名,該文件包含由該堆棧跟蹤元素所表示的執行點。
     int  getLineNumber()
              返回源行的行號,該行包含由該堆棧該跟蹤元素所表示的執行點。
     String  getMethodName()
              返回方法名,此方法包含由該堆棧跟蹤元素所表示的執行點。
     int  hashCode()
              返回此堆棧跟蹤元素的哈希碼值。
     boolean  isNativeMethod()
              如果包含由該堆棧跟蹤元素所表示的執行點的方法是一個本機方法,則返回 true。
     String  toString()
              返回表示該堆棧跟蹤元素的字符串。
     
    主站蜘蛛池模板: 免费夜色污私人影院网站| 亚欧免费无码aⅴ在线观看| 免费精品国产自产拍在| 亚洲啪啪AV无码片| 国产成人va亚洲电影| 120秒男女动态视频免费| 亚洲中文字幕无码永久在线| 亚洲AV无码国产一区二区三区 | 波多野结衣久久高清免费 | 亚洲神级电影国语版| 一级中文字幕乱码免费| 我想看一级毛片免费的| 亚洲综合色丁香麻豆| 中文精品人人永久免费| 国产国产人免费视频成69大陆| 亚洲AV无码乱码在线观看代蜜桃| a级毛片高清免费视频| 亚洲人成无码www久久久| 国产成人精品日本亚洲语音 | 亚洲黄色中文字幕| 青柠影视在线观看免费| 亚洲免费无码在线| 最新亚洲人成无码网www电影| 97人伦色伦成人免费视频| 久久精品国产亚洲AV高清热| 水蜜桃视频在线观看免费播放高清| 国产a不卡片精品免费观看| 国产精品亚洲精品| 国产精品色拉拉免费看| 亚洲色图.com| 99在线在线视频免费视频观看| 亚洲国产精品一区二区成人片国内 | 亚洲AV无码专区国产乱码不卡| 999久久久免费精品国产| 久久久久亚洲AV无码专区体验| 好紧我太爽了视频免费国产| 亚洲人成人网站色www| 三年片免费高清版| 亚洲韩国精品无码一区二区三区| igao激情在线视频免费| 亚洲熟伦熟女新五十路熟妇|