现网如果出现问题,第一时间不是定位分析问题;而是先解决问题,不管是有损还是无损,对发生日常点进行隔离
,比如把出现问题的微服务下线,切换到其他集群等;接着是保留现场
,第三步才是问题排查
,找出原因再解决掉。
CPU、内存、网络、IO,系统出现问题时,主要是这四个方面。其他的现网问题大部分是业务逻辑问题
网络
系统当前网络连接 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
:网络连接的状态,例如ESTABLISHED
、CLOSE_WAIT
、TIME_WAIT
、LISTEN
等。不同的状态表示连接的不同阶段和状态。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篇复习: 终篇 (线上故障排查)