一:jstack找到最耗cpu的線程並定位代碼java
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日誌mysql
-XX:+PrintGCDetails 輸出GC的詳細日誌linux
-XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準時間的形式)sql
-XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)數據庫
-XX:+PrintHeapAtGC 在進行GC的先後打印出堆的信息eclipse
-Xloggc:../logs/gc.log 日誌文件的輸出路徑工具
我通常作以下的設置spa
-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