本文目錄一覽:
linux下java dump文件在哪兒
如果所使用的應用伺服器是tomact,dump文件默認在catalina.out日誌文件里;
如果不是則可以查看java環境變數設置的位置,也就知道在dump文件的位置了;
如果沒有生成dump文件或者是生成錯誤,請按照一下幾種方法來修復:
系統默認的core文件生成路徑是 /var/logs,但是 /var/logs 目錄並非系統自帶的,系統初始安裝默認自帶的是/var/log,最終導致該系統出現core dump後並沒能生成core文件,因此如何查詢和修改系統默認的core dump文件生產路徑呢?方法如下:
一. 查詢core dump文件路徑:
方法1:
# cat /proc/sys/kernel/core_pattern
方法2:
# /sbin/sysctl kernel.core_pattern
二. 修改core dump文件路徑:
方法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
Java 中怎麼獲取一份線程 dump 文件
當伺服器掛起,崩潰或者性能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析.
Thread dump提供了當前活動的線程的快照. 它提供了JVM中所有Java線程的棧跟蹤信息
有很多方式可用於獲取Thread Dump, 一些是操作系統特定的命令.
操作系統命令獲取ThreadDump:
Windows:
1. 轉向伺服器的標準輸出窗口並按下Control + Break組合鍵, 之後需要將線程堆棧複製到文件中
UNIX/ Linux
首先查找到伺服器的進程號(process id), 然後獲取堆棧.
1. ps –ef | grep java
2. kill -3 pid
注意一定要謹慎, 一步不慎就可能讓伺服器進程被殺死!
JVM 自帶的工具獲取線程堆棧:
JDK自帶命令行工具獲取PID並做ThreadDump:
1. jps
2.jstack pid
使用JVisualVM:
Threads 標籤頁 →ThreadDump按鈕
WebLogic 自帶的獲取 thread dump的工具:
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:\bea\wlserver_10.3\server\libjava -cp weblogic.jar utils.ThreadDumper
Broadcast Thread dumps disabled: must specify weblogic.debug.dumpThreadAddr and
weblogic.debug.dumpThreadPort
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_HOME\bin\beasvc -dump -svcname:service-name
其它一些獲取Thread Dump的工具有jrcmd, jrmc(JRockit VM自帶) ,Samurai, JProfiler等, 還可通過JMX編程的方式獲取, 如JDK自帶示例代碼:
$JAVA_HOME\demo\management\FullThreadDump
java dump文件怎麼生成
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
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文件和heapdump文件(pid為was java進程的id號,可以用ps -ef|grep java 查到),可以多執行幾次,按照下面操作進行
ps -ef psef1.txt
ps aux psaux1.txt
vmstat 5 10 vmstat.txt
kill -3 app server id
wait for 2 mins
kill -3 app server id
wait for 2 mins
kill -3 app server id
netstat -an netstat2.txt
ps -ef psef2.txt
ps aux psaux2.txt
將上面產生的 txt 文件和/usr/WebSphere/AppServer/javacore*文件和heapdump文件拷貝到本地,然後刪除這些文件,因為這些文件會佔用較大的文件系統空間。
將/usr/WebSphere/AppServer/logs/wlmserver1(或2)目錄下當天產生的日誌拷貝出來
如何生成java dump文件
java dump heap 是分配給實例類和數組對象運行數據區,所有java線程在運行期間共享heap中的數據。Java heap dump相當於java應用在運行的時候在某個時間點上打了個快照(snapshot)。
有java dump文件生成的方式如下:
1.使用$JAVA_HOME/bin/jmap -dump來觸發,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out
2.使用$JAVA_HOME/bin/jcosole中的MBean,到MBeancom.sun.managementHotSpotDiagnostic操作dumpHeap中,點擊 dumpHeap按鈕。生成的dump文件在java應用的根目錄下面。
3.在應用啟動時配置相關的參數 -XX:+HeapDumpOnOutOfMemoryError,當應用拋出OutOfMemoryError時生成dump文件。
4.使用hprof。啟動虛擬機加入-Xrunhprof:head=site,會生成java.hprof.txt文件。該配置會導致jvm運行非常的慢,不適合生產環境。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256436.html