Linux常用性能监控命令 朱雀 2022-12-02 03:55 349阅读 0赞 # CPU # * `user`(通常缩写为`us`),代表用户态CPU时间。不包括下面的`nice`时间,但包括了`guest`时间 * `nice`(通常缩写为`ni`),代表低优先级用户态CPU时间,也就是进程的`nice`值被调整为1-19之间时的CPU时间。`nice`可取值范围是-20 到19,数值越大,优先级反而越低 * `system`(通常缩写为 `sys`),代表内核态CPU时间 * `idle`(通常缩写为 `id`),代表空闲时间。它不包括等待I/O 的时间(`iowait`) * `iowait`(通常缩写为 `wa`),代表等待I/O的CPU时间 * `irq`(通常缩写为 `hi`),代表处理硬中断的CPU时间 * `softirq`(通常缩写为 `si`),代表处理软中断的CPU时间 * `steal`(通常缩写为`st`),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间 * `guest`(通常缩写为`guest`),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间 * `guest_nice`(通常缩写为`gnice`),代表以低优先级运行虚拟机的时间 ## CPU使用率 ## ### mpstat ### **CPU使用率实时统计** mpstat 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时36分16秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 15时36分17秒 all 3.34 0.00 1.80 0.00 0.00 0.00 0.00 0.00 0.00 94.86 15时36分18秒 all 3.34 0.00 1.80 0.00 0.00 0.26 0.00 0.00 0.00 94.6 ### pidstat ### **指定进程的CPU使用率变化** pidstat -p 2245 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时42分37秒 UID PID %usr %system %guest %CPU CPU Command 15时42分38秒 10006 2245 1.00 0.00 0.00 1.00 1 java 15时42分39秒 10006 2245 1.00 1.00 0.00 2.00 1 java 15时42分40秒 10006 2245 3.00 0.00 0.00 3.00 1 java **各进程的CPU使用率变化** pidstat -u 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时45分42秒 UID PID %usr %system %guest %CPU CPU Command 15时45分43秒 10006 2245 1.98 0.99 0.00 2.97 1 java 15时45分43秒 10006 6742 0.99 0.99 0.00 1.98 3 java 15时45分43秒 10006 9982 0.99 0.00 0.00 0.99 3 java ### dstat ### **CPU/磁盘IO/网络数据实时监控** dstat 1 ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 3 1 95 0 0 0| 0 84k| 53k 59k| 0 0 |9017 12k 3 2 94 0 0 0| 0 0 | 54k 43k| 0 0 |9468 13k 5 2 93 0 0 0| 0 0 | 50k 60k| 0 0 |9294 12k ## CPU上下文切换 ## ### pidstat ### **各进程CPU上下文切换统计** pidstat -w 1 平均时间: UID PID cswch/s nvcswch/s Command 平均时间: 10006 13621 5.33 0.00 nginx 平均时间: 10006 13622 8.44 0.00 nginx 平均时间: 10006 13623 11.54 0.00 nginx * `cswch` 表示每秒自愿上下文切换(voluntary context switches)的次数 * `nvcswch`表示每秒非自愿上下文切换(non voluntary context switches)的次数 **指定进程CPU上下文切换统计** `pidstat`默认显示进程的指标数据,加上`-t`参数后,才会输出线程的指标。 pidstat -w -p 2245 -t 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 16时05分46秒 UID TGID TID cswch/s nvcswch/s Command 16时05分47秒 10006 2245 - 0.00 0.00 java 16时05分47秒 10006 - 2245 0.00 0.00 |__java 16时05分47秒 10006 - 2255 1.00 0.00 |__java 16时05分47秒 10006 - 2263 20.00 0.00 |__java ### vmstat ### **CPU上下文切换计数** vmstat 1 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 176612 114152 5818372 0 0 0 4 8561 11181 2 2 95 0 0 0 0 0 176304 114152 5818372 0 0 0 4 8550 11118 2 2 96 0 0 0 0 0 176792 114152 5818396 0 0 0 0 8767 11367 3 1 96 0 0 * `cs`(context switch)是每秒上下文切换的次数 * `in`(interrupt)则是每秒中断的次数 * `r`(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程 数 * `b`(Blocked)则是处于不可中断睡眠状态的进程数 ## CPU中断 ## ### softirqs ### **CPU软中断计数** watch -n 1 'cat /proc/softirqs' CPU0 CPU1 CPU2 CPU3 HI: 9 4 6 3 TIMER: 2214338633 4121419965 2762914647 2138523262 NET_TX: 861743 808676 915818 651005 NET_RX: 3037620031 2545651729 3057664107 1391391372 BLOCK: 0 0 0 0 BLOCK_IOPOLL: 0 0 0 0 TASKLET: 313223 305907 313136 282939 SCHED: 3189449832 2466757727 3115282943 2507068099 HRTIMER: 0 0 0 0 RCU: 2053967698 2003167979 2116164634 1891079850 * `TIMER`: 定时产生的软中断 * `NET_RX`: 网络接收产生的软中断 * `NET_TX`: 网络发送产生的软中断 * `SCHED`: 内核调度产生的软中断 * `RCU`: RCU产生的软中断 ## CPU监控采样统计 ## ### perf ### ### arthas ### [Arthas 用户文档][Arthas] **指定JVM进程生成CPU热点火焰图** 1. 启动arthas wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar 1. 启动profiler $ profiler start Started [cpu] profiling 1. 获取已采集的sample的数量 $ profiler getSamples 23 1. 查看profiler状态 $ profiler status [cpu] profiling is running for 4 seconds 1. 生成svg格式火焰图 $ profiler stop profiler output file: /tmp/demo/arthas-output/20191125-135546.svg OK 1. 正确退出 $ shutdown ### async-profiler ### [async-profiler][] **指定JVM进程生成CPU热点火焰图** ./profiler.sh -d 30 -f ./flamegraph.svg 17616 * `-d`: 分析持续时间,单位秒 # 内存 # * `VIRT`是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内 * `RES`是常驻内存的大小,也就是进程实际使用的物理内存大小但不包括Swap和共享内存 * `SHR`是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等 * `%MEM`是进程使用物理内存占系统总内存的百分比 ## 内存占用统计 ## ### free ### **内存占用统计** free -h total used free shared buff/cache available Mem: 15G 9.7G 156M 2.4M 5.7G 5.4G Swap: 0B 0B 0B * `total`: 总内存大小 * `used`: 已使用内存的大小,包含了共享内存 * `free`: 未使用内存的大小 * `shared`: 共享内存的大小 * `buff/cache`: 缓存和缓冲区的大小 * `available`: 新进程可用内存的大小 ### vmstat ### **内存占用实时统计** vmstat 1 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 176612 114152 5818372 0 0 0 4 8561 11181 2 2 95 0 0 0 0 0 176304 114152 5818372 0 0 0 4 8550 11118 2 2 96 0 0 0 0 0 176792 114152 5818396 0 0 0 0 8767 11367 3 1 96 0 0 ### ps ### **各进程按物理内存排序** ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz PID COMMAND COMMAND %CPU RSZ VSZ STIME USER UID 6742 java java -jar -server -Xms1024M 2.1 1026192 6085356 8月13 webapp 10006 9982 java java -jar -server -Xmx1024M 0.8 951572 5192560 8月10 webapp 10006 13289 java java -jar -server -Xms1024M 0.3 747960 4994932 8月05 webapp 10006 ## 文件缓存 ## ### pcstat ### **文件缓存命中率** 安装脚本 #!/bin/bash if [ $(uname -m) == "x86_64" ] ; then curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64 else curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_32 fi chmod 755 pcstat ./pcstat ./logs/* |---------------------------------+----------------+------------+-----------+---------| | Name | Size | Pages | Cached | Percent | |---------------------------------+----------------+------------+-----------+---------| | ./logs/member-wx.20200814.log | 373896477 | 91284 | 15881 | 017.397 | | ./logs/member-wx.20200815.log | 317053634 | 77406 | 74450 | 096.181 | | ./logs/member-wx.20200816.log | 293448138 | 71643 | 71157 | 099.322 | | ./logs/member-wx.log | 89022207 | 21734 | 21734 | 100.000 | |---------------------------------+----------------+------------+-----------+---------| # 磁盘IO # ## 磁盘IO读写统计 ## ### pidstat ### **各进程的IO读写** pidstat -d 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 16时22分28秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 16时22分29秒 10006 2245 0.00 7.92 0.00 java 16时22分29秒 10006 13621 0.00 3.96 0.00 nginx ### iostat ### **各磁盘IO实时读写统计** iostat -x 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 11.31 0.00 1.99 0.05 0.00 86.65 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.92 0.06 1.78 4.00 14.95 20.58 0.01 4.95 16.35 4.56 0.46 0.08 vdb 0.00 0.05 0.43 0.95 27.82 40.99 99.55 0.03 23.05 24.75 22.28 1.68 0.23 dm-0 0.00 0.00 0.43 0.96 27.82 40.99 98.82 0.03 24.16 27.92 22.48 1.67 0.23 ### iotop ### **各线程IO读写排序** iotop -o Total DISK READ : 0.00 B/s | Total DISK WRITE : 24.89 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 10821 be/4 webapp 0.00 B/s 3.56 K/s 0.00 % 0.00 % java 10832 be/4 webapp 0.00 B/s 7.11 K/s 0.00 % 0.00 % java 10833 be/4 webapp 0.00 B/s 3.56 K/s 0.00 % 0.00 % java **各进程IO读写排序** iotop -P -o FTotal DISK READ : 0.00 B/s | Total DISK WRITE : 25.29 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 10758 be/4 webapp 0.00 B/s 14.45 K/s 0.00 % 0.00 % java 19976 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % java 32501 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % ./service 13623 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % nginx: worker process ## 进程打开的文件 ## ### lsof ### **进程打开的文件** lsof -p 10893 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 10893 webapp rtd DIR 253,1 4096 2 / java 10893 webapp txt REG 252,0 7734 201451573 /opt/jdk1.8.0_131/bin/java java 10893 webapp mem REG 252,0 256766 134407539 /opt/jdk1.8.0_131/jre/lib/amd64/libsunec.so # 网络 # ## 网络数据读写监控 ## ### sar ### **网络数据包实时发送情况** sar -n DEV 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) 15时17分39秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 15时17分40秒 eth0 655.00 408.00 145.84 83.68 0.00 0.00 0.00 15时17分40秒 lo 79.00 79.00 18.35 18.35 0.00 0.00 0.00 * `rxpck/s`,`txpck/s`: 每秒接收发送的网络帧数 * `rxKB/s`,`txKB/s`: 每秒接收发送的千字节数 ### iftop ### **按IP网络流速排行** iftop -B ![在这里插入图片描述][20200829152346836.png] **按IP:端口号网络流速排行** iftop -B -P ![在这里插入图片描述][20200829152359703.png] * `TX`:发送 * `RX`:接收 * `TOTAL`:总和 * `cum`:运行iftop到目前时间的总流量 * `peak`:流量峰值 * `rates`:分别表示过去2s,10s,40s的平均流速 ### nethogs ### **按进程网络流速排行** nethogs PID USER PROGRAM DEV SENT RECEIVED 17664 webapp ./tasty eth0 3.395 6.446 KB/sec 10893 webapp java eth0 3.913 6.036 KB/sec 32501 webapp ./service eth0 2.284 5.843 KB/sec TOTAL 33.957 40.722 KB/sec ## socket连接 ## ### netstat ### **TCP连接展示** netstat -natp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 871/sshd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 13541/nginx: master tcp 0 52 172.x.x.x:22 220.x.x.x:21889 ESTABLISHED 22577/sshd: root@pt **TCP连接状态统计** netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' SYN_RECV 1 CLOSE_WAIT 39 ESTABLISHED 680 TIME_WAIT 261 ### ss ### **TCP连接状态统计** ss -s Total: 1015 (kernel 0) TCP: 914 (estab 595, closed 222, orphaned 0, synrecv 0, timewait 210/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 14 13 1 TCP 692 644 48 INET 706 657 49 FRAG 0 0 0 **监听端口展示** ss -lnt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 *:443 *:* LISTEN 0 128 :::111 :::* LISTEN 0 80 :::3316 :::* ## 网络异常 ## ### sar ### **网络异常包实时监控** sar -n ETCP 1 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) 21时11分09秒 atmptf/s estres/s retrans/s isegerr/s orsts/s 21时11分10秒 2.00 0.00 0.00 0.00 2.00 21时11分11秒 1.00 0.00 1.00 0.00 1.00 21时11分12秒 1.00 8.00 0.00 0.00 9.00 * `atmptf/s`: 每秒TCP连接`SYN-SENT`/`SYN-RCVD`转换到`CLOSED`状态,以及`SYN-RCVD`转换到`LISTEN`状态数 * `estres/s`: 每秒TCP连接从`ESTABLISHED`/`CLOSE-WAIT`状态转换到`CLOSED`状态数 * `retrans/s`: 每秒重传包数 * `isegerr/s`: 每秒接收错误段数(例如错误的TCP校验和) * `orsts/s`: 每秒发送RST包数 ### netstat ### **网络统计** 常用于统计网络丢包数量、丢包原因等数据。 netstat -s [Arthas]: https://alibaba.github.io/arthas/ [async-profiler]: https://github.com/jvm-profiling-tools/async-profiler [20200829152346836.png]: /images/20221123/ece40f3e65d149c883b5ffbc1af98028.png [20200829152359703.png]: /images/20221123/79e99e2e0e4f4be5bab11c0738f2a9bf.png
还没有评论,来说两句吧...