java常用問題排查工具


一:jstack找到最耗cpu的線程並定位代碼

1.ps -ef|grep java 或者 jps -l
得到進程pid
2.找到該進程內最耗cpu的線程,我一般使用:
top -Hp pid
3.cpu時間最長的就是pid為21742的線程,printf "x%\n" 21742,得到十六進制,為a
4.使用jstack pid | grep a,打印進程的堆棧信息
 
二:linux歷史指標數據
sar -A:報告所有的信息
sar -u:cpu利用率
sar 2 5:每隔2s顯示5次,cpu的使用情況
 
關於cpu消耗的問題,一般通過這兩種方式都可以解決,復雜的話需要借助於perf。
 
三:jstat和gc日志
jstat -gc pid 1000:每1s鍾打印堆間使用情況
jstat -gcutil pid
有些人習慣於查看gc log:

-XX:+PrintGC 輸出GC日志

-XX:+PrintGCDetails 輸出GC的詳細日志

-XX:+PrintGCTimeStamps 輸出GC的時間戳(以基准時間的形式)

-XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

-XX:+PrintHeapAtGC 在進行GC的前后打印出堆的信息

-Xloggc:../logs/gc.log 日志文件的輸出路徑

我一般做如下的設置

 
-XX:+PrintGCDetails -Xloggc:../logs/gc.log -XX:+PrintGCTimeStamps  
 
四:jmap的使用
jmap -dump:format=b,file=a.bin pid : 當需要dump內存查看的時候,內存dump出來以后,
使用eclipse memory analyzer
jmap -histo:live pid : 在需要強制執行fgc的時候
有些人喜歡使用gcore,不過有些jdk版本支持的並不是很好。
 
五:btrace工具的使用,沒有具體研究,后面貼上來
 
六:如何查看堆外內存?
 
 
lixnux常用的命令:
find / -name filename.txt : 根據名稱查找/目錄下的filename.txt文件
ls -l | grep 'jar' : 查找當前目錄所有jar文件
netstat -tln|grep 8080 :查看8080端口的使用情況
pwdx pid:查看屬於哪個程序
 
數據庫一些常用的命令:
mysql -uroot -pabc123
use xgame
mysqldump -uroot -pabc123 xgame > /root/mysql_tmp_backup.sql;
source /root/mysql_tmp/backup.sql;
 
linux下軟件安裝(以安裝java環境為例):
刪除linux自帶的openjdk
java -version
rpm -qa|grep java
java -version
yum -y remove java-1.8.0-open jdk.x86_64
rmp -ivh jdk-xxxx.rpm
vi /etc/profile
ls -s /usr/java/jdk/bin/java/sbin/java
port JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM