Troubleshooting系列基于Linux系统线上故障排查命令汇总

2023年 7月 14日 16.3k 0

现网如果出现问题,第一时间不是定位分析问题;而是先解决问题,不管是有损还是无损,对发生日常点进行隔离,比如把出现问题的微服务下线,切换到其他集群等;接着是保留现场,第三步才是问题排查,找出原因再解决掉。

CPU、内存、网络、IO,系统出现问题时,主要是这四个方面。其他的现网问题大部分是业务逻辑问题

image.png

网络

系统当前网络连接 ss

ss -antp > $DUMP_DIR/ss.dump 2>&1

mysql@TOBY-HYW:~$ export DUMP_DIR=/home/mysql/dumpdir
mysql@TOBY-HYW:~$ ss -antp > $DUMP_DIR/ss.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat ss.dump
State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
LISTEN 0      20         127.0.0.1:6010       0.0.0.0:*     users:(("wslconnect",pid=398,fd=6))
LISTEN 0      20         127.0.0.1:6011       0.0.0.0:*     users:(("wslconnect",pid=871,fd=7))
LISTEN 0      128          0.0.0.0:220        0.0.0.0:*
LISTEN 0      4096   127.0.0.53%lo:53         0.0.0.0:*
ESTAB  0      0          127.0.0.1:59466    127.0.0.1:22004
ESTAB  0      0          127.0.0.1:22003    127.0.0.1:38966 users:(("wslconnect",pid=398,fd=4))
ESTAB  0      0          127.0.0.1:38966    127.0.0.1:22003
ESTAB  0      0          127.0.0.1:22004    127.0.0.1:59466 users:(("wslconnect",pid=871,fd=5))
LISTEN 0      128             [::]:220           [::]:*
LISTEN 0      80                 *:3306             *:*     users:(("mysqld",pid=809,fd=39))

ss命令是Linux中的一个非常强大的网络工具,它可以替代老旧的netstat命令。相比于netstat命令,ss命令更快、更准确、更易于使用

各个字段的含义如下:

  • State:网络连接的状态,例如 ESTABLISHEDCLOSE_WAITTIME_WAITLISTEN 等。不同的状态表示连接的不同阶段和状态。
  • Recv-Q:接收队列的长度,即等待读取的字节数。
  • Send-Q:发送队列的长度,即等待发送的字节数。
  • Local Address:Port:本地端点的IP地址和端口号。
  • Peer Address:Port:远程端点的IP地址和端口号。
  • Process:与连接关联的进程或应用程序的名称或进程ID。

网络状态统计 netstat

netstat -s > $DUMP_DIR/netstat-s.dump 2>&1

它可以显示各种网络协议的统计信息,例如TCP、UDP、ICMP等,以及其他网络层和传输层信息。该命令提供了一个全面的视图,以了解系统的网络性能和行为。

mysql@TOBY-HYW:~/dumpdir$ netstat -s > $DUMP_DIR/netstat-s.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat netstat-s.dump
Ip:
    Forwarding: 2
    1311 total packets received
    0 forwarded
    0 incoming packets discarded
    1279 incoming packets delivered
    1275 requests sent out
Icmp:
    0 ICMP messages received
    0 input ICMP message failed
    ICMP input histogram:
    0 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
Tcp:
    3 active connection openings
    2 passive connection openings
    0 failed connection attempts
    0 connection resets received
    4 connections established
    1276 segments received
    1274 segments sent out
    0 segments retransmitted
    0 bad segments received
    0 resets sent
Udp:
    2 packets received
    0 packets to unknown port received
    0 packet receive errors
    2 packets sent
    0 receive buffer errors
    0 send buffer errors
    IgnoredMulti: 1
UdpLite:
TcpExt:
    87 delayed acks sent
    642 packet headers predicted
    69 acknowledgments not containing data payload received
    631 predicted acknowledgments
    TCPRcvCoalesce: 21
    TCPOFOQueue: 4
    TCPAutoCorking: 1
    TCPOrigDataSent: 795
    TCPDelivered: 796
