系统经研发测试上线后,如果运行期间出现了BUG,需要对服务故障进行定位,一般会查看服务器负载、服务状态、进程管理、服务日志等。
本文以CentOS 7.0 操作系统上的命令操作作为示例进行记录。
# 常用包安装:top
[root@webf ~]# yum install -y procps
# 常用包安装:netstat
[root@webf ~]# yum install -y net-tools
# 常用包安装:lsof:查看系统中已经打开的文件、网络连接和进程
[root@webf ~]# yum install -y lsof
# 常用包安装:vmstat、ifstat:查看系统中已经打开的文件、网络连接和进程
[root@webf ~]# yum install -y dstat
# 常用包安装:iostat:IO性能分析
[root@webf ~]# yum install -y sysstat
#服务器负载
# 实时显示系统中各个进程的资源占用情况
[root@iZbp1eeysy7bvfz9km5t5wZ boot]# top
top - 09:15:29 up 5 days, 20:59, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 16269004 total, 870004 used, 15399000 free, 159804 buffers
KiB Swap: 0 total, 0 used, 0 free. 399772 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4562 root 20 0 123644 1584 1116 R 0.3 0.0 0:00.02 top
1 root 20 0 49676 3768 2284 S 0.0 0.0 0:03.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.21 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u16:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.04 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/5
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/6
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/7
17 root 20 0 0 0 0 S 0.0 0.0 2:36.71 rcu_sched
18 root 20 0 0 0 0 S 0.0 0.0 0:21.22 rcuos/0
19 root 20 0 0 0 0 S 0.0 0.0 0:24.70 rcuos/1
20 root 20 0 0 0 0 S 0.0 0.0 0:24.60 rcuos/2
21 root 20 0 0 0 0 S 0.0 0.0 0:21.66 rcuos/3
22 root 20 0 0 0 0 S 0.0 0.0 0:22.32 rcuos/4
23 root 20 0 0 0 0 S 0.0 0.0 0:19.20 rcuos/5
24 root 20 0 0 0 0 S 0.0 0.0 0:22.12 rcuos/6
25 root 20 0 0 0 0 S 0.0 0.0 0:22.54 rcuos/7
26 root rt 0 0 0 0 S 0.0 0.0 0:02.03 watchdog/0
27 root rt 0 0 0 0 S 0.0 0.0 0:01.76 watchdog/1
28 root rt 0 0 0 0 S 0.0 0.0 0:00.04 migration/1
29 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/1
# 顶部信息解读
09:15:29 是当前的本地时间和日期。
up 5 days, 20:59 表示系统已经运行了5天20小时59分钟。
1 user 表示当前有1个用户登录。
load average: 0.00, 0.01, 0.05 是系统的负载情况,包括过去的1分钟、5分钟、15分钟的平均负载。这些数字越接近0,表示系统的负载越低。
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie 这行显示了当前系统的总任务数,正在运行的进程数,正在睡眠的进程数,已经停止的进程数,以及已经死掉的进程数。
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 这行显示了CPU的利用率。其中us表示用户进程使用CPU的时间,sy表示系统进程使用CPU的时间,ni表示nice值为-20的进程使用CPU的时间,id表示空闲时间,wa表示等待I/O操作的时间,hi表示硬件中断处理的时间,si表示软件中断处理的时间,st表示 steal time(被偷走的时间)。
KiB Mem: 16269004 total, 870004 used, 15399000 free, 159804 buffers 这行显示了内存的使用情况。其中total表示总内存,used表示已经使用的内存,free表示空闲内存,buffers表示用于存储文件系统缓存的内存。
KiB Swap: 0 total, 0 used, 0 free. 399772 cached Mem 这行显示了交换空间(Swap space)的使用情况。在Linux系统中,当物理内存不足时,一些暂时不用的进程会被移到交换空间中,以释放物理内存。这里total表示总的交换空间大小,used表示已经使用的交换空间大小,free表示空闲的交换空间大小,而cached Mem表示已经被缓存的内存大小。
# 各列信息解读
PID:进程ID。
USER:进程所有者。
PR:进程优先级。
NI:nice值。
VIRT:进程使用的虚拟内存量。
RES:进程使用的物理内存量。
SHR:共享内存量。
S:进程状态(D=不可中断的睡眠状态,R=运行状态,S=睡眠状态,T=跟踪状态,Z=僵尸状态)。
%CPU:占用的CPU使用率。
%MEM:占用的内存使用率。
TIME+:进程启动后的累计CPU时间。
COMMAND:进程名或命令名。
# IO负载:TPS和吞吐量信息(磁盘读写速度单位为KB),每1s收集1次数据,共收集10次后退出
[root@webf ~]# iostat -d -k 1 10
Linux 3.10.0-123.el7.x86_64 (webf.com) 11/15/2023 _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 2.31 51.06 109.52 213994 458982
sdb 0.11 0.68 1.06 2833 4452
dm-0 0.07 0.46 1.06 1937 4452
dm-1 0.01 0.03 0.00 112 0
# 网络负载:网络发送和接收信息(数据接收和发送速度单位为每秒比特数)
[root@webf ~]# ifstat
#kernel
Interface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate
RX Errs/Drop TX Errs/Drop RX Over/Rate TX Coll/Rate
lo 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ens33 97 0 76 0 9004 0 12816 0
0 0 0 0 0 0 0 0
docker0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
完整参见:http://www.laobingbiji.com/note/detail.html?note_id=202311151543370000000010318657