系统监控工具
top、free、vmstat、iostat、pmap、glances、dstat、iotop、lsof
1 命令top
动态监控系统状态 ,在命令行输入top,界面如下
- 格式:
top [选项] - 选项:
-p:指定进程
-b:全部显示所有进程
-H : 线程模式,示例:top -H -p 5155
-n#:刷新多少次后退出
-d#:指定刷新时间间隔,默认为3秒 - 执行界面
1. |top - 21:01:47 up 10:45, 4 users, load average: 0.04, 0.03, 0.05|
|命令uptime信息|
2. |Tasks: 259 total, | 1 running, |258 sleeping, | 0 stopped, | 0 zombie
| 总进程数 | 活动进程 | 睡眠进程 | 停止进程 | 僵尸进程|
3. |%Cpu(s): | 0.1 us, | 0.2 sy, | 0.0 ni, | 99.8 id,| 0.0 wa, | 0.0 hi, | 0.0 si, | 0.0 st|
| cpu状态 |用户占用比例|内核占用|改变过ni优先级的进程占用| 空闲占比 |等待IO时间| 硬中断 |软终端|丢失的时间片|
4. |KiB Mem : 1514076 total, | 76768 free, | 791284 used, | 646024 buff/cache|
| 总内存 | 剩余量 | 使用量 |用于缓存的量|
5. |KiB Swap: 3145724 total, | 3145724 free, | 0 used. | 503752 avail Mem |
| 虚拟内存总量 | 空闲量 | 使用量 |缓冲的交换区总量|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
742 root 20 0 320060 6536 5072 S 0.3 0.4 0:49.45 vmtoolsd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
首部信息显示隐藏开关
- uptime信息:开关 l
- tasks信息与cpu: 开关 t
- memory信息:开关 m
- cpu分别显示:(数字)1,显示所有核心信息
st:丢失的时间片,系统识别虚拟机,但不会识别虚拟机中运行的,cpu会分配给虚拟机中一些进程用,就会产生未知时间片
-
排序:
- p:以占据的cpu百分比%cpu
- M:占据内存百分比,%MEM
- T:累计占据CPU时长,TIME+
-
管理指令:
- q:退出命令
- S:修改刷新时间间隔
- k:终止指定进程
- W: 保存至root/.toprc
####7.5.1 htop命令:EPEL源
与top命令相似,UI设计前卫一些
- 格式
htop [选项] - 选项:
-d#:指定延迟时间
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序 - 子命令
s:跟踪选定进程系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树
2 内存空间管理
2.1 命令free
内存空间使用状态
-
格式:free[OPTION]
-
选项
-b:以字节为单位
-m:以MB为单位
-g:以GB为单位
-h:易读模式
-t:显示RAM+swap的总和
-s n:刷新间隔为n秒
-c n:刷新n次后即退出 -
执行结果
buffers,解决速度不匹配问题;cache缓存,提高访问速度的[v9@hai7 ~]$free total used free shared buffers cached 1:Mem: 1003020 887824 115196 4104 89252 428612 2:-/+ buffers/cache: 369960 633060 3:Swap: 2097148 1076 2096072
- 1
- 2
- 3
- 4
- 5
- 内存使用情况
- -/+ buffers/cach
(-buffers/cache) used内存数: used – buffers – cached
(+buffers/cache) free内存数 :free + buffers + cached - 虚拟内存信息
2.2 vmstat命令
虚拟内存信息
-
格式
vmstat [options][delay[count]] -
选项:
-s:显示内存的统计数据 -
示例:
vmstat 1
动态观察,1秒刷新一次vmstat 1 10
执行10次退出,1秒执行一次 -
执行结果说明
vmstat -n |procs| |-----------memory--------| |-swap-| -|---io---|-|system ||-------cpu-----| 1 2 3 4 5 6 r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 107296 94720 442468 0 0 5 1 17 16 0 0 100 0 0
- 1
- 2
- 3
- 4
- 5
- procs:
r:可运行(正运行或等待运行)进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) - memory:
swpd:交换内存的使用总量
free: 空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存容量 - swap
si:从磁盘交换进内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s) - io:
bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据至块设备的速率 - system:
in:interrupts终端速率,包括时钟
cs:context switch 进程切换速率 - cpu:
us:运行非内核代码的时间
sy:运行内核代码的时间
id:空闲时间.Linux2.5.41前,包括IO-wait time
wa:I/O等待时间. 2.5.41前,包括in idle
st:丢失时间.
2.3命令iostat
与vmstat使用方法相似,统计CPU和设备IO信息
- 格式
iostat [选项] [-p [device…] [interval [count] ] - 选项
-c:仅显示CPU统计信息.与-d选项互斥.
-d:仅显示磁盘统计信息.与-c选项互斥.
-k:以K为单位显示每秒的磁盘请求数,默认单位块.
-p:device | ALL 与-x选项互斥,用于显示块设备及系统分区的统计信息.
-t:在输出数据时,打印搜集数据的时间.
-V:打印版本号和帮助信息.
-x :输出扩展信息. - 示例
示例1. 监控设备adv1的扩展数据,每秒刷新一次,执行10次
[v9@hai7 ~]$iostat -x -d sda1 1 10
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda1 0.00 0.00 0.01 0.00 0.09 0.00 8.42 0.00 0.07 0.07 0.14 0.07 0.00
- 1
- 2
- 3
- rrqm/s:每秒这个设备相关的读取请求有多少被合并了
- rsec/s:每秒读取的扇区数
- avgrq-sz:平均请求扇区的大小
- avgqu-sz:是平均请求队列的长度,越短越好
- await: I/O响应时间,一般低于5ms,await与svctm差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
- svctm: 表示平均每次设备I/O操作的服务时间
- %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
示例2. 以k为单位显示磁盘使用情况,每2秒刷新一次
[v9@hai7 ~]$iostat -d -k 2
- 1
示例3. 默认执行结果示例
[v9@hai7 ~]$iostat
1:Linux 2.6.32-754.el6.x86_64 (hai6) 09/06/2018 _x86_64_ (4 CPU)
2:avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.16 0.00 0.00 99.81
3:Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.01 0.03 0.00 1540 0
sda 0.46 19.71 2.57 1047842 136528
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 架构CPU信息
- CPU信息
- 块设备信息
1. tps: 每秒钟发送到的I/O请求数.
2. Blk_read /s: 每秒读取的block数.
3. Blk_wrtn/s: 每秒写入的block数.
4. Blk_read: 读入的block总数.
5. Blk_wrtn: 写入的block总数.
2.4 命令pmap
进程对应的内存映射,与文件/proc/PID(进程编号)/maps类似
-
格式
pmap [options] pid […] -
选项
-x:显示详细格式的信息 -
执行示例,查看进程7795的内存占用信息
[v9@hai7 ~]$pmap -x 7795 7795: nano Address Kbytes RSS Dirty Mode Mapping 0000000000400000 168 112 0 r-x-- nano 0000000000629000 8 8 4 rw--- nano 0000000001fd9000 528 468 468 rw--- [ anon ] ... <==省略
[v9@hai7 ~]$cat /proc/7795/maps <==与pmap显示内容相似
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- RSS:真正占用空间
- Dirty:脏数据,数据没有最终结束,处于中间状态
3. 命令glances
EPEL源,可以跨网络监控
-
格式
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file][-o output] -
常用选项:
选项 | 含义 |
---|---|
-b | 以Byte为单位显示网卡数据速率 |
-d | 关闭磁盘I/O模块 |
-f /path/to/somefile | 设定输入文件位置 |
-o{HTML | CSV} |
-m | 输入格式 |
-n | 禁用mount模块 |
-t | 延迟时间间隔 |
-1 | 每个CPU的相关数据单独显示 |
内建命令
选项 | 含义 |
---|---|
a | 按进程自动排序 |
l | 显示或隐藏日志 |
c | 按 CPU% 排序 |
b | Bytes or bits for network I/O |
m | 按 MEM% 排序 |
w | 删除警告日志 |
p | 按用户排序 |
x | 删除警告和关键日志 |
i | 按I/O使用状况排序 |
1 | 流显示每个CPU内核的使用情况 |
d | 显示隐藏磁盘读写状况 |
h | 帮助信息 |
f | 显示系统信息 |
t | View network I/O as combination |
n | 显示网络状态 |
u | View cumulative network I/O |
s | 显示传感器信息 |
q | 离开程序 |
y | hddtemp统计信息 |
C/S模式下运行glances命令,跨网络访问
- 服务器模式( S ):
- 格式
glances -s -B IPADDR - 选项:
-s :表示以服务器端
-B:开启某一个监听地址,不加是所有网卡都参与
IPADDR:指明监听的本机那个地址
- 格式
- 客户端模式( C ):
- 格式
glances -c IPADDR - 选项
-c:以客户端
IPADDR:要连入的服务器端地址,服务器指定的地址
- 格式
4 命令dstat
系统资源统计,代替vmstat,iostat
-
格式
dstat [-afv] [options…] [delay[count]] -
选项
选项 | 含义 |
---|---|
-c | 显示cpu相关信息 |
-C | 此参数可按需分别显示cpu状态,例:-C 0,1 是显示cpu0和cpu1的信息 |
-d | 显示disk相关信息 |
-D | total,sda,sdb… |
-g | 显示page相关统计数据 |
-m | 显示memory相关统计数据 |
-n | 显示network相关统计数据 |
-p | 显示process相关统计数据 |
-r | 显示io请求相关统计数据 |
-s | 显示swapped相关统计数据 |
-y | 系统状态 |
- -socket | 用来显示tcp udp端口状态 |
- -ipc | 显示ipc消息队列,信号等信息 |
- -top-cpu | 显示最占用CPU的进程 |
- -top-io | 显示最占用io的进程 |
- -top-mem | 显示最占用内存的进程 |
- -top-latency | 显示延迟最大的进程 |
- -output | 将状态信息以##.csv后缀定向到指定目录下 |
示例
默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1
dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0| 0 0 | 424B 346B| 0 0 | 121 104
0 0 100 0 0 0| 0 0 | 240B 346B| 0 0 | 102 92
- 1
- 2
- 3
- 4
- 5
system:int、csw分别为系统的中断次数(interrupt)和上下文切换(context switch)
5. 命令iotop
是一个用来监视磁盘I/O使用状况的top类工具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息,可查看每个进程是如何使用IO
[root@hai7 ~]$iotop
1:Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
2:Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
3: PID PRIO< USER DISK READ DISK WRITE SWAPIN IO COMMAND
1936 ?dif root 0.00 B/s 0.00 B/s 0.00 % 0.00 % tracker-extract
1943 ?dif root 0.00 B/s 0.00 B/s 0.00 % 0.00 % tracker-miner-fs
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
界面如上所示
- Read和Write速率总计
- 实际的Read和Write速率
- 参数如下
PID:线程ID
PRIO:优先级
USER:用户
DISK:磁盘读速率
SWAPIN:swap交换百分比
IO:IO等待所占的百分比
COMMAND:线程/进程命令
-
iotop常用参数
选项 | 含义 |
---|---|
-o,–only | 只显示正在成I/O的进程或线程,除了传参,可以在运行过程总按o生效 |
-b,–batch | 非交互模式,一般用来记录日志 |
-n NUM,–iter=NUM | 设置监测的次数,默认无限。在非交互模式下很有用 |
-d SEC,–delay=SEC | 设置每次检测的间隔,默认1秒,接受非整型数据例如1.1 |
-p PID,–pid=PID | 指定检测的进程/线程 |
-u USER,–user=USER | 指定监测某个用户产生的I/O |
-P --processes | 仅显示进程,默认iotop显示所有线程 |
-a,–accumulated | 显示累计的I/O,而不是带宽 |
-k,–kilobytes | 使用KB单位,而不是对人友好的单位,在非交互模式下,脚本编程有用 |
-t,–time | 加上时间戳,非交互非模式 |
-q,–quiet | 禁止头几行,非交互模式,有三种指定方式 |
-q | 只在第一次监测时显示列名 |
永远不显示列名 | |
-qqq | 永远不显示I/O汇总 |
交互按键
按键 | 用途 |
---|---|
left和right方向键 | 改变排序 |
r | 反向排序 |
o | 切换至选项–only |
p | 切换至–processes选项 |
a | 切换至–accumulatd选项 |
q | 退出 |
i | 改变线程的优先级 |
6. 命令lsof
list open files查看当前系统文件的工具,在Linux环境下,一切皆文件,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件如传输控制协议(TCP)和用户数据协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符
-
格式
lsof [选项] -
选项
选项 | 含义 |
---|---|
-a | 列出打开文件存在的进程 |
-c | 显示command列中包含指定字符的进程所打开的文件 |
-g | 列出GID号进程详情 |
-d FD | 列出占用该文件号的进程 |
+d /DIR/ | 列出目录下被打开的文件 |
+D /DIR/ | 递归列出目录下被打开的文件 |
-n目录 | 列出使用NFS的文件 |
-i条件 | 列出符合条件的进程(4、6、协议、:端口、@ip) |
-p进程号 | 列出指定进程号所打开的文件 |
-u | 列出UID号进程详情 |
-h | 列出UID号进程详情 |
-v | 显示版本信息 |
-n | 不反向解析网络名字 |
示例
- 查看由登录用户启动而非系统启动的进程
[root@hai7 ~]$tty
/dev/pts/0
[root@hai7 ~]$lsof /dev/pts/0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2189 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 2189 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 2189 root 2u CHR 136,0 0t0 3 /dev/pts/0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 指定进程号,可以查看该进程打开的文件
[root@hai7 ~]$lsof -p 2189
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2189 root cwd DIR 8,3 4096 64 /data
bash 2189 root mem REG 8,2 106070960 101092451 /usr/lib/locale/locale-archive
... <==省略部分内容
bash 2189 root 0u CHR 136,0 0t0 3 /dev/pts/0
- 1
- 2
- 3
- 4
- 5
- 6
-
通过参数-i查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如:sshd等,也可以通过制定ip查看该ip的网络连接情况
lsof -i -n
lsof -i@127.0.0.1
-
通过参数-i:端口,可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等
lsof -i:80 -n
-
查看指定状态的网络连接
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names, -p:no port names
-i:TCP指定协议
-s:指定协议状态通过多个参数可以清晰的查看网络连接情况、协议连接情况等
- 恢复删除文件,此方法只适用于正在使用的文件
1. 确定文件是在使用中
[root@hai7 ~]$lsof /var/log/messages
2. 删除文件
[root@hai7 ~]$rm -f /var/log/messages
3. 查看文件进程,拿到进程编号
[root@hai7 ~]$lsof |grep /var/log/messages
4. 进入对应进程下的fd文件
[root@hai7 ~]$cd /proc/1027/fd/
5. 查看文件列表,可以看到带有(deleted)的文件
[root@hai7 ~]$ll
lrwx------ 1 root root 64 Sep 6 14:15 3 -> socket:[28141]
l-wx------ 1 root root 64 Sep 6 14:15 4 -> /var/log/messages (deleted) <==丢失的文件
6. 恢复文件,查看丢失的文件,这里会显示内容,重定向到删除目录
[root@hai7 ~]$cat /proc/1027/fd/4>/var/log/messages
[root@hai7 ~]$ls /var/log/messages
/var/log/messages <==已恢复
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 执行结果说明
$lsof -i tcp COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 744 rpc 8u IPv4 15285 0t0 TCP *:sunrpc (LISTEN) rpcbind 744 rpc 11u IPv6 15288 0t0 TCP *:sunrpc (LISTEN
- 1
- 2
- 3
- 4
- COMMAND:进程的名称
- PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
- TYPE:文件类型,如DIR、REG等
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
7 命令kill、pkill
7.1 kill命令
用来删除执行中的程序或工作,kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看
-
格式
kill [选项] [参数] -
选项
-l :列出指定编号的信息,不指定则列出全部的信息名称
-n:指定信号,编号或名称都可以
-u:指定用户 -
信号
- 介绍
向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头,不区分大小写 - 查看
显示当前系统可用信号:kill -l, trap -l
常用信号:man 7 signal - 指定信号的方法
(1)信号的数字标识:1、2、9
(2)信号完整名称:SIGHUP
(3)信号的简写名称:HUP - 常用信号
- 介绍
编号 | 名称 | 作用 |
---|---|---|
1 | SIGHUP | 无须关闭进程而让其重读配置文件 |
2 | SIGINT | 终止正在运行的进程;相当于Ctrl+c\ |
3 | SIGQUIT | 相当于ctrl+\ |
9 | SIGKILL | 强制杀死正在运行的进程 |
15 | SIGTERM | 终止正在运行的进程 |
18 | SIGCONT | 继续运行 |
19 | SIGSTOP | 后台休眠 |
- 示例
- 终止程序nano
1: 找到对应PID [root@hai7 ~]$ps -C nano PID TTY TIME CMD 4763 pts/0 00:00:00 nano 2:终止进程,指定信号15 [root@hai7 ~]$kill -n 15 4812
- 1
- 2
- 3
- 4
- 5
- 6
- 强制终止httpd服务
[root@hai7 ~]$echo $$ <==查看当前bash进程 2189 [root@hai7 ~]$kill 2189 <==尝试终止进程,没有终止 [root@hai7 ~]$kill -9 2189 <==使用9信号,强制终止
- 1
- 2
- 3
- 4
- 终止全部同名进程
[root@hai7 ~]$pidof httpd <==httpd有很多进程,也可以直接终止父进程 9919 9918 9917 9916 9915 9914 9913 9912 9909 [root@hai7 ~]$killall -15 httpd <==这里主要为说明killall用法
- 1
- 2
- 3
7.2 命令pkill
与pgrep用法相似,查找同时可以终止进程
- 格式
pkill [options] pattern - 选项
选项 | 含义 |
---|---|
-signal | 发送信号给匹配到的进程 |
-u uid | effective user,生效者 |
-U uid | real user ,真正发起运行命令者 |
-t terminal | 与指定终端相关的进程 |
-l | 显示进程名(pgrep可用) |
-a | 显示完整格式的进程名(pgrep可用) |
-P pid | 显示指定进程的子进程 |
- 示例
- 删除所有以http开头的进程
pkill -9 "^http"
- 删除终端1的进程
[root@hai7 ~]$pkill -t pts/1 <==结束部分运行进程 [root@hai7 ~]$pkill -t pts/1 -9 <==连同终端一起关闭
- 1
- 2
- 删除所有以http开头的进程
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
</div>