当前位置: 首页 > news >正文

读书笔记之《实战Java虚拟机》(6):性能监控工具

Linux下的性能监控工具

显示系统整体资源使用情况 —— top 命令

top - 19:55:08 up 22 days,  3:12,  1 user,  load average: 0.01, 0.08, 0.07
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  0.7 sy,  0.0 ni, 97.0 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016380 total,    76076 free,   864172 used,    76132 buff/cache
KiB Swap:        0 total,        0 free,        0 used.    35740 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  579 root      20   0  586424  42072    148 S  0.3  4.1  32:11.25 YDService
 2051 root      20   0  741344  10944   1456 S  0.3  1.1  72:05.36 barad_agent
11108 root      20   0  143948   1260    220 S  0.3  0.1  20:35.96 redis-server
23059 mysql     20   0 1421440 411764      0 S  0.3 40.5  19:36.60 mysqld
    1 root      20   0   41048   2316   1180 S  0.0  0.2   1:14.65 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.12 kthreadd
    ... ...
复制代码

分为上下两部分:前半部分是系统统计信息,后半部分是进程信息。

使用top命令可以从宏观上观察系统各个进程堆 CPU 的占用情况,以及内存使用情况。

监控内存和 CPU —— vmstat 命令

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  78252    544  75832    0    0   227    18   18   12  1  0 99  0  0
复制代码

可以指定采样周期和采样次数,例每秒采样 1 次,共 3 次:vmstat 1 3

vmstat 工具可以查看内存、交互分区、I/O 操作、上下文切换、时钟中断,以及 CPU 的使用情况。

监控 IO 使用 —— iostat 命令

Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_6_centos) 	03/22/2019 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.55    0.00    0.40    0.36    0.00   98.70

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.00         0.00        316          0
vda               6.52       228.32        18.13  435180743   34554796
复制代码

同样可指定采样周期和采样次数。

磁盘 I/O 很容易成为系统性能瓶颈,通过 iostat 可以快速定位系统是否产生了大量的 I/O 操作。

多功能诊断器 —— pidstat 工具

pidstat -p 29839 -u 1 3, -u 指定对 CPU 使用监控;

Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_6_centos) 	03/22/2019 	_x86_64_	(1 CPU)

08:22:50 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
08:22:51 PM     0     29839    0.00    0.00    0.00    0.00     0  java
08:22:52 PM     0     29839    0.00    0.00    0.00    0.00     0  java
08:22:53 PM     0     29839    0.00    0.00    0.00    0.00     0  java
Average:        0     29839    0.00    0.00    0.00    0.00     -  java
复制代码

pidstat -p 29839 -d 1 3, -d 指定对 I/O 使用监控;

Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_6_centos) 	03/22/2019 	_x86_64_	(1 CPU)

08:26:12 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
08:26:13 PM     0     29839      0.00      0.00      0.00  java
08:26:14 PM     0     29839      0.00      0.00      0.00  java
08:26:15 PM     0     29839      0.00      0.00      0.00  java
Average:        0     29839      0.00      0.00      0.00  java
复制代码

pidstat -p 29839 -r 1 3, -d 指定对 内存 使用监控;

Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_6_centos) 	03/22/2019 	_x86_64_	(1 CPU)

08:27:34 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
08:27:35 PM     0     29839      0.00      0.00 2359408 316676  31.16  java
08:27:36 PM     0     29839      0.00      0.00 2359408 316676  31.16  java
08:27:37 PM     0     29839      0.00      0.00 2359408 316676  31.16  java
Average:        0     29839      0.00      0.00 2359408 316676  31.16  java
复制代码

pidstat 工具是一款多合一的优秀工具。它不仅可以监控 CPU、I/O 和内存资源,甚至可以将问题定位到相关线程,方便应用程序的故障排查。

Windows 下的性能监控工具

任务管理器

在桌面底边栏右键单击,或者通过 Ctrl + Alt + Del 组合件呼出。

任务管理器很常用,也非常强大,它可以显示系统的网络负载、任意进程的 CPU 占用率、内存使用量以及 I/O 使用情况。

perfmon 性能监控工具

可以在开始菜单的“运行”对话框中使用 perfmon 命令,或者双击控制面板的管理工具中的“性能监视器”打开这个工具;

perfmon 工具也是 Windows 自带的一款性能监控软件。可以监控的性能指标繁多,功能也非常强大。当任务管理无法满足要求时,推荐使用。

perfmon 工具支持带参数 /res 启动,用于专门监控系统资源的使用情况:perfmon /res

JDK 性能监控工具

查看 Java 进程 —— jps 命令

jps 类似 linux 下的 ps,但它只用于列出 Java 的进程。

[root@VM_0_6_centos ~]# jps
28646 Jps
29839 jar
复制代码

查看虚拟机运行时信息 —— jstat 命令

