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 的占用情况,以及内存使用情况。
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 的使用情况。
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 -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 和内存资源,甚至可以将问题定位到相关线程,方便应用程序的故障排查。
在桌面底边栏右键单击,或者通过 Ctrl + Alt + Del 组合件呼出。
任务管理器很常用,也非常强大,它可以显示系统的网络负载、任意进程的 CPU 占用率、内存使用量以及 I/O 使用情况。
可以在开始菜单的“运行”对话框中使用 perfmon 命令,或者双击控制面板的管理工具中的“性能监视器”打开这个工具;
perfmon 工具也是 Windows 自带的一款性能监控软件。可以监控的性能指标繁多,功能也非常强大。当任务管理无法满足要求时,推荐使用。
perfmon 工具支持带参数 /res 启动,用于专门监控系统资源的使用情况:perfmon /res
jps 类似 linux 下的 ps,但它只用于列出 Java 的进程。
[root@VM_0_6_centos ~]# jps 28646 Jps 29839 jar 复制代码
jstat 用于观察 Java 应用程序运行时相关信息的工具。基本语法为:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>] 复制代码
选项 option 可以由下列值构成:
-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 查看正在运行的 Java 应用程序的拓展参数,甚至支持在运行时,修改部分参数,基本语法为:
jinfo <option> <pid> 复制代码
其中 option 可以为以下信息:
例如查看当前新生代对象晋升到老年代对象的最大年龄;
[root@VM_0_6_centos ~]# jinfo -flag MaxTenuringThreshold 29839 -XX:MaxTenuringThreshold=15 复制代码
查看虚拟机状态;
[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 工具是 JDK 自带的图形化性能监控工具,位于 %JAVA_HOME%/bin 目录下,启动如下图所示;
连接上 Java 应用程序后,便可以查看应用程序概况;