IpExt:
    InBcastPkts: 1
    InOctets: 193506
    OutOctets: 172136
    InBcastOctets: 229
    InNoECTPkts: 1316
Sctp:
    0 Current Associations
    0 Active Associations
    0 Passive Associations
    0 Number of Aborteds
    0 Number of Graceful Terminations
    0 Number of Out of Blue packets
    0 Number of Packets with invalid Checksum
    0 Number of control chunks sent
    0 Number of ordered chunks sent
    0 Number of Unordered chunks sent
    0 Number of control chunks received
    0 Number of ordered chunks received
    0 Number of Unordered chunks received
    0 Number of messages fragmented
    0 Number of messages reassembled
    0 Number of SCTP packets sent
    0 Number of SCTP packets received

netstat -s命令的输出包含了以下信息:

  • Ip:IP层协议的统计信息。
  • Icmp:ICMP协议的统计信息。
  • IcmpMsg:ICMP消息的统计信息。
  • Tcp:TCP协议的统计信息。
  • Udp:UDP协议的统计信息。
  • UdpLite:UDP-Lite协议的统计信息。
  • TcpExt:TCP扩展统计信息。
  • IpExt:IP扩展统计信息。

sar -n DEV 1 5 > $DUMP_DIR/sar-traffic.dump 2>&1

用于显示网络接口的活动情况,以及网络流量和网络错误等指标。它是System Activity Reporter (SAR) 工具的一部分,可用于监视系统的各种性能指标。

mysql@TOBY-HYW:~/dumpdir$ sar -n DEV 1 5 > $DUMP_DIR/sar-traffic.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat sar-traffic.dump
Linux 5.15.90.1-microsoft-standard-WSL2 (TOBY-HYW)      07/09/23        _x86_64_        (8 CPU)

15:31:10        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:31:11           lo     14.00     14.00      1.52      1.52      0.00      0.00      0.00      0.00
15:31:11         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

15:31:11        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:31:12           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:31:12         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

15:31:12        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:31:13           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:31:13         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

15:31:13        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:31:14           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:31:14         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

15:31:14        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:31:15           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:31:15         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:           lo      2.80      2.80      0.30      0.30      0.00      0.00      0.00      0.00
Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

sar -n DEV 1 5 命令会每1秒钟显示一次网络接口的统计信息,共显示5次。它的输出包括以下列:

  • IFACE:网络接口的名称。
  • rxpck/s:每秒钟接收的数据包数。
  • txpck/s:每秒钟发送的数据包数。
  • rxkB/s:每秒钟接收的数据量(以KB为单位)。
  • txkB/s:每秒钟发送的数据量(以KB为单位)。
  • rxcmp/s:每秒钟接收的压缩数据包数。
  • txcmp/s:每秒钟发送的压缩数据包数。
  • rxmcst/s:每秒钟接收的多播数据包数。
  • %ifutil:网络接口的利用率。

进程

lsof -p $PID > $DUMP_DIR/lsof-$PID.dump

通过查看进程,能看到打开了哪些文件,可以以进程的维度来查看整个资源的使用情况,包括每条网络连接、每个打开的文件句柄。同时,也可以很容易的看到连接到了哪些服务器、使用了哪些资源。这个命令在资源非常多的情况下,输出稍慢,请耐心等待。

