【JVM进阶之路】八:性能监控工具-命令行篇

1.3、iostat:监控IO使用


iostat可以提供磁盘IO的监控数据:

avg-cpu: %user %nice %system %iowait %steal %idle

1.44 0.00 0.39 0.00 0.00 98.17

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 0.37 0.47 30.30 3561197 229837730

dm-0 0.44 0.33 29.97 2518272 227313194

dm-1 0.12 0.13 0.33 1013276 2520308

dm-2 0.00 0.00 0.00 502 2068

以上命令显示了CPU的使用概况和磁盘I/O的信息。

输出结果各个列的含义:

iostat结果面板 avg-cpu 描述的是系统cpu使用情况:

  • %user:CPU处在用户模式下的时间百分比。

  • %nice:CPU处在带NICE值的用户模式下的时间百分比。

  • %system:CPU处在系统模式下的时间百分比。

  • %iowait:CPU等待输入输出完成时间的百分比。

  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

  • %idle:CPU空闲时间百分比。

1.4、netstat:监控网络使用


在web程序中,可能运行需要网络,可以使用netstat命令监控网络流量。

netstat -a

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 localhost:30037 : LISTEN

udp 0 0 *:bootpc :

Active UNIX domain sockets (servers and established)

Proto RefCnt Flags Type State I-Node Path

unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0

unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket

以上命令表示列出所有端口信息。

2、JDK性能监控工具

=============================================================================

除了我们比较熟悉的java.exe、javac.exe这两个命令行工具,在jdk的bin目录下,还有一些其它的工具。。除了编译和运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都可能会用到它们。

jdk命令行工具

2.1、jps:虚拟机进程查看


jps类似Linux下的ps,它会列出Java程序的进程。

jps命令格式:

jps [ options ] [ hostid ]

jps命令示例:

jps

jps的常用选项见表:

| 选项列表 | 描述 |

| — | — |

| -q | 只输出进程 ID,忽略主类信息 |

| -l | 输出主类全名,或者执行 JAR 包则输出路径 |

| -m | 输出虚拟机进程启动时传递给主类 main()函数的参数 |

| -v | 输出虚拟机进程启动时的 JVM 参数 |

2.2、jstat:虚拟机运行时信息查看


jsta是一个强大的工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。

jstat命令格式为:

jstat [ option vmid [interval[s|ms] [count]] ]

选项option代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况。

如下,输出Java进程5728的ClassLoader相关信息,每秒统计一次信息,一共输出两次。

jsta示例

下例展示了与GC相关的堆信息的输出:

jstat GC堆

jstat工具主要选项:

| 选项列表 | 描述 |

| — | — |

| -class | 监视类加载、卸载数量、总空间以及类装载所耗费时长 |

| -gc | 监视 Java 堆情况,包括 Eden 区、2 个 Survivor 区、老年代、永久代或者 jdk1.8 元空间等,容量、已用空间、垃圾收集时间合计等信息 |

| -gccapacity | 监视内容与-gc 基本一致,但输出主要关注 Java 堆各个区域使用到的最大、最小空间 |

| -gcutil | 监视内容与-gc 基本相同,但输出主要关注已使用空间占总空间的百分比 |

| -gccause | 与 -gcutil 功能一样,但是会额外输出导致上一次垃圾收集产生的原因 |

| -gcnew | 监视新生代垃圾收集情况 |

| -gcnewcapacity | 监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间 |

| -gcold | 监视老年代垃圾收集情况 |

| -gcoldcapacity | 监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间 |

| -compiler | 输出即时编译器编译过的方法、耗时等信息 |

| -printcompilation | 输出已经被即时编译的方法 |

2.3、jinfo:虚拟机配置查看


jinfo的作用是实时查看和调整虚拟机各项参数。

jinfo命令格式:

jinfo [ option ] pid

下例显示了新生爱对象晋升老年代的最大年龄。在应用程序启动时,没有指定,但通过jinfo,查看该参数的当前数值。

jinfo查看新生代晋升年龄

查看是否打印GC详细信息:

查看是否打印GC详细信息

2.4、jmap:内存映像(导出)


jmap命令用于生成堆转储快照(一般称为heapdump或dump文件)

jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

jmap命令格式:

jmap [ option ] vmid

如下,使用jmap生成PID为5728的Java程序的对象统计信息, 并输出到dump.txt中。

jmap

dump.txt的结构如下:

dump.txt

jmap更重要的功能是得到Java程序的当前堆快照:

jmap转储堆快照

如图,将应用程序的堆快照输出到D盘的heap.hprof文件中,之后,可以通过多种工具分析该堆文件。

jmap工具主要选项:

| 选项 | 描述 |

| — | — |

| -dump | 生成 Java 堆转储快照。 |

| -finalizerinfo | 显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。Linux平台 |

| -heap | 显示 Java 堆详细信息,比如:用了哪种回收器、参数配置、分代情况。Linux 平台 |

| -histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |

| -permstat | 显示永久代内存状态,jdk1.7,永久代 |

| -F | 当虚拟机进程对 -dump 选项没有响应式,可以强制生成快照。Linux平台 |

2.5、jhat:堆转储快照分析


JDK提供jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。 jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看。

以前面生成的heap.hprof为例:

jhat分析堆快照

屏幕显示“Server is ready.”的提示后,用户在浏览器中输入http://localhost:7000/可以看到分析结果

jhat分析结果

2.6、jstack:Java堆栈跟踪


jstack命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者 javacore文件)。

jstack命令格式:

jstack [ option ] vmid

如下,使用stack查看线程堆栈的部分结果:

使用jstack查看线程堆栈

jstack工具主要选项:

| 选项 | 描述 |

| — | — |

| -F | 当正常输出的请求不被响应时,强制输出线程堆栈 |

| -l | 除了堆栈外,显示关于锁的附加信息 |

| -m | 如果调用的是本地方法的话,可以显示 c/c++的堆栈 |

2.7、jcmd:多功能命令


在jdk1.7以后,新增了一个请打的命令行工具jcmd,它可以实现上面除了jstat外所有命令的功能。

例如,使用jcmd列出当前系统中的所有运行中的Java虚拟机:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
取)**

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

[外链图片转存中…(img-GivTSllu-1713397729630)]

《Java高级架构知识》

[外链图片转存中…(img-2BHnMU0s-1713397729630)]

《算法知识》

[外链图片转存中…(img-fEhoboPn-1713397729630)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值