1. uptime 命令
查看机器的启动时间、登录用户、平均负载等情况,通常用于在线上应急或者技术攻关中,确定操作系统的重启时间。
从上面的输出可以看到如下信息 当前时间:
- 17:51:57 系统已经运行的时间:3天1小时50分钟。
- 系统平均负载:0.11 , 0.07, 0.05,为最近1分钟、5分钟、15分钟的系统负载情况。
那么如何理解load对应的数值那?假设当前平均负载为 2 时:
- 在只有 2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。
- 在 4 个 CPU 的系统上,则表示 CPU 有 50% 的空闲。
- 而在只有 1 个 CPU 的系统中, 则意味着有一半的进程禁止不到资源。
补充:
查看 CPU 信息:cat /proc/cpuinfo
查看 CPU 个数:cat /proc/cpuinfo|grep 'model name' | wc -l
2. top 命令
top命令用于查看活动进程的CPU和内存信息,能够实时显示系统中各个进程的资源占用情况,可以按照 CPU、内存的使用情况和执行时间对进程进行排序。
在 top 中,按下 Shift + P 可以按照 CPU 使用率(%CPU)对进程进行排序。
在 top 中,按下 Shift + M 可以按照内存使用率(%MEM)对进程进行排序。
[root@master zhao]# top
top - 20:39:11 up 2:08, 2 users, load average: 0.01, 0.02, 0.05
Tasks: 187 total, 1 running, 186 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4025944 total, 3223056 free, 373356 used, 429532 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3391552 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9 root 20 0 0 0 0 S 0.3 0.0 0:02.86 rcu_sched
1646 root 20 0 156948 5868 4400 S 0.3 0.1 0:10.52 sshd
12202 root 20 0 162108 2336 1580 R 0.3 0.1 0:00.11 top
1 root 20 0 193720 6816 4180 S 0.0 0.2 0:05.65 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
4 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.11 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.18 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.13 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
17 root rt 0 0 0 0 S 0.0 0.0 0:00.04 watchdog/2
18 root rt 0 0 0 0 S 0.0 0.0 0:00.15 migration/2
19 root 20 0 0 0 0 S 0.0 0.0 0:00.32 ksoftirqd/2
3. iostat 命令
iostat 命令用于监控CPU占用率、平均负载值及I/O读写速度等。
cpu的统计信息,如果是多cpu系统,显示的所有cpu的平均统计信息。
- # %user:用户进程消耗cpu的比例
- # %nice:用户进程优先级调整消耗的cpu比例
- # %sys:系统内核消耗的cpu比例
- # %iowait:等待磁盘io所消耗的cpu比例
- # %idle:闲置cpu的比例(不包括等待磁盘I/O)
磁盘的统计参数:
- # tps:该设备每秒的传输次数
- # the device.)。"一次传输"意思是"一次I/O请求"。
- # 多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
- # kB_read/s:每秒从设备(drive expressed)读取的数据量;
- # kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
- # kB_read:读取的总数据量;
- # kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
- # kb/s显示磁盘信息,每2s刷新一次
iostat -d -k 2
- # kb/s显示磁盘统计信息及扩展信息,每1s刷新 ,刷新10次结束
- iostat -dkx 1 10
SUGAP# iostat -x
Linux 3.10.108R8 (SUGAP) 03/19/24 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.17 0.00 5.53 0.25 0.00 90.04
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 2.06 0.05 1.01 2.38 12.31 27.71 0.15 141.21 12.26 147.67 34.44 3.65
每个输出消息含义:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz: 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
4. df 命令
该命令用于查看文件系统的硬盘挂载点和空间使用情况。
[root@master linux]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 964M 0 964M 0% /dev
tmpfs 978M 0 978M 0% /dev/shm
tmpfs 978M 8.9M 969M 1% /run
tmpfs 978M 0 978M 0% /sys/fs/cgroup
/dev/mapper/centos-root 10G 4.0G 6.1G 40% /
/dev/sda1 197M 181M 16M 93% /boot
tmpfs 196M 0 196M 0% /run/user/0
5. du 命令
用于显示指定目录占用磁盘的大小,在排查磁盘空间使用情况可用。
du -h # 以人类可读的方式显示,显示M或K
du -s ./ # 显示当前目录大小
du -c # 显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
du -lh --max-depth=1 # 查看当前目录下一级子文件和子目录占用的磁盘容量。
---------------------------------------------------------------------
[root@master ~]# du -sh /root/
332M /root/
[root@master ~]# du -lh --max-depth=1
0 ./.pki
188M ./mysql
67M ./kernel
100K ./linux
9.7M ./liburing-liburing-2.0
69M ./libbpf-bootstrap
332M .
6. free 命令
free
命令用于显示系统的内存使用情况,包括物理内存、交换空间以及操作系统的内核缓存情况。
[root@master ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 372M 918M 8.8M 664M 1.4G
Swap: 2.0G 0B 2.0G
--------------------------------------------------------------------------------
total:物理内存总量,以 KB 为单位。
used:已使用的物理内存量,以 KB 为单位。
free:未被使用的物理内存量,以 KB 为单位。
shared:被共享的内存量,通常很少被使用,以 KB 为单位。
buff/cache:系统缓存的内存量,包括文件系统缓存和页面缓存,以 KB 为单位。这部分内存可以根据需要被释放出来,以供应用程序使用。
available:可用内存量,表示可以立即分配给新的应用程序或进程的内存量,以 KB 为单位。这个值是通过系统考虑缓存和页面调度的综合评估计算得出的。
7. ifconfig 命令
使用 ifconfig 或 ip 命令,来查看网络配置。
ifconfig eth4
eth4 Link encap:Ethernet HWaddr 00:16:31:E1:D4:3E
inet addr:1.0.0.254 Bcast:1.0.31.255 Mask:255.255.224.0
inet6 addr: 1000:1::a:3/64 Scope:Global
inet6 addr: fe80::216:31ff:fee1:d43e/64 Scope:Link
inet6 addr: 1000:1::a:8888/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:301642 errors:0 dropped:51 overruns:0 frame:0
TX packets:984691 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36256261 (34.5 MiB) TX bytes:1289214039 (1.2 GiB)
Interrupt:16 Memory:f7940000-f7960000
-------------------------------------------------------------------------
有几个需要掌握的指标:
1. 网络接口的状态标志。ifconfig 输出中的 RUNNING ,或 ip 输出中的 LOWER_UP ,都表示物理网络是连通的。
2. MTU 的大小。MTU 默认大小是 1500。
3. 网络接口的 IP 地址、子网以及 MAC 地址。这些都是保障网络功能正常工作所必需的,你需要确保 配置正确。
4. 网络收发的字节数、包数、错误数以及丢包情况,特别是 TX 和 RX 部分的 errors、dropped、 overruns、carrier 以及 collisions 等指标不为 0 时,通常表示出现了网络 I/O 问题。
● errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;
● dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包;
● overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理 (队列满) 而导致的丢包;
● carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
● collisions 表示碰撞数据包数。
8. netstat 命令
使用netstat 或者 ss ,来查看套接字、网
# head -n 3 表示只显示前面3行 # -l 表示只显示监听套接字 # -n 表示显示数字地址和端口(而不是名字) # -p 表示显示进程信息 SUGAP# netstat -nlp | head -n 3 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 1.0.0.254:59877 0.0.0.0:* LISTEN 2078/transfer ----------------------------------------------------------------------------------------- 当套接字处于连接状态 (Established) 时: ● Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)。 ● Send-Q 表示还没有被远端主机确认的字节数(即发送队列长度)。 当套接字处于监听状态 (Listening) 时: ● Recv-Q 表示全连接队列的长度。 ● Send-Q 表示全连接队列的最大长度。 所谓全连接,是指服务器收到了客户端的 ACK,完成了 TCP 三次握手,然后就会把这个连接挪到全连接 队列中。这些全连接中的套接字,还需要被 accept() 系统调用取走,服务器才可以开始真正处理客户端 的请求。
络栈、网络接口以及路由表的信息。
9. lsof 命令
lsof 命令负责列出系统中已经打开的文件,包括普通文件,目录,块文件,字符文件,正在执行的文本引用,库,流或者网络文件。
# 查看打开的所有文件
lsof
# 查看 1号进程 打开的文件
lsof -p 1
# 查看打开文件描述符 12 的所有项
lsof -d 12
# 查看 TYPE 为 IPV4 的所有项
lsof -i 4
# 查看 协议类型为 UDP 的所有项
lsof -i UDP
-------------------------------------------------
root 8704 8623 0 19:44 pts/2 00:00:00 ./linux/epoll
[root@master ~]# lsof -p 8704
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
epoll 8704 root cwd DIR 253,0 4096 16797761 /root
epoll 8704 root rtd DIR 253,0 236 64 /
epoll 8704 root txt REG 253,0 9136 18675648 /root/linux/epoll
epoll 8704 root mem REG 253,0 2156592 33809 /usr/lib64/libc-2.17.so
epoll 8704 root mem REG 253,0 163312 33801 /usr/lib64/ld-2.17.so
epoll 8704 root 0u CHR 136,2 0t0 5 /dev/pts/2
epoll 8704 root 1u CHR 136,2 0t0 5 /dev/pts/2
epoll 8704 root 2u CHR 136,2 0t0 5 /dev/pts/2
epoll 8704 root 3u IPv4 103039 0t0 TCP *:dls-monitor (LISTEN)
epoll 8704 root 4u a_inode 0,13 0 10474 [eventpoll]
10. strace 命令
strace 是一个有用的诊断、指导和调试工具。
用法:
strace 可执行程序名称 -h, 踪命令的执行过程显示命令过程中执行的命令、系统调用、进程接收的信号等。
strace -c 可执行程序名称 -h, 显示命令执行了哪些系统调用信号、耗时、各系统调用次数等。