mysql@TOBY-HYW:~/dumpdir$ lsof -p 809 > $DUMP_DIR/lsof-809.dump
mysql@TOBY-HYW:~/dumpdir$ cat lsof-809.dump
COMMAND PID  USER   FD   TYPE             DEVICE  SIZE/OFF  NODE NAME
mysqld  809 mysql  cwd    DIR               8,32      4096 26974 /home/mysql/mysql3306/data
mysqld  809 mysql  rtd    DIR               8,32      4096     2 /
mysqld  809 mysql  txt    REG               8,32 255842548 33189 /home/mysql/mysql3306/bin/mysqld
mysqld  809 mysql  DEL    REG               0,16           19653 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19652 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19651 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19650 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19649 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19648 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19647 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19646 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19645 /[aio]
mysqld  809 mysql  DEL    REG               0,16           19644 /[aio]
mysqld  809 mysql  mem    REG               8,32   2216304  6502 /usr/lib/x86_64-linux-gnu/libc.so.6
mysqld  809 mysql  mem    REG               8,32    125488  6570 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
mysqld  809 mysql  mem    REG               8,32    940560  6664 /usr/lib/x86_64-linux-gnu/libm.so.6
mysqld  809 mysql  mem    REG               8,32   2252096  6808 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
mysqld  809 mysql  mem    REG               8,32     14664  6783 /usr/lib/x86_64-linux-gnu/librt.so.1
mysqld  809 mysql  mem    REG               8,32    198664  6513 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
mysqld  809 mysql  mem    REG               8,32     48152  6724 /usr/lib/x86_64-linux-gnu/libnuma.so.1.0.0
mysqld  809 mysql  mem    REG               8,32     14456 27116 /usr/lib/x86_64-linux-gnu/libaio.so.1.0.1
mysqld  809 mysql  mem    REG               8,32     14432  6532 /usr/lib/x86_64-linux-gnu/libdl.so.2
mysqld  809 mysql  mem    REG               8,32     21448  6777 /usr/lib/x86_64-linux-gnu/libpthread.so.0
mysqld  809 mysql  DEL    REG               0,16           19654 /[aio]
mysqld  809 mysql  mem    REG               8,32    240936  6306 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
mysqld  809 mysql  DEL    REG               0,16           19643 /[aio]
mysqld  809 mysql    0r   CHR                1,3       0t0     3 /dev/null
mysqld  809 mysql    1w   REG               8,32    101131  4814 /home/mysql/mysql3306/data/TOBY-HYW.err
mysqld  809 mysql    2w   REG               8,32    101131  4814 /home/mysql/mysql3306/data/TOBY-HYW.err
mysqld  809 mysql    3u   REG               8,32       264 14995 /home/mysql/mysql3306/data/mysq3306-bin.index
mysqld  809 mysql    4uW  REG               8,32  50331648 27097 /home/mysql/mysql3306/data/ib_logfile0
mysqld  809 mysql    5u   REG               8,32         0 11125 /tmp/ibboIhI1 (deleted)
mysqld  809 mysql    6u   REG               8,32         0 11133 /tmp/ibagEwDv (deleted)
mysqld  809 mysql    7u   REG               8,32         0 11134 /tmp/ibw2BDer (deleted)
mysqld  809 mysql    8u   REG               8,32         0 11139 /tmp/ibnWHye0 (deleted)
mysqld  809 mysql    9uW  REG               8,32  50331648 29383 /home/mysql/mysql3306/data/ib_logfile1
mysqld  809 mysql   10uW  REG               8,32  79691776 27079 /home/mysql/mysql3306/data/ibdata1
mysqld  809 mysql   11uW  REG               8,32  46137344 12538 /home/mysql/mysql3306/data/toby/t9.ibd
mysqld  809 mysql   12uW  REG               8,32     98304 32830 /home/mysql/mysql3306/data/mysql/gtid_executed.ibd
mysqld  809 mysql   13u   REG               8,32         0 13926 /tmp/ibQLT7G6 (deleted)
mysqld  809 mysql   14uW  REG               8,32     98304 32822 /home/mysql/mysql3306/data/mysql/innodb_index_stats.ibd
mysqld  809 mysql   15uW  REG               8,32     98304 32820 /home/mysql/mysql3306/data/mysql/innodb_table_stats.ibd
mysqld  809 mysql   16uW  REG               8,32  12582912 11129 /home/mysql/mysql3306/data/ibtmp1
mysqld  809 mysql   17uW  REG               8,32     98304 32754 /home/mysql/mysql3306/data/mysql/plugin.ibd
mysqld  809 mysql   18uW  REG               8,32     98304 29642 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_3.ibd
mysqld  809 mysql   19uW  REG               8,32     98304 32794 /home/mysql/mysql3306/data/mysql/time_zone.ibd
mysqld  809 mysql   20uW  REG               8,32     98304 32796 /home/mysql/mysql3306/data/mysql/time_zone_transition.ibd
mysqld  809 mysql   21uW  REG               8,32     98304 32798 /home/mysql/mysql3306/data/mysql/time_zone_transition_type.ibd
mysqld  809 mysql   22uW  REG               8,32     98304 32800 /home/mysql/mysql3306/data/mysql/time_zone_leap_second.ibd
mysqld  809 mysql   23uW  REG               8,32     98304 32824 /home/mysql/mysql3306/data/mysql/slave_relay_log_info.ibd
mysqld  809 mysql   24uW  REG               8,32     98304 32826 /home/mysql/mysql3306/data/mysql/slave_master_info.ibd
mysqld  809 mysql   25uW  REG               8,32     98304 32828 /home/mysql/mysql3306/data/mysql/slave_worker_info.ibd
mysqld  809 mysql   26uW  REG               8,32     98304 32832 /home/mysql/mysql3306/data/mysql/server_cost.ibd
mysqld  809 mysql   27uW  REG               8,32     98304 32834 /home/mysql/mysql3306/data/mysql/engine_cost.ibd
mysqld  809 mysql   28uW  REG               8,32     98304 29637 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_CONFIG.ibd
mysqld  809 mysql   29uW  REG               8,32     98304 29638 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_DELETED.ibd
mysqld  809 mysql   30uW  REG               8,32     98304 29639 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_DELETED_CACHE.ibd
mysqld  809 mysql   31uW  REG               8,32     98304 29640 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_1.ibd
mysqld  809 mysql   32uW  REG               8,32     98304 29641 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_2.ibd
mysqld  809 mysql   33uW  REG               8,32     98304 29643 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_4.ibd
mysqld  809 mysql   34uW  REG               8,32     98304 29644 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_5.ibd
mysqld  809 mysql   35uW  REG               8,32     98304 29645 /home/mysql/mysql3306/data/toby/FTS_0000000000000038_0000000000000047_INDEX_6.ibd
mysqld  809 mysql   36uW  REG               8,32    114688 29609 /home/mysql/mysql3306/data/toby/merchant.ibd
mysqld  809 mysql   37uW  REG               8,32    114688 29417 /home/mysql/mysql3306/data/toby/product.ibd
mysqld  809 mysql   38w   REG               8,32      2707 29221 /home/mysql/mysql3306/log/slow.log
mysqld  809 mysql   39u  IPv6                438       0t0   TCP *:mysql (LISTEN)
mysqld  809 mysql   40w   REG               8,32       194 13934 /home/mysql/mysql3306/data/mysq3306-bin.000012
mysqld  809 mysql   41u  unix 0x0000000000000000       0t0   439 /home/mysql/mysql3306/mysqld.sock type=STREAM
mysqld  809 mysql   42u   REG               8,32      4096 32732 /home/mysql/mysql3306/data/mysql/user.MYI
mysqld  809 mysql   43u   REG               8,32       500 32739 /home/mysql/mysql3306/data/mysql/user.MYD
mysqld  809 mysql   44u   REG               8,32      5120 32702 /home/mysql/mysql3306/data/mysql/db.MYI
mysqld  809 mysql   45u   REG               8,32       976 32703 /home/mysql/mysql3306/data/mysql/db.MYD
mysqld  809 mysql   46u   REG               8,32      9216 32926 /home/mysql/mysql3306/data/mysql/proxies_priv.MYI
mysqld  809 mysql   47u   REG               8,32       837 32927 /home/mysql/mysql3306/data/mysql/proxies_priv.MYD
mysqld  809 mysql   48uW  REG               8,32     98304 32792 /home/mysql/mysql3306/data/mysql/time_zone_name.ibd
mysqld  809 mysql   49u   REG               8,32      9216 32765 /home/mysql/mysql3306/data/mysql/tables_priv.MYI
mysqld  809 mysql   50u   REG               8,32      1894 32767 /home/mysql/mysql3306/data/mysql/tables_priv.MYD
mysqld  809 mysql   51u   REG               8,32      4096 32774 /home/mysql/mysql3306/data/mysql/columns_priv.MYI
mysqld  809 mysql   52u   REG               8,32         0 32776 /home/mysql/mysql3306/data/mysql/columns_priv.MYD
mysqld  809 mysql   53u   REG               8,32      4096 32805 /home/mysql/mysql3306/data/mysql/procs_priv.MYI
mysqld  809 mysql   54u   REG               8,32         0 32806 /home/mysql/mysql3306/data/mysql/procs_priv.MYD
mysqld  809 mysql   55uW  REG               8,32     98304 32761 /home/mysql/mysql3306/data/mysql/servers.ibd
mysqld  809 mysql   56u   REG               8,32      2048 32814 /home/mysql/mysql3306/data/mysql/event.MYI
mysqld  809 mysql   57u   REG               8,32         0 32815 /home/mysql/mysql3306/data/mysql/event.MYD
mysqld  809 mysql   58u  unix 0x0000000000000000       0t0   445 /home/mysql/mysql3306/mysqld.sock type=STREAM

