<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 閱讀(593) 評論(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()
              返回表示該堆棧跟蹤元素的字符串。
     
    主站蜘蛛池模板: 亚洲第一精品福利| 人人狠狠综合久久亚洲88| 亚洲国产最大av| 精品香蕉在线观看免费| 亚洲一区二区影视| 成人奭片免费观看| 亚洲AV第一成肉网| 一本色道久久88亚洲综合| 日韩在线观看免费| 国产亚洲精品不卡在线| APP在线免费观看视频| 久久夜色精品国产嚕嚕亚洲av| 国产午夜无码片免费| 亚洲高清在线视频| jjizz全部免费看片| 亚洲性无码一区二区三区| 国产福利免费观看| 一级全免费视频播放| 久久精品国产亚洲av麻豆| 亚洲毛片在线免费观看| 亚洲狠狠成人综合网| 亚洲JIZZJIZZ中国少妇中文| 久久久WWW免费人成精品| 亚洲成年轻人电影网站www| 国产精品久久免费| 亚洲国产精品无码第一区二区三区| 又大又黄又粗又爽的免费视频 | 日本人的色道免费网站| 亚洲一区在线观看视频| 俄罗斯极品美女毛片免费播放| 在线视频网址免费播放| 亚洲影院在线观看| 日韩免费视频一区| www免费黄色网| 亚洲国产精品免费在线观看| 免费在线观看日韩| 无码av免费一区二区三区| 亚洲AV永久无码天堂影院| 一本色道久久综合亚洲精品| 2021免费日韩视频网| www成人免费视频|