一: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