導航:首頁 > 程序命令 > javadump命令

javadump命令

發布時間:2022-08-14 23:23:48

linux java mp 怎麼查看

在jdk目錄下的bin目錄裡面有個jmap命令,用jmap -mp可以生成mp文件

② 如何分析java thread mp

thread mp解析
頭部信息
時間,jvm信息

{code}
2011-11-02 19:05:06
Full thread mp Java HotSpot(TM) Server VM (16.3-b01 mixed mode):
{code}
線程info信息塊
{code}
"Checkpointer" daemon prio=10 tid=0x68ce1c00 nid=0x7c11 in Object.wait() [0x68b5c000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x740ad988> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:163)
- locked <0x740ad988> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:619)
{code}

"Checkpointer" daemon prio=10 tid=0x68ce1c00 nid=0x7c11 in Object.wait() [0x68b5c000]

* 線程名稱:Checkpointer
* 線程類型:daemon
* 優先順序:10,默認是5
* jvm線程id:jvm內部線程的唯一標識,0x68ce1c00
* 對應系統線程id:和top命令查看的pid對應,不過一個是10進制,一個是16進制。0x7c11
* 線程狀態:Object.wait().
* 起始棧地址
線程狀態詳解
Runnable
_The thread is either running or ready to run when it gets its CPU turn._
不解釋。

Wait on condition
_The thread is either sleeping or waiting to be notified by another thread._
該狀態出現在線程等待某個條件的發生或者sleep。
_最常見的情況是線程在等待網路的讀寫,比如當網路數據沒有準備好讀時,線程處於這種等待狀態,而一旦有數據准備好讀之後,線程會重新激活,讀取並處理數據。_

Waiting for Monitor Entry and in Object.wait()
_The thread is waiting to get the lock for an object (some other thread may be holding the lock). This happens if two or more threads try to execute synchronized code. Note that the lock is always for an object and not for indivial methods._
當一個線程申請進入臨界區時,獲取到monitor,線程將處於 「Runnable」的狀態,否則,線程 DUMP會顯示處於 「waiting for monitor entry」。
當線程獲得了 Monitor,進入了臨界區之後,如果發現線程繼續運行的條件沒有滿足,它則調用對象(一般就是被 synchronized 的對象)的 wait() 方法,放棄了 Monitor,進入 「Wait Set」隊列。只有當別的線程在該對象上調用了 notify() 或者 notifyAll() , 「 Wait Set」隊列中線程才得到機會去競爭,但是只有一個線程獲得對象的 Monitor,恢復到運行態。在 「Wait Set」中的線程, DUMP中表現為: in Object.wait()。
例:

<span style="background-color: rgb(255, 255, 255);"><span style="color:#ff6666;">{code}
"Timer-0" daemon prio=10 tid=0x695c3000 nid=0x7c00 in Object.wait() [0x69468000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x744f2850> (a java.util.TaskQueue) ###繼續wait
at java.util.TimerThread.mainLoop(Timer.java:509)
- locked <0x744f2850> (a java.util.TaskQueue) ###已經lock到0x744f2850
at java.util.TimerThread.run(Timer.java:462)
{code}</span></span>
參見:http://jameswxx.iteye.com/blog/1041173

{code}
java.lang.Thread.State: WAITING (on object monitor)
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; ">{code}</p>
線程狀態運行:
WAITING||State || Description||
|blocked|This thread tried to enter a synchronized block, but the lock was taken by another thread. This thread is blocked until the lock gets released.|
|blocked (on thin lock)|This is the same state as blocked, but the lock in question is a thin lock.||waiting|This thread called Object.wait() on an object. The thread will remain there until some other thread sends a notification to that object.|
|sleeping|This thread called java.lang.Thread.sleep().||parked|This thread called java.util.concurrent.locks.LockSupport.park().||suspended|The thread's execution was suspended by java.lang.Thread.suspend() or a JVMTI agent call.|
{code}
at java.lang.Object.wait(Native Method)
- waiting on <0x740ad988> (a java.lang.Object) ###等待堆地址為0x740ad988的java.lang.Object對象的鎖
at java.lang.Object.wait(Object.java:485)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:163)
- locked <0x740ad988> (a java.lang.Object) ###hold住堆地址為0x740ad988的java.lang.Object對象的鎖
at java.lang.Thread.run(Thread.java:619)
{code}

③ 如何產生javacore文件和heapmp文件

1. windows & Linux:

修改運行腳本的javaw 到java,並且添加參數-XX:+HeapDumpOnCtrlBreak。
運行程序後,按ctrl+break, 就可以得到heapmp文件。
-Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:\heapmp

2. solaris:

首先在運行的腳本中添加參數-XX:+HeapDumpOnCtrlBreak。
利用ps -ef | grep java 找到運行程序的進程號。
輸入命令kill -3 <pid>,就可以得到heapmp文件。
或者: kill -QUIT <pid>

-Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError

3. AIX

(1) choose one cluster member, set the following before this server start:
在was啟動前設置下面環境變數(可以加在啟動腳本中)
export IBM_HEAPDUMP=true
export IBM_HEAP_DUMP=true
export IBM_HEAPDUMP_OUTOFMEMORY=true
export IBM_HEAPDUMPDIR=<directory path>
export IBM_JAVADUMP_OUTOFMEMORY=true

(2)please use set command to make sure you do not have DISABLE_JAVADUMP parameter
then start this cluster member.
用set命令檢查參數設置,確保沒有設置DISABLE_JAVADUMP,然後啟動server

(3)when you find free memory < 50% when no heavy access, please run kill -3 <pid>
執行kill -3 <pid>命令可以生成javacore文件和heapmp文件(pid為was java進程的id號,可以用ps -ef|grep java 查到),可以多執行幾次,按照下面操作進行

④ 如何收集java進程產生的coremp文件及相關數據

修改運行腳本的javaw 到java,並且添加參數-XX:+HeapDumpOnCtrlBreak。運行程序後,按ctrl+break, 就可以得到heapmp文件。-Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=c:\heapmp2. solaris: 首先在運行的腳本中添加參數-XX:+HeapDumpOnCtrlBreak。利用ps -ef | grep java 找到運行程序的進程號。 或者: kill -QUIT <pid> -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError 3. AIX(1) choose one cluster member, set the following before this server start:在was啟動前設置下面環境變數(在啟動腳本中)then start this cluster member.用set命令檢查參數設置,確保沒有設置DISABLE_JAVADUMP,然後啟動server (3)when you find free memory < 50% when no heavy access, please run kill -3 <pid>執行kill -3 <pid>命令可以生成javacore文件和heapmp文件(pid為was java進程的id號,可以用ps -ef|grep java 查到),可以多執行幾次,按照下面操作進行

⑤ mp內存format b什麼意思

其中jmap是java自帶的工具查看整個JVM內存狀態jmap-heap[pid]要注意的是在使用CMSGC情況下,jmap-heap的執行有可能會導致JAVA進程掛起查看JVM堆中對象詳細佔用情況jmap-histo[pid]導出整個JVM中內存信息jmap-mp:format=b,file=文件名[pid]jhat是sun1.6及以上版本中自帶的一個用於分析JVM堆DUMP文件的工具,基於此工具可分析JVMHEAP中對象的內存佔用情況jhat-J-Xmx1024M[file]執行後等待console中輸入startHTTPserveronport7000即可使用瀏覽器訪問IP:提供的一個用於分析JVM堆Dump文件的插件。藉助這個插件可查看對象的內存佔用狀況,引用關系,分析內存泄露等。kill-3[pid]在Linux上找到Java所在的進程號,然後執行以上命令,線程的相關信息就輸出到consolejstackjstack是sunJDK自帶的工具,通過該工具可以看到JVM中線程的運行狀況,包括鎖等待,線程是否在運行執行jstack[pid],線程的所有堆棧信息"http-8080-10"daemonprio=10tid=x0a949bb60nid=0x884waitingformonitorentry[]"http-8080-10"這個線程處於等待狀態。waitingformonitorentry如果在連續幾次輸出線程堆棧信息都存在於同一個或多個線程上時,則說明系統中有鎖競爭激烈,死鎖,或鎖餓死的想像。「http-8080-11」daemonprio=10tix=xxxnid=xxxinobject.wait()[]java.lang.Thread.State:waiting(onobjectmonitor)該表示http-8080-11的線程處於對象的Wait上,等待其他線程的喚醒,這也是線程池的常見用法。「LowMemoryDetector」daemonprio=10tix=xxnid=xxxrunnable[]java.lang.Thread.State:runnable表示「LowMemoryDetector」的線程處於Runable狀態,等待獲取CPU的使用權.參考:/blog/static/100768914201242410583187/jvisualvm一.JavaVisualVM概述對於使用命令行遠程監控jvm太麻煩。在jdk1.6中Oracle提供了一個新的可視化的。JVM監控工具JavaVisualVM。jvisualvm.exe在JDK的bin目錄下。雙擊啟動JavaVisualVM後可以看到窗口左側「應用程序」欄中有「本地」、「遠程」、「快照」三個項目。「本地」下顯示的是在localhost運行的Java程序的資源佔用情況,如果本地有Java程序在運行的話啟動JavaVisualVM即可看到相應的程序名,點擊程序名打開相應的資源監控菜單,以圖形的形式列出程序所佔用的CPU、Heap、PermGen、類、線程的統計信息。「遠程」項下列出的遠程主機上的Java程序的資源佔用情況,但需要在遠程主機上運行jstatd守護程序VisualVM分為3類,本地它會自動偵測到,並顯示出來雙擊Local下的任一節點,看到右邊的變化,你可以監控CPU,內存,類,線程等運行狀況,實時監控伺服器性能。右鍵VisualVM我們可以看到ThreadDump,HeapDump做ThreadDump很快,馬上就可以看到結果HeapDump要稍花費一些時間(可以看到當前heap里對象的數量及佔用的比例,做OOM很好用)對其功能不再做描述,可以查閱網上相關質量,我們主要講的是如何使用VisualVM遠程監控。

⑥ mp出java虛擬機堆,對應用會有影響嗎

JConsole使用JVM的可擴展性Java管理擴展(JMX)工具來提供關於運行於Java平台的應用程序的性能和資源消耗的信息。

在J2SE 5.0軟體中,你需要啟動使用-Dcom.sun.management.jmxremote選項監控的應用程序。注意:在Java SE 6軟體中,不再有這一要求。當啟動該應用程序時,不需要特定的命令行選項。

在生產系統中的應用

JConsole啟動一個在被觀察的Java程序的JVM內部的JMX代理。運行另外一部分代碼僅有一點極微弱的影響-但是影響很小。

⑦ 如何分析java Thread DUMP

一、Thread Dump介紹
1.1什麼是Thread Dump?
Thread Dump是非常有用的診斷Java應用問題的工具。每一個Java虛擬機都有及時生成所有線程在某一點狀態的thread-mp的能力,雖然各個 Java虛擬機列印的thread mp略有不同,但是大多都提供了當前活動線程的快照,及JVM中所有Java線程的堆棧跟蹤信息,堆棧信息一般包含完整的類名及所執行的方法,如果可能的話還有源代碼的行數。

1.2 Thread Dump特點
1. 能在各種操作系統下使用
2. 能在各種Java應用伺服器下使用
3. 可以在生產環境下使用而不影響系統的性能
4. 可以將問題直接定位到應用程序的代碼行上

1.3 Thread Dump 能診斷的問題
1. 查找內存泄露,常見的是程序里load大量的數據到緩存;
2. 發現死鎖線程;

1.4如何抓取Thread Dump
一般當伺服器掛起,崩潰或者性能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析. 在實際運行中,往往一次 mp的信息,還不足以確認問題。為了反映線程狀態的動態變化,需要接連多次做threadmp,每次間隔10-20s,建議至少產生三次 mp信息,如果每次 mp都指向同一個問題,我們才確定問題的典型性。

有很多方式可用於獲取ThreadDump, 下面列出一部分獲取方式:
操作系統命令獲取ThreadDump:
Windows:
1.轉向伺服器的標准輸出窗口並按下Control + Break組合鍵, 之後需要將線程堆棧復制到文件中;
UNIX/ Linux:
首先查找到伺服器的進程號(process id), 然後獲取線程堆棧.
1. ps –ef | grep java
2. kill -3 <pid>
注意:一定要謹慎, 一步不慎就可能讓伺服器進程被殺死。kill -9 命令會殺死進程。

JVM 自帶的工具獲取線程堆棧:
JDK自帶命令行工具獲取PID,再獲取ThreadDump:
1. jps 或 ps –ef|grepjava (獲取PID)
2. jstack [-l ]<pid> | tee -a jstack.log (獲取ThreadDump)

二、java線程的狀態轉換介紹(為後續分析做准備)

2.1 新建狀態(New)
用new語句創建的線程處於新建狀態,此時它和其他Java對象一樣,僅僅在堆區中被分配了內存。
2.2 就緒狀態(Runnable)
當一個線程對象創建後,其他線程調用它的start()方法,該線程就進入就緒狀態,Java虛擬機會為它創建方法調用棧和程序計數器。處於這個狀態的線程位於可運行池中,等待獲得CPU的使用權。
2.3 運行狀態(Running)
處於這個狀態的線程佔用CPU,執行程序代碼。只有處於就緒狀態的線程才有機會轉到運行狀態。
2.4 阻塞狀態(Blocked)
阻塞狀態是指線程因為某些原因放棄CPU,暫時停止運行。當線程處於阻塞狀態時,Java虛擬機不會給線程分配CPU。直到線程重新進入就緒狀態,它才有機會轉到運行狀態。
阻塞狀態可分為以下3種:
1)位於對象等待池中的阻塞狀態(Blocked in object』s wait pool):當線程處於運行狀態時,如果執行了某個對象的wait()方法,Java虛擬機就會把線程放到這個對象的等待池中,這涉及到「線程通信」的內容。
2)位於對象鎖池中的阻塞狀態(Blocked in object』s lock pool):當線程處於運行狀態時,試圖獲得某個對象的同步鎖時,如果該對象的同步鎖已經被其他線程佔用,Java虛擬機就會把這個線程放到這個對象的鎖池中,這涉及到「線程同步」的內容。

