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