<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()
              返回表示該堆棧跟蹤元素的字符串。
     
    主站蜘蛛池模板: 亚洲女同成av人片在线观看| 亚洲国产美国国产综合一区二区| 一区二区三区精品高清视频免费在线播放 | 久久国产精品免费视频| 亚洲男人天堂2018av| 中文字幕亚洲不卡在线亚瑟| 91香蕉国产线在线观看免费| 337p日本欧洲亚洲大胆人人| 亚洲精品成人无码中文毛片不卡| 无人在线观看免费高清视频| 特级毛片aaaa免费观看| 亚洲乱码一二三四五六区| 亚洲国产精品毛片av不卡在线| 中文字幕免费视频| 色噜噜狠狠色综合免费视频| 亚洲综合成人网在线观看| 免费国产成人高清在线观看麻豆| 久久久久免费看成人影片| 美国毛片亚洲社区在线观看| 精品日韩亚洲AV无码一区二区三区 | 亚洲免费无码在线| 精品国产成人亚洲午夜福利| 国产亚洲精品观看91在线| 在线观看人成网站深夜免费| 日本免费人成视频在线观看| 日韩在线观看视频免费| 亚洲精品福利你懂| 久久久久久a亚洲欧洲AV| 亚洲精品无码激情AV| 女人让男人免费桶爽30分钟| 最近免费2019中文字幕大全| 国产vA免费精品高清在线观看| 亚洲第一综合天堂另类专| 亚洲麻豆精品果冻传媒| 亚洲中文字幕无码一区| 亚洲成人影院在线观看| 最新69国产成人精品免费视频动漫| 91短视频免费在线观看| 黄色网址在线免费| 成人久久久观看免费毛片| 毛片亚洲AV无码精品国产午夜|