各个字段的含义如下:

  • COMMAND:打开文件或资源的进程的名称。
  • PID:打开文件或资源的进程的ID。
  • USER:打开文件或资源的进程的所有者。
  • FD:文件描述符,即打开文件或资源的进程使用的文件描述符的编号。
  • TYPE:文件或资源的类型,例如REG(常规文件)、DIR(目录)、SOCK(套接字)、PIPE(管道)等。
  • DEVICE:文件或资源所在的设备的名称或编号。
  • SIZE/OFF:文件或资源的大小或偏移量。
  • NODE:文件或资源的节点号或句柄。
  • NAME:文件或资源的名称或路径。

CPU资源

mpstat > $DUMP_DIR/mpstat.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ cat mpstat.dump
Linux 5.15.90.1-microsoft-standard-WSL2 (TOBY-HYW)      07/09/23        _x86_64_        (8 CPU)

15:49:44     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15:49:44     all    0.09    0.00    0.05    0.06    0.00    0.01    0.00    0.00    0.00   99.79

mpstat命令 主要用于多CPU环境下,它显示各个可用CPU的状态信息。这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

mpstat -P ALL 2 3 每2秒产生全部处理器的统计数据报告,一共产生三个interval的信息,最后再给出这三个interval的平均信息。

详细参考 mpstat

vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat vmstat.dump
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 6711428 132304 482804    0    0    20     2    5   23  0  0 100  0  0
 0  0      0 6711428 132304 482848    0    0     0     0   37  171  0  0 100  0  0
 0  0      0 6709396 132304 482848    0    0     0     0   14  123  0  0 100  0  0

vmstat命令 的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。

字段说明:

Procs(进程)

  • r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
  • b: 等待IO的进程数量。

Memory(内存)

  • swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
  • free: 空闲物理内存大小。
  • buff: 用作缓冲的内存大小。
  • cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

Swap

  • si: 每秒从交换区写到内存的大小,由磁盘调入内存。
  • so: 每秒写入交换区的内存大小,由内存调入磁盘。

注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

IO(现在的Linux版本块的大小为1kb)

  • bi: 每秒读取的块数
  • bo: 每秒写入的块数

注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system(系统)

  • in: 每秒中断数,包括时钟中断。
  • cs: 每秒上下文切换数。

注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

CPU(以百分比表示)

  • us: 用户进程执行时间百分比(user time)

us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

  • sy: 内核系统进程执行时间百分比(system time)

sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

  • wa: IO等待时间百分比

wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

  • id: 空闲时间百分比

具体参考 vmstat

sar -p 1 3 > $DUMP_DIR/sar-cpu.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ sar -p 1 3 > $DUMP_DIR/sar-cpu.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat sar-cpu.dump
Linux 5.15.90.1-microsoft-standard-WSL2 (TOBY-HYW)      07/09/23        _x86_64_        (8 CPU)

