1. 程式人生 > >如何在Linux下找出大量佔用CPU的java執行緒

如何在Linux下找出大量佔用CPU的java執行緒

首先獲取jvm的程序pid。

[[email protected] ~]$ jps -v

26048 Server -Xms256m -Xmx2048m -Dweblogic.Name=bi_server1 -Djava.security.policy=/home/biee02/oracle/Middleware/Oracle_Home/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Dweblogic.system.BootIdentityFile=/home/biee02/oracle/Middleware/Oracle_Home/user_projects/domains/bi/servers/bi_server1/data/nodemanager/boot.properties -Dweblogic.nodemanager.ServiceEnabled=true -Dweblo

得到pid為26048

然後使用top命令檢視26048中的執行緒資訊

[[email protected] ~]$ top -H -p 26048

可以看到執行緒id為26300的佔用了大量的cpu。

將26300轉化為16進位制

[[email protected] ~]$ printf "%x \n" 26300
66bc

獲取java虛擬機器的Thread dump

[[email protected] ~]$ jcmd 26048 Thread.print > threaddump.txt    

jcmd在jdk7及以上才可用

注:也可以使用jstack -l 26048 > threaddump.txt

在threaddump.txt中搜索nid=0x66bc,即是id為26300的執行緒dump資訊。如下所示:

"[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'" #99 daemon prio=5 os_prio=0 tid=0x00007f65514e4000 nid=0x66bc runnable [0x00007f647eeca000]
   java.lang.Thread.State: RUNNABLE
        at com.munzandmore.stuckthread.LongRunningEJB.threadCalc(LongRunningEJB.java:40)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        a

有了這個資訊之後,就可以去檢視LongRunningEJB.java第40行的原始碼,從而定位問題。

相關推薦

如何在Linux大量佔用CPU的java執行

首先獲取jvm的程序pid。 [[email protected] ~]$ jps -v 26048 Server -Xms256m -Xmx2048m -Dweblogic.Name=bi_server1 -Djava.security.policy=/home

Linux吃記憶體的方法總結

開發十年,就只剩下這套架構體系了! >>>   

Linux C 網路程式設計之 多執行通訊 例項

簡單示例,有不對的地方,歡迎指點。 伺服器端 /* ============================================================================ Name : sockThreadServer

Linux佔用大量CPU的Java程式碼(將Java執行Linux PID進行關聯)

英文原文:http://blogs.manageengine.com/appmanager/2011/02/09/identify-java-code-consuming-high-cpu-in-linux-linking-jvm-thread-and-linux-pid

Linuxcpu資源佔用最多的那個執行

在這裡對linux下、sun(oracle) JDK的執行緒資源佔用問題的查詢步驟做一個小結;linux環境下,當發現java程序佔用CPU資源很高,且又要想更進一步查出哪一個java執行緒佔用了CPU資源時,按照以下步驟進行查詢: 先用top命令找出佔用資源厲害的java

java生產環境佔用CUP較多資源執行 相對定位先用top命令佔用資源厲害的java程序id

在這裡對linux下、sun(oracle) JDK的執行緒資源佔用問題的查詢步驟做一個小結;linux環境下,當發現java程序佔用CPU資源很高,且又要想更進一步查出哪一個java執行緒佔用了CPU資源時,按照以下步驟進行查詢: 先用top命令找出佔用資源厲害的ja

linux中在當前目錄佔用空間最大的前10大檔案

首先要了解三個常用命令: du : 計算出單個檔案或者資料夾的磁碟空間佔用.sort : 對檔案行或者標準輸出行記錄排序後輸出.head : 輸出檔案內容的前面部分. du: -a:顯示目錄佔用空間的大小,還要顯示其下目錄佔用空間的大小 sort: -n  : 按照字串表

Linux不到so文件的解決辦法

ldconfig -name desktop 末尾 添加 文件搜索 libjson 出現 技術 http://www.cnblogs.com/xudong-bupt/p/3698294.html 如果使用自己手動生成的動態鏈接庫.so文件,但是這個.so文件,沒有加入庫文

linux配置多個tomcat同時執行

在一臺linux下配置多個tomcat同時執行 詳細步驟如下: 1.在/etc/profile檔案下進行修改配置,如果安裝JDK的時候已經配置了JAVA環境變數,則無需再次配置.同時新增兩組CATALINA環境變數如下: 命令:#vi /etc/profile 如下為我的t

linux不到新增的動態庫

可以用ldd檢視你可執行檔案的依賴庫,例如要檢視test這個應用的依賴庫 ldd test 1. 使用export匯出LD_LIBRARY_PATH加入你so的路徑。 在命令列中輸入: export LD_LIBRARY_PATH=$LD_LIBRARY_PAT

linux使用top命令檢視系統執行狀態和程序執行狀態

linux下top命令檢視系統執行狀態和程序執行狀態 在linux下可以通過top命令來查系統執行狀態和程序執行狀態,通過man檢視top手冊,top的解釋是display Linux tasks,以前看到過一個另外的解釋display top CPU proc

linux解決埠被佔用問題

轉發:https://www.cnblogs.com/zxlovenet/p/4571867.html 查詢被佔用的埠: netstat -tln netstat -tln | grep 8080 檢視埠屬於哪個程式 lsof -i :8080 殺掉佔用埠的程序: kil

linuxtomcat埠被佔用的問題

linux,在tomcat的bin目錄下: ./startup.sh 如果關閉tomcat則: ./shutdown.sh 當時以為這樣再開啟tomcat時直接開啟就行了,沒想到伺服器掛掉了,然後檢視日誌發現埠被佔用了,由於對linux命令還是不怎麼熟悉,所以

Linux使用SSH非互動式遠端執行命令指令碼

原創文章,轉載請註明— 作者: 黃文海 出處: http://viscent.iteye.com/http://blog.viscenthuang.info     非互動式在遠端主機上執行命令或者指令碼可以幫助我們快速完成一些任務。比如,在叢集環境中,同時在各個結點上的日

linux不重啟建立正在執行資料庫的從庫

1、備份主庫 mysqldump -uroot -p123456 --routines --single_transaction --master-data=2 --databases test &g

linuxc++學習筆記——c++編譯執行

c++編譯執行 預處理 合併多個單張圖片的txt檔案為一個訓練txt cat *.txt > train.txt 替換檔案中的特定字串(將’80 '替換為’1 ') // find "file"|xargs perl -pi -e 's|old|new|g' fi

MAC OS和Linux的crontab實現定時任務(執行python等指令碼)

前言 crontab命令常見於Unix和類Unix的作業系統中,用於設定週期性被執行的指令。該命令從標準輸入裝置讀指令,並將其存入到“crontab”檔案中,以供之後讀取和執行。 使用方法 1.crontab -e 編輯自定義自己的任務,儲存退出後自動新增到cron

window與linux專案部署-linux不到檔案路徑

場景   專案在windows下訪問正常,linux下拋異常,找不到檔案。 分析   如果訪問的專案檔案是這樣的:abc/bcd/aa.jpg ,而系統中訪問檔案的路徑是:abc/Bcd/aa

轉載-linux釋放被cache佔用的實體記憶體

當你在Linux下頻繁存取檔案後,實體記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題. 先來說說free命令 [[email

linux如何解除被佔用的埠號

在本例中,假設8080埠被佔用。   1.檢視8080埠是否被佔用: netstat -anp | grep 8080輸出結果:tcp        0      0 :::8080