linux版本centos 系统JVM性能调优监控工具jstack、jstat等

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

在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

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值