1、查看进程信息
1)top命令
可以实时监控系统性能资源占用情况:
# top
top - 14:59:21 up 2 days, 19:39, 2 users, load average: 0.05, 0.04, 0.05
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882864 total, 209636 free, 921580 used, 751648 buff/cache
KiB Swap: 2097148 total, 2090228 free, 6920 used. 762056 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21974 root 20 0 161856 2232 1556 R 0.7 0.1 0:00.05 top
1279 mongod 20 0 1478804 514904 5232 S 0.3 27.3 26:48.47 mongod
1 root 20 0 125856 3460 1728 S 0.0 0.2 1:06.74 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:11.20 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
进入交互模式后:
输入M
,进程列表按内存使用大小降序排序;
输入P
,进程列表按CPU使用大小降序排序;
top
第三行显示当前系统的,其中有两个值很关键:
id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;
wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;
2)ps命令
显示进程状态,快照方式显示,进程分为两类:一类是用户通过终端启动的进程,一类是与终端无关的进程,多为守护进程。
ps命令选项:
a | 与终端有关的进程 |
x | 与终端无关的进程 |
u | 显示是哪个用户启动的 |
-e | 显示所有进程 |
-f | 完整格式列表显示信息 |
-F | 显示额外信息 |
-H | 显示进程层次结构 |
-o | 自定义显示信息 |
# ps aux | more -20
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125856 3460 ? Ss 10月14 1:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 10月14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 10月14 0:11 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 10月14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 10月14 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 10月14 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 10月14 0:46 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 10月14 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 10月14 0:02 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 10月14 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< 10月14 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 10月14 0:00 [khungtaskd]
root 16 0.0 0.0 0 0 ? S< 10月14 0:00 [writeback]
root 17 0.0 0.0 0 0 ? S< 10月14 0:00 [kintegrityd]
root 18 0.0 0.0 0 0 ? S< 10月14 0:00 [bioset]
root 19 0.0 0.0 0 0 ? S< 10月14 0:00 [kblockd]
root 20 0.0 0.0 0 0 ? S< 10月14 0:00 [md]
root 21 0.0 0.0 0 0 ? S< 10月14 0:00 [edac-poller]
root 27 0.0 0.0 0 0 ? S 10月14 0:02 [kswapd0]
--More--
说明:
USER: 进程相关用户
PID: 进程号
%CPU: CPU占用百分比
%MEM: 内存占用百分比
VSZ: 占用虚拟内存大小
RSS: 常驻内存集,不可被交换的内存
TTY: 与哪个终端相关
STAT: 进程状态
R:运行状态
S:可中断睡眠
D:不可中断睡眠
T:停止的
Z:僵尸进程
s:会话首进程
+:前台进程
l: 多线程进程
N:低优先级进程
<: 高优先级进程
START:启动运行时间
TIME:运行时长
COMMAND:由哪个命令启动的此进程,如果COMMAND包含在方括号中,则表示是内核进程
# ps -ef | more -15
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10月14 ? 00:01:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 10月14 ? 00:00:00 [kthreadd]
root 3 2 0 10月14 ? 00:00:11 [ksoftirqd/0]
root 5 2 0 10月14 ? 00:00:00 [kworker/0:0H]
root 7 2 0 10月14 ? 00:00:00 [migration/0]
root 8 2 0 10月14 ? 00:00:00 [rcu_bh]
root 9 2 0 10月14 ? 00:00:46 [rcu_sched]
root 10 2 0 10月14 ? 00:00:00 [lru-add-drain]
root 11 2 0 10月14 ? 00:00:02 [watchdog/0]
root 13 2 0 10月14 ? 00:00:00 [kdevtmpfs]
root 14 2 0 10月14 ? 00:00:00 [netns]
root 15 2 0 10月14 ? 00:00:00 [khungtaskd]
root 16 2 0 10月14 ? 00:00:00 [writeback]
root 17 2 0 10月14 ? 00:00:00 [kintegrityd]
--More--
说明:
PPID:父进程
STIME:启动时间
TIME: 执行累计时间
# ps axo pid,command | more -15
PID COMMAND
1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 [kthreadd]
3 [ksoftirqd/0]
5 [kworker/0:0H]
7 [migration/0]
8 [rcu_bh]
9 [rcu_sched]
10 [lru-add-drain]
11 [watchdog/0]
13 [kdevtmpfs]
14 [netns]
15 [khungtaskd]
16 [writeback]
17 [kintegrityd]
--More--
# ps -ef | grep nginx
root 23146 814 0 15:20 ? 00:00:00 nginx: master process /bin/nginx -g daemon off;
www 23148 23146 0 15:20 ? 00:00:00 nginx: worker process
root 23180 21928 0 15:20 pts/0 00:00:00 grep --color=auto nginx
3)pgrep命令
pgrep
命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
选项 | 描述 |
-o | 仅显示找到的最小(起始)进程号; |
-n | 仅显示找到的最大(结束)进程号; |
-l | 显示进程名称; |
-P | 指定父进程号; |
-g | 指定进程组; |
-t | 指定开启进程的终端; |
-u | 指定进程的有效用户ID。 |
例如,
显示最小进程号的一个nginx进程:
# pgrep -lo nginx
23362 nginx
显示最大进程号的一个nginx进程:
# pgrep -ln nginx
23364 nginx
列出所有nginx进程:
# pgrep -l nginx
23362 nginx
23364 nginx
列出所有nginx进程,不显示进程名:
# pgrep nginx
23362
23364
2、查看内存信息
1)free命令
# free -h
total used free shared buff/cache available
Mem: 1.8G 959M 109M 32M 769M 683M
Swap: 2.0G 6.8M 2.0G
说明:
Mem | 行(第二行)是内存的使用情况。 |
Swap | 行(第三行)是交换空间的使用情况。 |
total | 列显示系统总的可用物理内存和交换空间大小。 |
used | 列显示已经被使用的物理内存和交换空间。 |
free | 列显示还有多少物理内存和交换空间可用使用。 |
shared | 列显示被共享使用的物理内存大小。 |
buff/cache | 列显示被 buffer 和 cache 使用的物理内存大小。 |
available | 列显示还可以被应用程序使用的物理内存大小。 |
2)vmstat命令
虚拟内存状态信息:
选项 | 含义 |
-fs | -f:显示从启动到目前为止,系统复制(fork)的程序数, 此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止, 由一些事件导致的内存变化情况列表说明。 |
-S 单位 | 令输出的数据显示单位, 例如用 K/M 取代 bytes 的容量。 |
-d | 列出硬盘有关读写总量的统计表。 |
-p 分区设备文件名 | 查看硬盘分区的读写情况。 |
例如,
使用vmstat
命令,每隔3秒刷新一次,共刷新5次:
# vmstat 3 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 6920 111488 0 788316 0 0 58 35 128 144 2 1 97 0 0
0 0 6920 111488 0 788316 0 0 0 0 529 771 0 1 99 0 0
0 0 6920 111488 0 788316 0 0 0 0 532 773 1 1 99 0 0
0 0 6920 111488 0 788316 0 0 0 0 525 767 1 0 99 0 0
0 0 6920 111488 0 788316 0 0 0 14 537 765 1 1 98 0 0
说明:
字段 | 含义 |
procs | 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。 |
memory | 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。 -buff:缓冲的内存容量,单位为 KB。 -cache:缓存的内存容量,单位为 KB。 |
swap | 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。 这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。 |
io | 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。 这两个数越大,代表系统的 I/O 越繁忙。 |
system | 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。 这两个数越大,代表系统与接口设备的通信越繁忙。 |
cpu | CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比。 |
3、查看硬盘IO信息
使用iostat
命令可以查看硬盘相关信息:
安装:
yum -y install sysstat
选项:
-C | 显示CPU使用情况 |
-d | 显示磁盘使用情况 |
-k | 以KB为单位显示 |
-m | 以M为单位显示 |
-N | 显示磁盘阵列(LVM)信息 |
-n | 显示NFS |
-p[磁盘] | 显示磁盘和分区的情况 |
-t | 显示终端和CPU的信息 |
-x | 显示详细信息 |
-V | 显示版本信息 |
例如,
# iostat
Linux 3.10.0-862.el7.x86_64 (kvm1.cjavapy.com) 2021年10月17日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.61 0.00 0.93 0.03 0.01 97.42
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.81 58.51 35.62 14298971 8706042
dm-0 0.82 58.38 35.57 14269347 8693791
dm-1 0.01 0.01 0.04 2228 10112
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
4、iftop和dstat命令
iftop
是流量监控工具,dstat
是全能型监控工具。
1)iftop命令
安装:
yum -y install iftop
命令选项
-i | 指定要监控的网卡设备名 |
-B | 以bytes为单位显示流量 |
-n | 不显示主机名而是显示IP地址 |
-N | 说是默认显示端口,我也始终没看明白怎么用(don'tconvert port numbers to services) |
-F | 指定显示某网段的流量 |
2)dstat
安装:
yum -y install dstat
命令选项
-c | 显示cpu统计数据 |
-d | 显示磁盘数据 |
-g | 显示page的统计数据 |
-i | 显示中断的数据 |
-m | 显示内存 |
-s | 交换内存 |
-p | 显示进程队列 |
--ipc | 显示进程间消息队列,信号量和共享内存的使用情况 |
-DDISK | 只显示指定disk的统计数据 |
-y | 系统状态数据 |
-n | 显示网络接口 |
-Neth0 | 仅显示指定网络接口的使用情况 |
-f | 以完整格式显示所有信息 |