linux监控硬件使用状态
linux下常用的监控查看硬件信息工具命令
top命令
top是最常用的用来观察系统运行状况的命令
top - 11:00:25 up 2:18, 1 user, load average: 1.45, 1.20, 0.94
Tasks: 380 total, 2 running, 378 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.1 us, 2.6 sy, 0.0 ni, 90.1 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 15707.4 total, 1366.8 free, 5742.7 used, 8597.9 buff/cache
MiB Swap: 16384.0 total, 16384.0 free, 0.0 used. 8795.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3533 root 20 0 1029000 118584 79800 S 9.6 0.7 2:50.17 Xorg
3581 root 20 0 2139720 33196 16284 S 3.7 0.2 0:35.10 dde-system-daem
2879 root 20 0 406432 16948 12980 S 3.3 0.1 0:16.63 udisksd
第一行 概览信息
系统当前时间,系统从开机到现在运行了多久,几个用户在使用,平均负载压力。平均负载压力分别取最近1分钟,5分钟,10分钟的平均值。
load average
平均负载压力,是cpu的指标,表示平均系统的进程数。这个是所有的进程数,那么需要对比你有几个cpu内核。比如这个值是4,有4个cpu,那么每个进程一个内核,正好使用;如果这个数超过cpu内核数,就表示cpu压力增大,有可能会有进程不能及时获得cpu资源。
第二行 进程相关
总共多少进程,正在运行的进程个数,休眠的进程个数,停止的进程个数,僵尸进程个数
第三行 cpu相关
用户使用cpu的比例,系统使用cpu的比例,改变优先级的进程使用cpu的比例,空闲的cpu的比例,等待IO的cpu的比例,硬中断cpu的比例,软终端cpu的比例,虚拟cpu的比例
wa等待io的cpu比例,如果出现,就表示硬盘或其他io影响了系统性能了,如果比例比较高,比如个人占用7%,则wa占用3%,就会感觉到卡顿
第四行 物理内存相关
内存总大小,空闲大小,使用大小,用作buff和cache的大小
第五行 swap相关
内存总大小,空闲大小,使用大小,可用大小
下面整体
- PID 进程ID
- USER 进程所属用户
- PR 优先级
- NI 对优先级的修正
- VIRT 虚拟内存
- RES 常驻内存
- SHR 共享内存
- S 进程状态 D不可中断的睡眠状态,R运行,S睡眠,T跟踪/停止,Z僵尸进程
- %CPU cpu使用率
- %MEM 内存使用率
- TIME+ 进程总共使用cpu的时间
- COMMAND 进程名称
Cpu(s)
Cpu0 : 0.0%us, 4.0%sy, 0.0%ni, 0.0%id, 96.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 14.0%us, 77.4%sy, 0.0%ni, 0.0%id, 8.6%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 14.3%us, 80.3%sy, 0.0%ni, 0.0%id, 5.3%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 17.9%us, 82.1%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 14.6%us, 77.2%sy, 0.0%ni, 0.0%id, 8.3%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.3%us, 0.7%sy, 0.0%ni, 48.8%id, 50.2%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.8%us, 10.9%sy, 0.0%ni, 63.2%id, 25.2%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 3.0%us, 1.0%sy, 0.0%ni, 68.9%id, 27.1%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 2.7%us, 0.3%sy, 0.0%ni, 18.2%id, 78.8%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 1.7%us, 1.0%sy, 0.0%ni, 0.0%id, 97.3%wa, 0.0%hi, 0.0%si, 0.0%st
在top界面,摁下1
,会把Cpu一行的信息按照每一个cpu内核分别显示出来
这里可以间接推测cpu是否绑核,因为cpu绑核后会一直以100%的使用率运行,所以如果cpux的使用率一直是100%,说明被绑核了。这里会有点误差,可能是99%或者98%,都是正常的。
%CPU
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18683 root 20 0 5044m 2.9g 136m D 253.2 18.7 0:10.87 aaa
在这个示例钟,可以看到进程aaa占用的%CPU超过了100%,达到了253.2%,这是为什么呢?
%CPU表示的是这个进程每个线程占用cpu比例的总和,也就是多线程的情况下,有可能会超过100%。多个线程使用了多个cpu内核,占用比例加起来超过了100%。
在top界面摁下H
可以按照线程显示,同一个进程会多出很多条记录,这种情况下,%CPU就不会超过100%
查看指定进程信息
top -p 进程id
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 14.3%us, 28.2%sy, 0.0%ni, 16.6%id, 40.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16303084k total, 16128104k used, 174980k free, 2584k buffers
Swap: 33554428k total, 18446744073677550216k used, 65555828k free, 223788k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20922 root 20 0 5044m 3.0g 219m R 468.3 19.5 34:46.25 xxx
查看指定进程每一个线程的信息
top -H -p 进程id
top - 13:46:42 up 54 days, 21:00, 1 user, load average: 11.91, 11.58, 11.26
Tasks: 6 total, 3 running, 3 sleeping, 0 stopped, 0 zombie
Cpu(s): 13.8%us, 26.4%sy, 0.0%ni, 33.9%id, 25.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16303084k total, 16148348k used, 154736k free, 2008k buffers
Swap: 33554428k total, 18446744073677594628k used, 65511416k free, 232648k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20922 root 20 0 5044m 3.0g 234m R 100.0 19.6 9:32.22 aaa
20953 root 20 0 5044m 3.0g 234m R 100.0 19.6 9:15.18 aaa
20952 root 20 0 5044m 3.0g 234m R 90.0 19.6 7:47.75 aaa
20954 root 20 0 5044m 3.0g 234m D 88.3 19.6 8:33.62 aaa
20951 root 20 0 5044m 3.0g 234m D 68.7 19.6 7:52.99 aaa
20926 root 20 0 5044m 3.0g 234m S 0.0 19.6 0:00.00 eal-intr-thread
切换内存单位
在top界面摁e
和E
可以分别切换显示下面进程和上面总览的内存单位,从b->k->m->g->t->p进行循环
更多操作
在top界面按下f,可以到一个选择界面,选择哪些信息显示,可以调整顺序,也可以设置按照哪一个选项排序。界面最上面有介绍如何使用,设置完,按q退到top界面,就可以立即生效
htop nmon glances s-tui
类似于top,支持鼠标操作,提供的信息更丰富
htop
htop会默认显示一个进程的所有线程,可以在界面摁下H进行切换
iotop
监控系统的磁盘读写状态。
在iotop界面也可以使用快捷键切换功能
- < > 键盘方向键切换排序字段
- r 切换排序方式
- o 切换是否只显示io操作的进程
- p 切换按照进程显示还是按照线程显示
- a 切换是否累加流量
指定进程
iotop -p 进程id
指定用户
iotop -u root
sar
安装对应的包是sysstat
一般使用命令sar 参数 隔几秒采集一次 采集几次
参数经常用的是-u
表示cpu,-d
表示磁盘,r
表示内存
sar -d 3 5
采集硬盘信息,3秒一次,一共5次
$ sar -d 3 4
Linux 5.15.45-amd64-desktop 2022年12月07日 _x86_64_ (8 CPU)
15时12分53秒 DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
15时12分56秒 dev7-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev7-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev7-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev7-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev7-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev7-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时12分56秒 dev259-0 4.67 0.00 530.67 113.71 0.03 6.00 2.29 1.07
但是统计硬盘这里DEV到底与磁盘分区如何对应,还不清楚
除此之外,sar还可以统计网络,IO,队列等很多信息
iostat
iostat可以查看cpu,硬盘等IO信息
$ iostat -d 2 3
Linux 5.15.45-amd64-desktop 2022年12月07日 _x86_64_ (8 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.05 0.00 1083 0
loop1 0.00 0.00 0.00 14 0
loop2 0.00 0.01 0.00 349 0
loop3 0.00 0.05 0.00 1073 0
loop4 0.00 0.05 0.00 1081 0
loop5 1.41 68.64 0.00 1625141 0
nvme0n1 30.45 350.15 670.59 8290193 15876985
vmstat
Virtual Meomory Statistics 虚拟内存统计
虽然是虚拟内存统计,但是可以对内存,cpu和硬盘等做统计
$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
loop0 53 0 2166 10 0 0 0 0 0 0
loop1 11 0 28 0 0 0 0 0 0 0
loop2 45 0 698 6 0 0 0 0 0 0
loop3 54 0 2146 13 0 0 0 0 0 0
loop4 54 0 2162 12 0 0 0 0 0 0
loop5 33303 0 3250282 3782 0 0 0 0 0 8
loop6 0 0 0 0 0 0 0 0 0 0
loop7 0 0 0 0 0 0 0 0 0 0
nvme0n1 178652 48915 16580475 55878 544167 432976 31823850 2455743 0 526
统计硬盘信息
- total 读写总数
- merged 分组读写
- sectors 读写扇区数
- ms 读写消耗的毫秒数
- cur 正在进行的I/O数
- sec I/O所花费的秒数
mpstat
监控cpu信息
mpstat -P ALL 2 5
监控所有cpu信息,每2秒一次,一共5次
pidstat
监控各种资源信息
pidstat -p 16008 -d 2 3
统计16008进程的磁盘信息,每2秒一次,统计3次
lsof
列出当前系统中哪些端口进程等打开了哪些文件
iftop
监控系统流量和带宽
fio
io性能测试