在java开发过程中,我们可能会遇到
- OutOfMemoryError内存不足
- 内存泄漏
- 线程死锁
- Java进程消耗CPU过高
使用jstack命令来查看java程序线程信息,安装jstack直接用yum install jstack会报错没有可用软件包

使用yum list --showduplicate | grep java-1.8|grep devel可以看到有哪些可安装的jdk1.8开发工具

选择一个安装 yum install java-1.8.0-openjdk-devel.x86_64

接下来就可以使用jstack、jstat、jmap、jps、jinfo命令啦
- jps主要是用来输出JVM中运行的进程状态信息,其语法格式为
jps [options] [hostid]如果不指定hostid就默认为当前主机或服务器,命令行参数:
-q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l 输出main类或Jar的全限名 -v 输出传入JVM的参数
- jstack主要是用来查看某个Java进程堆栈信息。语法格式为:
jstack [option] pid jstack [option] executable core jstack [option] [server-id@]remote-hostname-or-ip命令行参数
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优时使用的非常多。
-
jstat(https://blog.youkuaiyun.com/weixin_37477523/article/details/87919123)
jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] -t -- 用于在输出内容的第一列显示时间戳,这个时间戳代表的时JVM开始启动到现在的时间(注:在IBM JDK5中是没有这个选项的) -h<lines> -- 用于指定每隔几行就输出列头,如果不指定,默认是只在第一行出现列头 <vmid> -- VM的进程号,即当前运行的java进程号 <interval> -- 间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒 <count> -- 打印次数,如果缺省则打印无数次 [options] -class -- 用于查看类加载情况的统计 -compiler -- 用于查看HotSpot中即时编译器编译情况的统计 -gc -- 用于查看JVM中堆的垃圾收集情况的统计 -gccapacity -- 用于查看新生代、老生代及持久代的存储容量情况 -gccause -- 用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因 -gcmetacapacity -- (JDK8)用于查看元空间的存储容量情况 -gcnew -- 用于查看新生代垃圾收集的情况 -gcnewcapacity -- 用于查看新生代的存储容量情况 -gcold -- 用于查看老生代及持久代发生GC的情况 -gcoldcapacity -- 用于查看老生代的容量 -gcutil -- 用于查看新生代、老生代及持代垃圾收集的情况 -printcompilation -- HotSpot编译方法的统计jstat -gc 10209 250 4(10209为pid,采样时间间隔为250ms,采样数为4)

S0C 新生代中Survivor space中S0当前容量大小(KB)
S1C 新生代中Survivor space中S1当前容量大小(KB)
S0U 新生代中Survivor space中S0容量使用大小(KB)
S1U 新生代中Survivor space中S1容量使用大小(KB)
EC Eden space当前容量大小(KB)
EU Eden space容量使用大小(KB)
OC Old space当前容量大小(KB)
OU Old space使用容量大小(KB)
MC Meta space当前容量大小(KB)
MU Meta space使用容量大小(KB)
CCSC 压缩类空间大小(KB)
CCSU 压缩类空间使用大小(KB)
YGC 从应用程序启动到采样时发生Young GC的次数
YGCT 从应用程序启动到采样时Young GC所用的时间(秒)
FGC 从应用程序启动到采样时发生Full GC的次数
FGCT 从应用程序启动到采样时Full GC所用的时间(秒)
GCT 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGCT+FGCT
- jstat -class 10209 250 4(10209为pid,采样时间间隔为250ms,采样数为4)


- jstat -compiler 10209 250 4(10209为pid,采样时间间隔为250ms,采样数为4)


下面是些操作例子


linux/Centos查看进程占用内存大小的几种方法总结
1.命令行输入top回车。之后按大写M将其结果按照memory排序和按下大写P将其结果按照CPU排序

按大写M

按大写P

查看某个进程的top命令语法
2.top -d 1 -p pid

3.ps -ef|grep pid

4.pmap -x pid


本文介绍了在Linux CentOS系统中,如何利用JVM自带的工具进行性能调优监控,包括jstack用于查看线程堆栈信息,jstat用于监控内存和垃圾收集情况。通过实例展示了如何安装和使用这些工具,以解决内存不足、内存泄漏、线程死锁等问题。
606

被折叠的 条评论
为什么被折叠?



