2012-04-04 65 views
0

我是Java中的新成員,並且有一個任務來了解爲什麼在一段時間後運行服務器需要佔用100%的CPU。我想我應該看看,這個應用程序中的線程正在做什麼。由於我想停止服務,第5605線程已經啓動。如何控制哪些線程停止或不運行,或運行時間過長?如何控制線程是否停止或運行時間過長?

謝謝。

+1

我想你應該看看Java分析器如http://www.yourkit.com/ – Gray 2012-04-04 12:26:20

+0

看看這個答案我張貼在以前的問題:http://stackoverflow.com/a/ 6868752/425406這將討論如何識別CPU佔用的代碼片段 – Sean 2012-04-04 12:48:30

回答

0

如果您在* nix環境首先嚐試查找進程的ID

  1. 獲取進程ID。 ps -ef | grep「java」
  2. 獲取線程轉儲。 kill -3 processid
  3. 查看服務器日誌有哪些線程,如果有任何「阻塞」線程,那麼他們是罪魁禍首看堆棧跟蹤,它可能會提供一些線索。
+0

被阻塞的線程根本不使用任何CPU。 – 2012-04-04 13:01:30

+0

嘗試將Jconsole附加到進程並查看實際發生的事情http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html – srinik 2012-04-04 15:45:17

0

服務器和客戶端jvms(Java虛擬機)是不同的。客戶的想法基本上是「你會成爲其他男人試圖使用相同資源的人」。服務器思維是「繼續前進,你爲自己獲得了所有的操場」。

相關問題