日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java程序cpu占用率高,分析具体线程

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java程序cpu占用率高,分析具体线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?   今天將數據轉發程序移植到LINUX服務器上,啟動程序后,通過PP |grep java 發現程序占用了CPU固定在95%左右,并且一直沒有下降,而是一直保持在這么一個高  度。頓時就慌了,關鍵第一次遇到類似的問題,并且感覺程序應該挺完善的。不應該出現這個問題。

  遇到問題就要進行解決,通過查找資料,借鑒前人經驗,出現占用率這么高的狀態主要原因有:  

    1.程序計算比較密集
   ? ? ? ?2.程序死循

? ? ? ? ? ? ? ? 3.程序邏請求堵塞

? 排查方案:

? ? ? ? ? ?(1). 首先dump出該程序進程的所有線程及其狀

       通過命令:ps | grep java得到該程序的進程pid      

<pre name="code" class="plain">      ourgroup@iZ23gyf9teeZ:/home/zxf$ ps auwx |grep javaourgroup 23912 2.6 5.3 998908 54464 ? Sl 14:45 8:31 java com.thingcom.mainServer.MainServerourgroup 29226 0.7 7.7 1123176 79160 ? Sl Apr27 82:30 java org.huigher.server.Serverourgroup 29783 0.0 0.0 11744 900 pts/0 S+ 20:04 0:00 grep java

     

? ? ? ? ? ? ? ? ?   使用命令jstack PID 重定向輸出CPU占用過高的進程的線程棧。        

       ourgroup@iZ23gyf9teeZ:~/upload/thingcomSrv$ jstack 23912 > 23912.stack

   (2). 使用TOP命令得到實時線程占用量:

       使用top -H -p PID 命令查看對應進程是哪個線程占用CPU過高.

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 23939 ourgroup 20 0 999936 55388 10968 R 0.7 5.5 2:19.62 java 23934 ourgroup 20 0 999936 55388 10968 R 0.3 5.5 2:19.32 java 23937 ourgroup 20 0 999936 55388 10968 R 0.3 5.5 2:19.64 java 23938 ourgroup 20 0 999936 55388 10968 R 0.3 5.5 2:19.63 java 23912 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23915 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.78 java 23917 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.46 java 23918 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23919 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23920 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23921 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.32 java 23922 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.24 java 23923 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23924 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:08.15 java 23926 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23927 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.14 java 23928 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.16 java 23929 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.23 java 23930 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.20 java 23932 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java 23933 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 1:09.98 java 23935 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 1:03.29 java 23936 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.14 java 23940 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 1:02.99 java 29882 ourgroup 20 0 999936 55388 10968 S 0.0 5.5 0:00.00 java

? ? ? ? ? ? ? ? ? ? ?這是我改過程序以后查看的結果,所以占用率不高,可以以PID:23934進行舉例說明,如何查看具體某個進程

? ? ? ? ? (3).??將PID轉換成十六進制: ? ? ? ? ? ? ? ? ? 23934 =0x7d5e

? ? ? ? ?(4) . ?進入最開始導入的32912進程的線程棧文件:23912.stack; 然后通過查找十六進制PID得到具體的某個進程,進行定位


java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at com.thingcom.netgate.NetgateAcceptDispatcherThread.run(NetgateAcceptDispatcherThread.java:38)at java.lang.Thread.run(Thread.java:722)

? ? ? ? ? ? ?通過定位發現原來是我在某個線程中,進入while語句后,判斷語句為false,沒有進行sleep。導致該線程一直占用cpu,所以導致了cpu占用率高的現象,該現象值得注意。
? ??

? ? ? ? ? ? 主要借鑒大牛blog: ? ? ? http://blog.csdn.net/huaishu/article/details/9219141

總結

以上是生活随笔為你收集整理的java程序cpu占用率高,分析具体线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。