jstat 用于观察 Java 应用程序运行时相关信息的工具。基本语法为:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>]
复制代码
  • 选项 option 可以由下列值构成:

    • -class:显示 ClassLoader 的相关信息
    • -compiler:显示 JIT 编译的相关信息
    • -gc:显示与 GC 相关的堆信息
    • -gccapacity:显示各个代的容量及使用情况
    • -gccause:显示垃圾收集相关信息,同时显示最后一次或当前正在发生的垃圾手机的诱发原因
    • -gcnew:显示新生代信息
    • -gcnewcapacity:显示新生代大小与使用情况
    • -gcold:显示老年代信息
    • -gcoldcapacity:显示老年代的大小
    • -gcpermcapacity:显示永久代的大小
    • -printcompilation:输出 JIT 编译的方法信息
  • -t 参数可以在输出信息前加上一个 Timestamp 列,显示程序的运行时间

  • -h 参数可以周期性输出时,输出多少行数据后,跟着输出一个表头信息

  • interval 参数指定统计数据的周期,单位为毫秒

  • count 用于指定一共输出多少次数据

查看 GC 相关的对信息输出

[root@VM_0_6_centos ~]# jstat -gc 29839
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
4352.0 4352.0  0.0   1614.1 34816.0   3974.8   86828.0    74678.7   67632.0 64592.8 8240.0 7731.2    405    1.665   6      0.521    2.187
复制代码

查看虚拟机参数 —— jinfo 命令

jinfo 查看正在运行的 Java 应用程序的拓展参数,甚至支持在运行时,修改部分参数,基本语法为:

jinfo <option> <pid>
复制代码

其中 option 可以为以下信息:

  • -flag:打印指定 Java 虚拟机的参数值
  • -flag[+|-]:设置指定 Java 虚拟机参数的布尔值
  • -flag=:设置指定 Java 虚拟机参数的值

例如查看当前新生代对象晋升到老年代对象的最大年龄;

[root@VM_0_6_centos ~]# jinfo -flag MaxTenuringThreshold 29839
-XX:MaxTenuringThreshold=15
复制代码

导出堆到文件 —— jmap 命令

查看虚拟机状态;

[root@VM_0_6_centos ~]# jmap -heap 29839
Attaching to process ID 29839, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 262144000 (250.0MB)
   NewSize                  = 5570560 (5.3125MB)
   MaxNewSize               = 87359488 (83.3125MB)
   OldSize                  = 11206656 (10.6875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 40108032 (38.25MB)
   used     = 7851408 (7.4876861572265625MB)
   free     = 32256624 (30.762313842773438MB)
   19.57565008425245% used
Eden Space:
   capacity = 35651584 (34.0MB)
   used     = 6198592 (5.91143798828125MB)
   free     = 29452992 (28.08856201171875MB)
   17.386582318474264% used
From Space:
   capacity = 4456448 (4.25MB)
   used     = 1652816 (1.5762481689453125MB)
   free     = 2803632 (2.6737518310546875MB)
   37.08819221047794% used
To Space:
   capacity = 4456448 (4.25MB)
   used     = 0 (0.0MB)
   free     = 4456448 (4.25MB)
   0.0% used
tenured generation:
   capacity = 88911872 (84.79296875MB)
   used     = 76470984 (72.92841339111328MB)
   free     = 12440888 (11.864555358886719MB)
   86.00761887006496% used

26446 interned Strings occupying 3202672 bytes.
复制代码

图形化虚拟机监控工具 JConsole

JConsole 工具是 JDK 自带的图形化性能监控工具,位于 %JAVA_HOME%/bin 目录下,启动如下图所示;

连接上 Java 应用程序后,便可以查看应用程序概况;

酷炫诊断工具 Mission Control

Mission Control 位于 %JAVA_HOME%/bin 目录下,连接 Java 程序后;

转载于:https://juejin.im/post/5c94cb8cf265da60c6038cca

相关文章:

  • B-树(B+树) 学习总结
  • 【DAY24】内省,NIO的学习笔记
  • 双亲委派模型与Tomcat类加载架构
  • JavaScript事件详解
  • 明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看
  • 用grunt搭建自动化的web前端开发环境-完整教程
  • 强化学习遭遇瓶颈!分层RL将成为突破的希望
  • [改善Java代码]不同的场景使用不同的泛型通配符
  • Java 混淆那些事(二):认识 ProGuard GUI
  • yii2权限控制rbac之rule详细讲解
  • Solr简单介绍
  • 可视区域懒加载
  • 如何自学编程?学习方法在这里!
  • asp.net MD5 加密
  • js base
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS 7 防火墙操作
  • Codepen 每日精选(2018-3-25)
  • iOS编译提示和导航提示
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JSONP原理
  • MySQL QA
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • XForms - 更强大的Form
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 技术胖1-4季视频复习— (看视频笔记)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 区块链技术特点之去中心化特性
  • 微信小程序开发问题汇总
  • 学习Vue.js的五个小例子
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 鱼骨图 - 如何绘制?
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​secrets --- 生成管理密码的安全随机数​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #HarmonyOS:Web组件的使用
  • (20050108)又读《平凡的世界》
  • (BFS)hdoj2377-Bus Pass
  • (C语言)球球大作战
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ZT)出版业改革:该死的死,该生的生
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (补)B+树一些思想
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (推荐)叮当——中文语音对话机器人
  • (转)ObjectiveC 深浅拷贝学习
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET6 命令行启动及发布单个Exe文件
  • @Mapper作用