⑧ Java 中怎麼獲取一份線程 mp 文件

當伺服器掛起,崩潰或者性能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析.

Thread mp提供了當前活動的線程的快照.它提供了JVM中所有Java線程的棧跟蹤信息

有很多方式可用於獲取Thread Dump,一些是操作系統特定的命令.


Windows:

1. 轉向伺服器的標准輸出窗口並按下Control + Break組合鍵,之後需要將線程堆棧復制到文件中

UNIX/ Linux

首先查找到伺服器的進程號(process id),然後獲取堆棧.

1. ps –ef| grep java

2. kill -3 <pid>

注意一定要謹慎,一步不慎就可能讓伺服器進程被殺死!


JDK自帶命令行工具獲取PID並做ThreadDump:

1. jps

2.jstack <pid>

使用JVisualVM:

Threads標簽頁 →ThreadDump按鈕


1. webLogic.Admin工具

a.打開命令提示符,通過運行<DOMAIN_HOME>/bin/setDomain.env設置相關類路徑

b.執行下面的命令

java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP

注意: Thread Dump會列印到標准輸出,如nohup日誌或者進程窗口.

2.使用 Admin Console

a.登錄Admin Console ,點擊對應的伺服器

b.點擊ServeràMonitoringàThreads

c.點擊: Dump Thread Stack按鈕

3.使用WLST (WebLogic Scripting Tool)

connect(『weblogic』,'weblogic1』,』t3://localhost:7001』)

cd(『Servers』)

cd(『AdminServer』)

threadDump()

disconnect()

exit()

注意:線程堆棧將會保存在運行wlst的當前目錄下.

4.使用utils.ThreadDumper

用法:

C:eawlserver_10.3serverlib>java -cp weblogic.jar utils.ThreadDumper

Broadcast Thread mps disabled: must specify weblogic.debug.mpThreadAddr and

weblogic.debug.mpThreadPort

Exception in thread "main" java.lang.IllegalArgumentException: Port out of range

:-1

at java.net.DatagramPacket.setPort(Unknown Source)

at java.net.DatagramPacket.<init>(Unknown Source)

at java.net.DatagramPacket.<init>(Unknown Source)

at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)

at utils.ThreadDumper.main(ThreadDumper.java:145)

5.如果伺服器是作為Windows服務的方式運行,請運行下列命令:

WL_HOMEineasvc -mp -svcname:service-name


$JAVA_

⑨ linux下java mp文件在哪兒

如果所使用的應用伺服器是tomact,mp文件默認在catalina.out日誌文件里;
如果不是則可以查看java環境變數設置的位置,也就知道在mp文件的位置了;
如果沒有生成mp文件或者是生成錯誤,請按照一下幾種方法來修復:
系統默認的core文件生成路徑是 /var/logs,但是 /var/logs 目錄並非系統自帶的,系統初始安裝默認自帶的是/var/log,最終導致該系統出現core mp後並沒能生成core文件,因此如何查詢和修改系統默認的core mp文件生產路徑呢?方法如下:
一. 查詢core mp文件路徑:
方法1:
# cat /proc/sys/kernel/core_pattern
方法2:
# /sbin/sysctl kernel.core_pattern
二. 修改core mp文件路徑:
方法1:臨時修改:修改/proc/sys/kernel/core_pattern文件,但/proc目錄本身是動態載入的,每次系統重啟都會重新載入,因此這種方法只能作為臨時修改。
/proc/sys/kernel/core_pattern
例:echo 『/var/log/%e.core.%p』 > /proc/sys/kernel/core_pattern
方法2:永久修改:使用sysctl -w name=value命令。
例:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p

閱讀全文

與javadump命令相關的資料

熱點內容
海立壓縮機海信系 瀏覽:204
社保如何在app上合並 瀏覽:220
小米加密照片後綴 瀏覽:234
我的世界網易手機怎麼創伺服器 瀏覽:978
載入單頁源碼 瀏覽:930
阿里雲伺服器seo 瀏覽:777
海洋斗什麼時候上線安卓 瀏覽:86
中行app如何查每日匯款限額 瀏覽:840
輸入伺服器sn是什麼意思 瀏覽:725
sha1演算法java 瀏覽:90
asp代碼壓縮 瀏覽:851
按鍵壓槍源碼 瀏覽:180
福建伺服器負載均衡是什麼 瀏覽:697
演算法將所有的島嶼連通 瀏覽:313
51單片機40引腳是什麼 瀏覽:536
手機文件夾大小怎麼調節 瀏覽:309
android自定義日期選擇器 瀏覽:658
租伺服器要看什麼 瀏覽:164
Lightroom文件夾移動以後 瀏覽:968
web前端pdf 瀏覽:898