我看看現有的問題獲得線程ID像java-thread-id-and-stack-trace。jstack輸出 - 得到tid的java Thread.getId
但我無法弄清楚看起來很簡單的事情。我想製作一個JSP工具來停止Java中的線程。
我知道這是一個不錯的主意,但我們需要它,因爲我們的環境中無法使用JConsole,導致JBoss的硬化。
我的問題是,採取抽樣jstack輸出:
Event Batch Processing (Spring UAA/1.0.2)" daemon prio=10 tid=0x0000000041e27800 nid=0x363b waiting on condition [0x00007f9a89267000]
從這哪個ID將是thread.getId()
爲java.lang.Thread
定義?這條線上的最後一個標記是什麼[0x00007f9a89267000]
?- 我該如何轉換(Java代碼會超級)
hex
到Javalong
? 你能告訴我爲什麼這不起作用 - >我從一個懸掛在永無止境的循環中的線程的jstack中取了一個十六進制
tid=
。那麼我這樣做:Thread thrd = null; String thrdId =request.getParameter("thrd"); if(thrdId != null){ out.print("thread " + thrdId + " :"); out.flush(); Map<Thread,StackTraceElement[]> map = Thread.getAllStackTraces(); Set tt = map.keySet(); Iterator<Thread> ti = tt.iterator(); try{ long idFind = Long.parseLong(thrdId); out.print("<br> idFind thread |" + idFind + "| <br>"); boolean found = false; while(ti.hasNext()){ thrd = ti.next(); if(thrd.getId() == idFind){ out.print("<br> stopping thread " + thrd + " <br>"); out.flush(); thrd.stop(); out.print("<br>stopped "); found = true; break; } } if(!found){ out.print("<br>not found "); } }catch(Exception e){ out.println("<br>err " + e + "<br>"); } }
該輸出沒有被發現。該輸入參數是TID - 在Windows 7粘貼計算,編程模式(十六進制),然後單擊十二月
UPDATE:
在我的測試代碼時,我作出無限循環一個JSP,輸出炭每隔幾10000S迭代 - 然後做一個jstack,得到:
"http-0.0.0.0-8181-4" daemon prio=6 tid=0x000000000d4eb000 nid=0x2f58 waiting on condition [0x0000000010fee000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
...(stack trace)
at org.apache.jsp.t.testing.loop_jsp._jspService(loop_jsp.java
...more stack trace...
我跑jstack了幾次,每次都獲得此項。
但是,當我運行JSP螺紋id = 000000000d4eb000
,它不能找到它,因爲應用程序容器名稱線程唯一我能找到的線索,當我打印:
out.print("" + cnt + " \"" + thrd.getName() + "\"| id :" + thrd.getId() + "| hex :" + Long.toHexString(thrd.getId()) + "| <br>");
我得到:
93 "http-0.0.0.0-8181-4"| id :1389| hex :56d|
93 is the thread number in my internal counter in the loop.
那麼jstack顯然識別爲0x000000000d4eb000
內部JVM知道爲 1389 hex :56d
?最後將JSP更改爲按名稱搜索並停止線程。幸運的是,線程名稱都是不同的。但是,這是一個錯誤 - 運行Windows,JBoss 4.2,Java 1.6更新32?
'然後我做到了這一點:'如果我們能看到你做了什麼,這將有所幫助。 –
抱歉,剛格式化了問題並添加了代碼。我的無腳本阻止編輯器控件 – tgkprog