16:21:19        CPU     %user     %nice   %system   %iowait    %steal     %idle
16:21:20        all      0.00      0.00      0.00      0.00      0.00    100.00
16:21:21        all      0.00      0.00      0.00      0.00      0.00    100.00
16:21:22        all      0.00      0.00      0.12      0.00      0.00     99.88
Average:        all      0.00      0.00      0.04      0.00      0.00     99.96

uptime > $DUMP_DIR/uptime.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ uptime > $DUMP_DIR/uptime.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat uptime.dump
 16:23:36 up  1:08,  1 user,  load average: 0.00, 0.00, 0.00

uptime命令 能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

I/O 资源

iostat -x > $DUMP_DIR/iostat.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ iostat -x > $DUMP_DIR/iostat.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$ cat iostat.dump
Linux 5.15.90.1-microsoft-standard-WSL2 (TOBY-HYW)      07/09/23        _x86_64_        (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.04    0.03    0.00   99.87

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda              0.26     16.69     0.10  28.18    0.37    63.84    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.02
sdb              0.02      0.55     0.00   0.00    0.47    22.87    0.00      0.00     0.00   0.00    3.50     2.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    4.00    0.00   0.00
sdc              8.16     80.76     0.37   4.35    0.38     9.90    0.41      8.47     0.24  37.21    6.72    20.84    0.01      3.01     0.00   0.00    0.29   228.29    0.07    1.68    0.01   0.23

iostat命令 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

标示 说明
Device 监测设备名称
rrqm/s 每秒需要读取需求的数量
wrqm/s 每秒需要写入需求的数量
r/s 每秒实际读取需求的数量
w/s 每秒实际写入需求的数量
rsec/s 每秒读取区段的数量
wsec/s 每秒写入区段的数量
rkB/s 每秒实际读取的大小,单位为KB
wkB/s 每秒实际写入的大小,单位为KB
avgrq-sz 需求的平均大小区段
avgqu-sz 需求的平均队列长度
await 等待I/O平均的时间(milliseconds)
svctm I/O需求完成的平均时间
%util 设备带宽的使用率,达到100%表示饱和,达到性能瓶颈,如果是支持处理并发请求的设备则不代表性能瓶颈。

内存

free -h > $DUMP_DIR/free.dump 2>&1

mysql@TOBY-HYW:~/dumpdir$ free -h > $DUMP_DIR/free.dump 2>&1
mysql@TOBY-HYW:~/dumpdir$
mysql@TOBY-HYW:~/dumpdir$
mysql@TOBY-HYW:~/dumpdir$ cat free.dump
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       694Mi       6.4Gi       3.0Mi       612Mi       6.8Gi
Swap:          2.0Gi          0B       2.0Gi

其他全局

ps -ef > $DUMP_DIR/ps.dump 2>&1

dmesg > $DUMP_DIR/dmesg.dump 2>&1

dmesg命令 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在/var/log/dmesg文件里。

sysctl -a > $DUMP_DIR/sysctl.dump 2>&1

sysctl命令 被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。

sysctl -a 打印当前所有可用的内核参数变量和值

JAVA进程现场保留

参考之前文章 Troubleshooting系列-JAVA虚拟机命令总结

命令汇总如下:

jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1

jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1
jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1

jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null  2>&1
jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1
jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1
jmap $PID > $DUMP_DIR/jmap.dump 2>&1

jstack $PID > $DUMP_DIR/jstack.dump 2>&1

如果jstack不能运行,可以尝试向进程发送kill -3 $PID

参考
1.JVM篇复习: 终篇 (线上故障排查)

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论