显示系统的运行时间以及系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。等同于 top
命令的第一行。
[root@jz-desktop-02 ~]# uptime
23:35:41 up 44 days, 4:41, 3 users, load average: 0.59, 0.56, 0.63
23:35:41
: 当前时间;up 44 days, 4:41
: 系统运行了 44天4小时41分钟;3 users
: 当前有3个用户登录;load average: 0.59, 0.56, 0.63
: 系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载。
常用选项
-p, --pretty
采用可读友好的格式输出系统已运行时长
-h, --help
显示帮助信息
-s, --since
以格式 yyyy-mm-dd HH:MM:SS format 输出系统启动时间
-V, --version
显示版本信息
-p
:[root@jz-desktop-02 ~]# uptime -p up 6 weeks, 2 days, 4 hours, 42 minutes
-s
:[root@jz-desktop-02 ~]# uptime -s 2023-06-25 18:54:12
什么是系统平均负载
系统平均负载指单位时间内, 系统中处于 可运行状态 和 不可中断状态的进程数,也就是 平均活跃进程数, 它和 cpu使用率 没有直接的关系.
可运行状态的进程
指正在使用 cpu 或正在等待使用 cpu 的进程, 也就是 ps 命令看到的, 处于 R状态(Running or Runnable) 的进程.
不可中断状态的进程
指正在等待某些 I/O 的进程, 也就是 ps 命令看到的 D状态(Uninterruptible Sleep, 也称为 Disk Sleep)的进程。 例如等待磁盘 I/O, 当一个进程向磁盘读写数据时, 为了保证数据的一致性, 在得到磁盘回复前, 它是不能被其他进程打断的, 这个时候的进程就处于不可中断状态. 如果此时的进程被打断了, 就容易出现磁盘数据与进程数据不一致的问题。 所以, 不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
系统平均负载多少时合理
uptime 命令给出的三个时间段的平均负载并不是标准化的, 因为系统中的 cpu 核心数量是不定的. 所以平均负载为 1 意味着拥有 一个cpu核心 的系统一直在忙碌, 而在一个拥有 四个cpu核心 的系统上, 以为着系统 75% 的时间是空闲的。
所以,当 系统平均负载 除以 cpu核心数 小于等于1,表示系统没有出现过载的情况。最理想的情况是 每个cpu上都刚好运行一个进程,这样 cpu 就得到了充分的利用。
top - 00:13:47 up 44 days, 5:19, 3 users, load average: 0.34, 0.43, 0.50
Tasks: 438 total, 1 running, 437 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.4 us, 0.7 sy, 0.0 ni, 97.8 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65631716 total, 493936 free, 42085480 used, 23052300 buff/cache
KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18945300 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13336 root 20 0 18.0g 2.1g 6180 S 6.6 3.3 1413:58 java
15756 root 20 0 15.6g 2.9g 8344 S 5.6 4.6 3265:53 ld-linux-x86-64
8283 10001 20 0 19.3g 1.1g 15668 S 2.6 1.8 78:23.30 sqlservr
23424 impala 20 0 22.6g 524108 8416 S 2.0 0.8 898:36.06 impalad
4634 10000 20 0 2019808 76372 10780 S 1.6 0.1 297:00.83 harbor_core
7406 hive 20 0 2797808 643316 6048 S 1.6 1.0 1111:45 java
5841 200 20 0 13.1g 2.5g 5376 S 1.3 4.0 677:46.53 java
17932 root 20 0 10.8g 775660 0 S 1.3 1.2 647:50.16 java
22034 yarn 20 0 3480388 1.2g 6408 S 1.3 1.9 1103:10 java
29559 hbase 20 0 12.0g 7.9g 6820 S 1.3 12.6 875:48.01 java
1631 root 20 0 2707556 54028 3016 S 1.0 0.1 3655:28 python
3732 hive 20 0 26.7g 1.4g 6800 S 1.0 2.3 727:30.33 java
18257 root 20 0 9.8g 873360 616 S 1.0 1.3 677:35.10 java
第一行: 和 uptime
命令一样.
第二行: 当前系统重任务(进程数)的相关情况,
438 total
: 系统当前一共有 652 个进程.1 running
: 有一个进程正在执行.437 sleeping
: 有 437 个进程处于睡眠状态, 也就是不需要使用 cpu 的状态.0 stopped
: 有 0 个进程处于stopped
状态, 这个状态就是被停下来的进程, 比如通过 ctrl+z 让一个进程停下来, 你可以通过给这个进程发送一个信号 SIGCONT 让这个进程恢复执行.0 zombie
: 有 0 个僵尸进程, 僵尸进程就是一个进程执行完了, 但是其父进程还没来得及处理子进程的退出状态信息(成为"退出状态码" 或 "退出码").
第三行:
us
: 用户空间占用 CPU 百分比.sy
: 内核空间占用 CPU 百分比.ni
: 用户进程空间内改变过优先级的进程占用 CPU 百分比.id
: 空闲CPU百分比.wa
: 等待输入输入的CPU百分比.hi
: 硬中断占用CPU百分比.si
: 软中断CPU百分比.st
: 虚拟CPU等待实际CPU的时间的百分比.
一般关注的多的是 us
、sy
、id
、wa
、hi
、wi
这 6 个数值, 需要注意的指标如下:
- CPU(s): 表示当前 cpu 的平均值, 默认 top 命令配置显示的事平均的 cpu 使用情况, 按键盘1可以显示各个逻辑 cpu 的使用情况
top - 00:42:44 up 44 days, 5:48, 3 users, load average: 0.43, 0.42, 0.50 Tasks: 438 total, 1 running, 437 sleeping, 0 stopped, 0 zombie %Cpu0 : 7.0 us, 1.0 sy, 0.0 ni, 89.9 id, 1.7 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu1 : 2.0 us, 1.0 sy, 0.0 ni, 88.6 id, 8.4 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 1.7 us, 1.0 sy, 0.0 ni, 96.6 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 2.0 us, 0.7 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu4 : 3.4 us, 2.0 sy, 0.0 ni, 92.6 id, 2.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu5 : 2.7 us, 1.0 sy, 0.0 ni, 81.3 id, 15.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu6 : 6.0 us, 4.7 sy, 0.0 ni, 77.5 id, 11.7 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu7 : 2.3 us, 1.7 sy, 0.0 ni, 77.9 id, 17.7 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu8 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu9 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu10 : 6.3 us, 1.0 sy, 0.0 ni, 92.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu11 : 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu12 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu13 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu14 : 0.0 us, 0.3 sy, 0.0 ni, 90.7 id, 9.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu15 : 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 : 65631716 total, 440220 free, 42104888 used, 23086608 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18925900 avail Mem
- 统计空闲的 cpu 利用率, 直接统计
%id
即可, 当 id 持续过低的时候, 表示系统迫切需要解决 cpu 资源问题. - 统计cpu使用率, 使用
1-%id
获取, 或者us+sy+si
. - wa: 使用率过高的时候, 需要考虑 IO 的性能是否有瓶颈, 可以在使用 iostat、sar 等命令进一步分析.
- hi: 使用率过高时, 表示当前硬件中断占用很大的百分比, 一般硬件中断可以分析文件
/proc/interrupts
、/proc/irq/pid/smp_affinity
、服务irqbalance
是否配置,以及 cpu 的频率设置, 通过这些可以帮助系统打散优化系统的硬件中断. - si: 常见的软终端一般都是和网络有关. 从网卡到IP层的数据报文收发都是si处理的,长时间写日志也可能产生软中断. 当软终端出现瓶颈的时候, 系统有个进行叫
ksoftirqd
, 每个cpu都有自己对应的ksoftirqd/n(n为cpu的逻辑id)
,每个ksoftirqd
的内核线程都会去运行对应的ksoftirqd(函数)
来处理自己的终端队列上的软件中断. 所以, 当网络出现阻塞的时候, 软件中断程序ksoftirqd
肯定会出现瓶颈. 此时可以通过ps -aux|grep ksoftirqd
查看ksoftirqd
的瓶颈.
- 统计空闲的 cpu 利用率, 直接统计
第四行: 内存的使用情况
total
: 总共有 65631716kb 的内存.free
: 还有 493936kb 的内存没有使用.used
: 使用了 42085480kb 的内存.buff/cache
: 用于缓存的物理内存大小.
第五行: 交换分区的使用情况, 交换分区就是当操作系统发现内存满了之后, 操作系统会选择部分不常使用的页面将它放到磁盘中,需要使用的时候再将这部分数据从磁盘中读取出来.
total
: 总共有 32964604kb 的交换内存.free
: 还有 31364860kb 的交换内存没有使用.used
: 使用了 1599744kb 的交换内存.avail Mem
: 可用于启动新程序的内存大小估值.
第七行: 各进程(任务)的状态监控
PID
: 进程id.USER
: 进程所有者.PR
: 进程优先级.NI
: nice值, 负值表示高优先级, 正直表示低优先级.VIRT
: 进程使用的虚拟内存总量, 单位kb. VIRT=SWAP+RES.RES
: 进程使用的、未被交换出的物理内存大小, 单位kb. RES=CODE+DATASHR
: 共享内存大小,单位kb.S
: 进程状态. D:不可中断的睡眠状态; R:运行; S:睡眠; T:跟踪/停止; Z:僵尸进程.%CPU
: 上次更新到现在的 CPU 时间占用百分比.%MEM
: 进程使用的物理内存百分比.TIME
: 进程使用的CPU时间总计, 单位1/100秒.COMMAND
: 进程名称(命令名/命令行).
top 命令交互操作
-
c
: 详细显示命令行的内容top - 01:05:17 up 44 days, 6:11, 3 users, load average: 0.55, 0.63, 0.61 Tasks: 442 total, 1 running, 441 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.2 us, 1.0 sy, 0.0 ni, 94.7 id, 2.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 451328 free, 42115916 used, 23064472 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18914888 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13336 root 20 0 18.0g 2.1g 6180 S 6.9 3.3 1417:18 /app/doris/starrocks/fe/jdk/bin/java -Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseMembar -XX:Surv+ 29559 hbase 20 0 12.0g 7.9g 6820 S 6.9 12.6 876:30.92 /usr/jdk64/jdk1.8.0_112/bin/java -Dproc_regionserver -XX:OnOutOfMemoryError=kill -9 %p -Dhdp.version=3.+ 15756 root 20 0 15.6g 2.9g 8344 S 5.6 4.6 3268:42 /lib64/ld-linux-x86-64.so.2 --library-path /root/.cache/JetBrains/RemoteDev/dist/c3754c14958a2_ideaIU-2+ 19070 infra-s+ 20 0 14.8g 1.9g 140536 S 3.3 3.1 1165:37 /usr/jdk64/jdk1.8.0_112/bin/java -server -Xms2048m -Xmx4096m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:Tar+ 1406 root 20 0 1689256 28268 7040 S 2.6 0.0 251:10.79 /usr/bin/containerd 8283 10001 20 0 19.3g 1.1g 15668 S 2.3 1.8 79:32.45 /opt/mssql/bin/sqlservr 22034 yarn 20 0 3480388 1.2g 6408 S 1.6 1.9 1104:05 /usr/jdk64/jdk1.8.0_112/bin/java -Dproc_nodemanager -Dhdp.version=3.3.1.0-001 -Djava.net.preferIPv4Stac+ 1641 root 20 0 4815780 92204 9496 S 1.3 0.1 487:55.10 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 7914 root 20 0 164668 2692 1624 R 1.3 0.0 0:00.26 top 17932 root 20 0 10.8g 775660 0 S 1.3 1.2 648:25.56 /usr/lib/jvm/java-1.8.0-openjdk/bin/java -Xmx1073741824 -Xms1073741824 -XX:MaxMetaspaceSize=268435456 -+ 18257 root 20 0 9.8g 873360 616 S 1.3 1.3 678:11.56 /usr
-
o
: 可以输入过滤条件# 查询 %CPU>5.0 的记录 top - 01:11:06 up 44 days, 6:16, 3 users, load average: 1.61, 1.01, 0.76 Tasks: 437 total, 1 running, 436 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.7 us, 1.1 sy, 0.0 ni, 96.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 452736 free, 42117024 used, 23061956 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18913780 avail Mem add filter #1 (ignoring case) as: [!]FLD?VAL %CPU>5.0 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13336 root 20 0 18.0g 2.1g 6180 S 8.6 3.3 1417:42 java # 查询 USER 是 root的记录 top - 01:11:06 up 44 days, 6:16, 3 users, load average: 1.61, 1.01, 0.76 Tasks: 437 total, 1 running, 436 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.7 us, 1.1 sy, 0.0 ni, 96.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 452736 free, 42117024 used, 23061956 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18913780 avail Mem add filter #1 (ignoring case) as: [!]FLD?VAL USER=root PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13336 root 20 0 18.0g 2.1g 6180 S 7.0 3.3 1417:46 java 15756 root 20 0 15.6g 2.9g 8344 S 6.7 4.6 3269:04 ld-linux-x86-64 1631 root 20 0 2707556 54036 3016 S 1.7 0.1 3658:51 python 18257 root 20 0 9.8g 873360 616 S 1.7 1.3 678:16.64 java 17932 root 20 0 10.8g 775660 0 S 1.3 1.2 648:30.48 java
-
k
: 杀死进程top - 01:13:27 up 44 days, 6:19, 3 users, load average: 0.75, 0.88, 0.75 Tasks: 443 total, 1 running, 442 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 1.4 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 459880 free, 42119044 used, 23052792 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18911764 avail Mem PID to signal/kill [default pid = 17234] 17234 # 杀死 17234 进程 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17234 root 20 0 164508 2608 1576 R 12.5 0.0 0:00.02 top top - 01:13:27 up 44 days, 6:19, 3 users, load average: 0.75, 0.88, 0.75 Tasks: 443 total, 1 running, 442 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 1.4 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 459880 free, 42119044 used, 23052792 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18911764 avail Mem Send pid 17234 signal [15/sigterm] 9 # 输入信号 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17234 root 20 0 164508 2608 1576 R 12.5 0.0 0:00.02 top top - 01:13:27 up 44 days, 6:19, 3 users, load average: 0.75, 0.88, 0.75 Tasks: 443 total, 1 running, 442 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 1.4 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 459880 free, 42119044 used, 23052792 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18911764 avail Mem Send pid 17234 signal [15/sigterm] 9已杀死
下面是信号表
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
-
u
: 过滤查看指定用户的进程top - 01:15:46 up 44 days, 6:21, 3 users, load average: 0.37, 0.71, 0.71 Tasks: 441 total, 1 running, 440 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.4 us, 1.7 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 461296 free, 42116332 used, 23054088 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18914480 avail Mem Which user (blank for all) nginx # 查看nginx用户的进程 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13336 root 20 0 18.0g 2.1g 6180 S 13.3 3.3 1417:58 java 20036 root 20 0 164508 2604 1576 R 13.3 0.0 0:00.02 top top - 01:16:08 up 44 days, 6:21, 3 users, load average: 0.25, 0.65, 0.69 Tasks: 441 total, 1 running, 440 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.6 us, 0.8 sy, 0.0 ni, 96.4 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65631716 total, 460584 free, 42118176 used, 23052956 buff/cache KiB Swap: 32964604 total, 31364860 free, 1599744 used. 18912612 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2687 nginx 20 0 48764 104 104 S 0.0 0.0 0:00.00 nginx 2688 nginx 20 0 48764 124 124 S 0.0 0.0 0:00.00 nginx
-
i
: 过滤CPU利用率很低的进程, 很多时候我们在进行系统分析的时候需要去判断那个进程CPU占有率高,因此i是一个非常有效的方式过滤掉干扰进程。
pidstat 可以监控 进程的cpu、内存、线程、设备IO等系统资源的占用情况
Ubuntu 安装 pidstat
apt-get install sysstat
Centos 安装 pidstat
yum install sysstat
pidstat 用法:
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
常用的参数:
- -u:默认的参数,显示各个进程的cpu使用统计
- -r:显示各个进程的内存使用统计
- -d:显示各个进程的IO使用情况
- -p:指定进程号
- -w:显示每个进程的上下文切换情况
- -t:显示选择任务的线程的统计信息外的额外信息
- -T { TASK | CHILD | ALL }: 这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
- -V:版本号
- -h:在一行上显示了所有活动,这样其他程序可以容易解析。
- -I:在SMP环境,表示任务的CPU使用率/内核数量
- -l:显示命令名和所有参数
示例一: 查看所有进程的 CPU 使用情况( -u -p ALL)
pidstat
pidstat -u -p ALL
两个命令的效果一样
[root@jz-desktop-02 ~]# pidstat
[root@jz-desktop-02 ~]# pidstat -u -p ALL 1 #每秒一次显示所有cpu, 一直统计
[root@jz-desktop-02 ~]# pidstat -u -p ALL 1 3 #每秒一次显示所有cpu, 总共统计3次
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
12时07分01秒 UID PID %usr %system %guest %CPU CPU Command
12时07分01秒 0 1 0.10 0.06 0.00 0.16 4 systemd
12时07分01秒 0 2 0.00 0.00 0.00 0.00 1 kthreadd
12时07分01秒 0 6 0.00 0.00 0.00 0.00 0 ksoftirqd/0
12时07分01秒 0 7 0.00 0.00 0.00 0.00 0 migration/0
12时07分01秒 0 9 0.00 0.29 0.00 0.29 6 rcu_sched
12时07分01秒 0 11 0.00 0.00 0.00 0.00 0 watchdog/0
12时07分01秒 0 12 0.00 0.00 0.00 0.00 1 watchdog/1
12时07分01秒 0 13 0.00 0.00 0.00 0.00 1 migration/1
12时07分01秒 0 14 0.00 0.00 0.00 0.00 1 ksoftirqd/1
参数说明:
PID
: 进程ID%usr
: 进程在用户空间占用cpu的百分比, 这个参数过大, 可能是- 大量 CPU密集型任务 正在运行, 比如应用程序需要执行复杂的算法、数据处理等;
- 大量 多线程应用在执行, 比如应用程序使用多线程并且这些线程在用户空间中执行大量的工作;
- 大量 高并发操作, 比如应用程序在用户空间中执行大量的并发操作,如网络通信、文件操作等;
%system
: 进程在内核空间占用cpu的百分比, 这个参数过大, 可能是有大量的 I/O 操作(如磁盘读写、网络通信), 也可以使用 pidstat 查看系统当前I/O情况.%guest
: 进程在虚拟机占用cpu的百分比.%CPU
: 进程占用cpu的百分比, %CPU=%usr+%system+%guest.CPU
: 处理进程的cpu编号.Command
: 当前进程对应的命令.
示例二: cpu 使用情况统计(-u)
执行 pidstat -u 与单独指定 pidstat 效果一样
示例三: 内存使用情况统计(-r)
pidstat -r 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
13时25分50秒 UID PID minflt/s majflt/s VSZ RSS %MEM Command
13时25分51秒 0 1432 11.88 0.00 127676 1124 0.00 keepalived
13时25分51秒 1000 3222 0.99 0.00 11239548 1719420 2.62 java
13时25分51秒 10001 8283 0.99 0.00 20223048 1205344 1.84 sqlservr
13时25分51秒 0 8608 560.40 0.00 108856 1496 0.00 pidstat
13时25分51秒 1013 19070 0.99 0.00 15492668 2030184 3.09 java
13时25分51秒 1012 28618 6.93 0.00 10798544 984620 1.50 java
平均时间: UID PID minflt/s majflt/s VSZ RSS %MEM Command
平均时间: 0 1432 11.88 0.00 127676 1124 0.00 keepalived
平均时间: 1000 3222 0.99 0.00 11239548 1719420 2.62 java
平均时间: 10001 8283 0.99 0.00 20223048 1205344 1.84 sqlservr
平均时间: 0 8608 560.40 0.00 108856 1496 0.00 pidstat
平均时间: 1013 19070 0.99 0.00 15492668 2030184 3.09 java
平均时间: 1012 28618 6.93 0.00 10798544 984620 1.50 java
参数说明:
PID
: 进程ID.minflt/s
: 任务每秒发生的次要错误, 不需要从磁盘中加载页.majflt/s
: 任务每秒发生的主要错误, 需要从磁盘中加载页.VSZ
: 虚拟地址大小, 虚拟内存的使用, 单位kb.RSS
: 常驻集合大小, 非交换分区的使用, 单位kb.%MEM
: 进程占用的内存.
示例四: 显示各个进程的IO使用情况(-d)
pidstat -d 1 2
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
13时32分04秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
13时32分05秒 0 13336 0.00 3.92 0.00 java
13时32分05秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
13时32分06秒 0 843 0.00 404.00 0.00 jbd2/sda-8
13时32分06秒 0 1631 0.00 1352.00 1352.00 python
13时32分06秒 0 1641 0.00 80.00 0.00 dockerd
13时32分06秒 0 3039 0.00 4.00 4.00 containerd-shim
13时32分06秒 0 3175 0.00 4.00 4.00 containerd-shim
13时32分06秒 0 3697 0.00 4.00 4.00 containerd-shim
13时32分06秒 0 4041 0.00 4.00 4.00 containerd-shim
13时32分06秒 0 4078 0.00 4.00 4.00 containerd-shim
13时32分06秒 999 4597 0.00 20.00 0.00 postgres
13时32分06秒 0 4613 0.00 4.00 4.00 containerd-shim
13时32分06秒 1013 19070 0.00 2080.00 8.00 java
13时32分06秒 0 21024 0.00 28.00 0.00 java
平均时间: UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
平均时间: 0 843 0.00 200.00 0.00 jbd2/sda-8
平均时间: 0 1631 0.00 669.31 669.31 python
平均时间: 0 1641 0.00 39.60 0.00 dockerd
平均时间: 0 3039 0.00 1.98 1.98 containerd-shim
平均时间: 0 3175 0.00 1.98 1.98 containerd-shim
平均时间: 0 3697 0.00 1.98 1.98 containerd-shim
平均时间: 0 4041 0.00 1.98 1.98 containerd-shim
平均时间: 0 4078 0.00 1.98 1.98 containerd-shim
平均时间: 999 4597 0.00 9.90 0.00 postgres
平均时间: 0 4613 0.00 1.98 1.98 containerd-shim
平均时间: 0 13336 0.00 1.98 0.00 java
平均时间: 1013 19070 0.00 1029.70 3.96 java
平均时间: 0 21024 0.00 13.86 0.00 java
参数说明:
PID
: 进程ID.kB_rd/s
: 每秒从磁盘读取的速率, 单位kb.kB_wr/s
: 每秒写入磁盘的速率, 单位kb.kB_ccwr/s
: 任务取消的写入磁盘的速率, 单位kb, 当任务截断脏的pagecache的时候会发生.
示例五: 查询进程中子线程的IO使用情况(-t -p)
pidstat -t -p 19070
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
13时37分12秒 UID TGID TID %usr %system %guest %CPU CPU Command
13时37分12秒 1013 19070 - 1.54 0.29 0.00 1.83 8 java
13时37分12秒 1013 - 19070 0.00 0.00 0.00 0.00 8 |__java
13时37分12秒 1013 - 19074 0.00 0.00 0.00 0.00 11 |__java
13时37分12秒 1013 - 19075 0.01 0.00 0.00 0.01 10 |__java
参数说明:
TGID
: 主线程的表示.TID
: 线程id.%usr
: 进程在用户空间占用cpu的百分比.%system
: 进程在内核空间占用cpu的百分比.%guest
: 进程在虚拟机占用cpu的百分比.%CPU
: 进程占用cpu的百分比.CPU
: 处理进程的cpu编号.Command
: 当前进程对应的命令.
示例六: 查看系统上下文切换情况(-w)
pidstat -w 1 2
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月09日 _x86_64_ (20 CPU)
13时41分21秒 UID PID cswch/s nvcswch/s Command
13时41分22秒 0 8 1.98 0.00 ksoftirqd/0
13时41分22秒 0 9 146.53 0.00 rcu_sched
13时41分22秒 0 17 1.98 0.00 ksoftirqd/1
13时41分22秒 0 53 5.94 0.00 ksoftirqd/7
13时41分22秒 0 77 57.43 0.00 ksoftirqd/11
13时41分22秒 0 95 0.99 0.00 ksoftirqd/14
13时41分22秒 0 107 0.99 0.00 ksoftirqd/16
13时41分22秒 0 113 0.99 0.00 ksoftirqd/17
13时41分22秒 0 119 0.99 0.00 ksoftirqd/18
13时41分22秒 0 125 0.99 0.00 ksoftirqd/19
13时41分22秒 0 371 155.45 0.00 kworker/7:1H
13时41分22秒 0 523 49.50 0.00 jbd2/dm-1-8
参数说明:
PID
: 进程id.Cswch/s
: 每秒主动任务上下文切换数量.Nvcswch/s
: 每秒被动任务上下文切换数量.Command
: 命令名.
非自愿上下文切换: 自愿上下文切换:是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
非自愿上下文切换:则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
每秒上下文切换多少次算正常?
这个数值主要取决于系统CPU的性能,如果上下文切换比较稳定,那在1万以下都算是正常,如果超过1万或者切换次数出现很大的增长,就很可能出现了性能问题。
- cswch ,自愿上下文切换的次数增多了,说明系统正在等待资源,有可能发生了I/O等其它问题;
- nvcswch ,非自愿上下文切换的次数增多了,说明进程都在强制调度,也就是在争抢CPU,说明CPU性能成了瓶颈.
中断次数增多了,说明CPU被中断,通过分析/proc/interrupt文件来确认中断类型。
pidstat 结合 vmstat 使用
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
2 3 0 4357204 8018304 40037852 0 0 15 92 0 0 2 1 82 15 0
- system 显示采集间隔内发生的中断数
- in 列表示在某一时间间隔中观测到的每秒设备中断数。
- cs 列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查
mpstat (multiprocessor state) 可以查看所有cpu的平均负载,也可以查看指定cpu的负载。所以mpstat其实就是主要查看CPU负载的一个工具。是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标。
[root@jz-desktop-02 ~]# mpstat -P ALL 1 # 查看所有 cpu,每 1s 刷新一次
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
01时22分12秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时22分13秒 all 1.13 0.00 0.69 0.19 0.00 0.00 0.00 0.00 0.00 97.99
01时22分13秒 0 2.02 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 95.96
01时22分13秒 1 2.02 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
01时22分13秒 2 2.02 0.00 1.01 3.03 0.00 0.00 0.00 0.00 0.00 93.94
01时22分13秒 3 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
01时22分13秒 4 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
01时22分13秒 5 2.02 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
01时22分13秒 6 1.02 0.00 1.02 0.00 0.00 0.00 0.00 0.00 0.00 97.96
01时22分13秒 7 5.00 0.00 1.00 0.00 0.00 1.00 0.00 0.00 0.00 93.00
01时22分13秒 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时22分13秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时22分13秒 10 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
01时22分13秒 11 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
01时22分13秒 12 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01
01时22分13秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时22分13秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时22分13秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
[root@jz-desktop-02 ~]# mpstat -P ALL 1 2 # 查看所有 cpu,每 1s 刷新一次, 一共刷新 2次
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
01时26分47秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时26分48秒 all 4.39 0.00 0.75 4.57 0.00 0.00 0.00 0.00 0.00 90.29
01时26分48秒 0 15.15 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 83.84
01时26分48秒 1 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
01时26分48秒 2 1.01 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 97.98
01时26分48秒 3 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
01时26分48秒 4 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
01时26分48秒 5 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
01时26分48秒 6 0.00 0.00 1.02 72.45 0.00 0.00 0.00 0.00 0.00 26.53
01时26分48秒 7 1.01 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 97.98
01时26分48秒 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分48秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分48秒 10 47.47 0.00 4.04 0.00 0.00 0.00 0.00 0.00 0.00 48.48
01时26分48秒 11 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
01时26分48秒 12 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
01时26分48秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分48秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分48秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分48秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时26分49秒 all 1.45 0.00 0.75 0.82 0.00 0.00 0.00 0.00 0.00 96.98
01时26分49秒 0 4.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 95.00
01时26分49秒 1 1.03 0.00 1.03 0.00 0.00 0.00 0.00 0.00 0.00 97.94
01时26分49秒 2 2.06 0.00 1.03 0.00 0.00 0.00 0.00 0.00 0.00 96.91
01时26分49秒 3 2.02 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
01时26分49秒 4 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
01时26分49秒 5 4.00 0.00 1.00 1.00 0.00 0.00 0.00 0.00 0.00 94.00
01时26分49秒 6 1.01 0.00 1.01 12.12 0.00 0.00 0.00 0.00 0.00 85.86
01时26分49秒 7 4.08 0.00 2.04 0.00 0.00 0.00 0.00 0.00 0.00 93.88
01时26分49秒 8 3.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
01时26分49秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分49秒 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分49秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分49秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分49秒 13 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
01时26分49秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时26分49秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均时间: all 2.92 0.00 0.75 2.70 0.00 0.00 0.00 0.00 0.00 93.63
平均时间: 0 9.55 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 89.45
平均时间: 1 1.02 0.00 1.02 0.00 0.00 0.00 0.00 0.00 0.00 97.97
平均时间: 2 1.53 0.00 1.02 0.00 0.00 0.00 0.00 0.00 0.00 97.45
平均时间: 3 1.51 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 97.49
平均时间: 4 1.51 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 97.99
平均时间: 5 2.50 0.00 1.00 0.50 0.00 0.00 0.00 0.00 0.00 96.00
平均时间: 6 0.51 0.00 1.02 42.13 0.00 0.00 0.00 0.00 0.00 56.35
平均时间: 7 2.54 0.00 1.52 0.00 0.00 0.00 0.00 0.00 0.00 95.94
平均时间: 8 1.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.50
平均时间: 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 10 23.62 0.00 2.01 0.00 0.00 0.00 0.00 0.00 0.00 74.37
平均时间: 11 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: 12 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: 13 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
[root@jz-desktop-02 ~]# mpstat -P ALL 0 1 2 # 查看 0号cpu,每 1s 刷新一次, 一共刷新 2次
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
01时27分58秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时27分59秒 0 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
01时28分00秒 0 1.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.98
平均时间: 0 1.01 0.00 0.51 0.00 0.00 0.00 0.00 0.00 0.00 98.48
以下是各个参数的解释:
- CPU:显示每个 CPU 的编号。
- %usr:表示用户进程在 CPU 上消耗的时间百分比。
- %nice:表示 nice 值较高的进程在 CPU 上消耗的时间百分比。
- %sys:表示内核进程在 CPU 上消耗的时间百分比。
- %iowait:表示 CPU 空闲等待 I/O 操作的时间百分比。
- %irq:表示 CPU 在服务硬件中断时消耗的时间百分比。
- %soft:表示 CPU 在服务软件中断时消耗的时间百分比。
- %steal:表示虚拟化环境下,CPU 时间被虚拟机监视器或其他虚拟机占用的时间百分比。
- %guest:表示虚拟化环境下,CPU 时间被虚拟机操作系统占用的时间百分比。
- %idle:表示 CPU 空闲的时间百分比
mpstat
的案例
mpstat
主要用在当系统变慢, 如 ssh 过去输入命令特别卡、平均负载增大时, 我们想判断到底是 CPU 的使用率增大了, 还是 IO 压力增大的情况.
当系统变慢, 第一反应使用 top 或 uptime 来了解系统的负载情况. 如上面介绍的命令.
采用stress压力测试工具,模拟高计算,高IO的情况,使用uptime查看平均负载,使用mpstat和pidstat工具,找出平均负载高的根源。
计算密集型
[root@jz-desktop-01 ~]# stress -c 10 -t 600
stress: info: [36423] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd
[root@jz-desktop-01 ~]# uptime
01:54:23 up 44 days, 10:27, 2 users, load average: 6.83, 2.94, 2.10
[root@jz-desktop-01 ~]# pidstat -u 5
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-01) 2023年08月09日 _x86_64_ (16 CPU)
01时54分34秒 UID PID %usr %system %guest %CPU CPU Command
01时54分39秒 0 9 0.00 0.20 0.00 0.20 1 rcu_sched
01时54分39秒 0 1413 0.20 0.00 0.00 0.20 3 rsyslogd
01时54分39秒 0 1682 0.00 0.20 0.00 0.20 10 dockerd
01时54分39秒 0 1731 16.40 2.60 0.00 19.00 9 python
01时54分39秒 27 1961 0.60 0.00 0.00 0.60 8 mysqld
01时54分39秒 1018 19277 0.20 0.00 0.00 0.20 6 jsvc
01时54分39秒 1018 22014 0.80 0.20 0.00 1.00 12 java
01时54分39秒 1019 24994 101.00 0.00 0.00 101.00 14 java
01时54分39秒 0 27160 0.00 0.20 0.00 0.20 9 kworker/u32:2
01时54分39秒 1019 28025 0.60 0.20 0.00 0.80 11 java
01时54分39秒 1012 28515 0.20 0.40 0.00 0.60 15 python2.7
01时54分39秒 1009 29951 0.80 0.20 0.00 1.00 15 java
01时54分39秒 0 33714 1.00 0.40 0.00 1.40 9 java
01时54分39秒 0 36424 100.00 0.00 0.00 100.00 13 stress
01时54分39秒 0 36425 100.20 0.00 0.00 100.20 6 stress
01时54分39秒 0 36426 100.20 0.00 0.00 100.20 11 stress
01时54分39秒 0 36427 100.20 0.00 0.00 100.20 10 stress
01时54分39秒 0 36428 100.20 0.00 0.00 100.20 14 stress
01时54分39秒 0 36429 100.00 0.20 0.00 100.20 4 stress
01时54分39秒 0 36430 100.00 0.20 0.00 100.20 0 stress
01时54分39秒 0 36431 100.20 0.00 0.00 100.20 9 stress
01时54分39秒 0 36432 100.20 0.00 0.00 100.20 2 stress
01时54分39秒 0 36433 99.80 0.20 0.00 100.00 12 stress
01时54分39秒 0 37295 0.00 0.20 0.00 0.20 3 pidstat
01时54分39秒 1021 37443 0.20 0.00 0.00 0.20 12 java
01时54分39秒 1017 39672 0.20 0.00 0.00 0.20 11 java
01时54分39秒 1008 39752 0.20 0.20 0.00 0.40 9 java
可以看见, stress 命令导致10个 cpu 被使用完,所以针对性的 kill 掉相关的进程.
I/O密集型
stress --io 10 --hdd 10 --timeout 600
进行压力测试,产生10个进程,持续600秒
-i : --io 产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上
[root@jz-desktop-01 ~]# mpstat -P ALL 3 2
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-01) 2023年08月09日 _x86_64_ (16 CPU)
01时59分24秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时59分27秒 all 6.65 0.00 1.07 38.05 0.00 0.02 0.00 0.00 0.00 54.21
01时59分27秒 0 0.34 0.00 5.14 94.52 0.00 0.00 0.00 0.00 0.00 0.00
01时59分27秒 1 0.68 0.00 0.34 59.86 0.00 0.00 0.00 0.00 0.00 39.12
01时59分27秒 2 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
01时59分27秒 3 1.00 0.00 0.33 24.00 0.00 0.00 0.00 0.00 0.00 74.67
01时59分27秒 4 0.34 0.00 4.44 75.09 0.00 0.00 0.00 0.00 0.00 20.14
01时59分27秒 5 0.34 0.00 1.71 97.60 0.00 0.00 0.00 0.00 0.00 0.34
01时59分27秒 6 0.68 0.00 0.00 58.78 0.00 0.00 0.00 0.00 0.00 40.54
01时59分27秒 7 0.35 0.00 0.00 99.65 0.00 0.00 0.00 0.00 0.00 0.00
01时59分27秒 8 0.33 0.00 0.00 25.75 0.00 0.00 0.00 0.00 0.00 73.91
01时59分27秒 9 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
01时59分27秒 10 99.67 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.33
01时59分27秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时59分27秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时59分27秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时59分27秒 14 0.67 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.33
01时59分27秒 15 0.00 0.00 5.03 80.87 0.00 0.00 0.00 0.00 0.00 14.09
01时59分27秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
01时59分30秒 all 6.62 0.00 0.23 41.12 0.00 0.02 0.00 0.00 0.00 52.01
01时59分30秒 0 1.35 0.00 0.00 92.57 0.00 0.00 0.00 0.00 0.00 6.08
01时59分30秒 1 0.67 0.00 0.34 89.60 0.00 0.00 0.00 0.00 0.00 9.40
01时59分30秒 2 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
01时59分30秒 3 0.68 0.00 0.00 84.07 0.00 0.00 0.00 0.00 0.00 15.25
01时59分30秒 4 0.34 0.00 0.34 84.12 0.00 0.00 0.00 0.00 0.00 15.20
01时59分30秒 5 0.67 0.00 0.00 63.55 0.00 0.00 0.00 0.00 0.00 35.79
01时59分30秒 6 0.34 0.00 0.00 99.66 0.00 0.00 0.00 0.00 0.00 0.00
01时59分30秒 7 0.34 0.00 0.34 37.37 0.00 0.00 0.00 0.00 0.00 61.95
01时59分30秒 8 0.00 0.00 0.00 13.00 0.00 0.00 0.00 0.00 0.00 87.00
01时59分30秒 9 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00 99.67
01时59分30秒 10 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时59分30秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01时59分30秒 12 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
01时59分30秒 13 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
01时59分30秒 14 0.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 99.34
01时59分30秒 15 0.00 0.00 2.35 97.65 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均时间: all 6.63 0.00 0.65 39.59 0.00 0.02 0.00 0.00 0.00 53.11
平均时间: 0 0.85 0.00 2.55 93.54 0.00 0.00 0.00 0.00 0.00 3.06
平均时间: 1 0.68 0.00 0.34 74.83 0.00 0.00 0.00 0.00 0.00 24.16
平均时间: 2 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.67
平均时间: 3 0.84 0.00 0.17 53.78 0.00 0.00 0.00 0.00 0.00 45.21
平均时间: 4 0.34 0.00 2.38 79.63 0.00 0.00 0.00 0.00 0.00 17.66
平均时间: 5 0.51 0.00 0.85 80.37 0.00 0.00 0.00 0.00 0.00 18.27
平均时间: 6 0.51 0.00 0.00 79.22 0.00 0.00 0.00 0.00 0.00 20.27
平均时间: 7 0.34 0.00 0.17 67.98 0.00 0.00 0.00 0.00 0.00 31.51
平均时间: 8 0.17 0.00 0.00 19.37 0.00 0.00 0.00 0.00 0.00 80.47
平均时间: 9 0.17 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 99.67
平均时间: 10 99.83 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.17
平均时间: 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 12 0.17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.83
平均时间: 13 0.17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.83
平均时间: 14 0.50 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.33
平均时间: 15 0.00 0.00 3.69 89.26 0.00 0.00 0.00 0.00 0.00 7.05
[root@jz-desktop-01 ~]# pidstat -d 1 3
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-01) 2023年08月09日 _x86_64_ (16 CPU)
01时59分59秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
02时00分00秒 0 1413 0.00 15.84 3.96 rsyslogd
02时00分00秒 0 1731 0.00 35.64 19.80 python
02时00分00秒 1018 22014 0.00 15.84 0.00 java
02时00分00秒 1009 29951 0.00 11.88 0.00 java
02时00分00秒 0 33714 0.00 7.92 0.00 java
02时00分00秒 0 35124 0.00 11.88 0.00 java
02时00分00秒 0 42484 0.00 42665.35 0.00 stress
02时00分00秒 0 42486 0.00 42665.35 0.00 stress
02时00分00秒 0 42488 0.00 44245.54 0.00 stress
02时00分00秒 0 42490 0.00 42665.35 0.00 stress
02时00分00秒 0 42492 0.00 42665.35 0.00 stress
02时00分00秒 0 42494 0.00 42665.35 0.00 stress
02时00分00秒 0 42496 0.00 44245.54 0.00 stress
02时00分00秒 0 42498 0.00 42665.35 0.00 stress
02时00分00秒 0 42500 0.00 42665.35 170752.48 stress
02时00分00秒 0 42502 0.00 42665.35 0.00 stress
可以看见这是因为 Command 是 stress 命令的进程造成大量读入操作, kB_wr/s
持续上升, 所以找到进程杀死即可
iostat 可以查看 cpu、网卡、tty设备、磁盘、等设备的活动情况,负载信息.
iostat [参数] [时间] [次数]
命令参数:
- -C 显示CPU使用情况
- -d 显示磁盘使用情况
- -k 以 KB 为单位显示
- -m 以 M 为单位显示
- -N 显示磁盘阵列(LVM) 信息
- -n 显示NFS 使用情况
- -p[磁盘] 显示磁盘和分区的情况
- -t 显示终端和CPU的信息
- -x 显示详细信息
- -V 显示版本信息
iostat
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.56 0.00 0.90 0.99 0.00 95.54
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 11.44 80.62 564.17 312908412 2189600151
sda 36.47 97.93 538.01 380075757 2088062456
sdb 6.08 16.92 510.85 65676653 1982648256
dm-0 7.10 5.86 83.40 22750599 323691832
dm-1 0.79 0.91 2.23 3550120 8659940
dm-2 4.35 73.84 483.21 286576761 1875379925
以下是各个参数的解释:
%user
:CPU处在用户模式下的时间百分比。%nice
:CPU处在带NICE值的用户模式下的时间百分比。%system
:CPU处在系统模式下的时间百分比。%iowait
:CPU等待输入输出完成时间的百分比, 当结果值过高时, 表示硬盘存在 I/O 瓶颈。%steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。%idle
:CPU空闲时间百分比,- 当结果值过高时, 表示 CPU 比较空闲。
- 当结果值过高但是系统响应慢时, 有可能是 CPU 等待分配内存, 此时应加大内存容量.
- 当结果值持续低于 10, 表示当前系统的 CPU 处理能力相对较低, 需要解决的资源是 CPU.
显示每个磁盘的详细信息(iostat -x)
iostat -x 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月09日 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.56 0.00 0.90 0.99 0.00 95.54
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
nvme0n1 0.12 0.68 1.25 10.19 80.61 564.09 112.71 0.18 15.97 2.19 17.67 0.46 0.53
sda 0.03 37.45 1.07 35.40 97.92 538.05 34.88 0.30 8.30 11.79 8.19 3.29 12.00
sdb 0.01 8.75 0.81 5.27 16.92 510.78 173.55 0.44 72.04 3.98 82.55 3.45 2.10
dm-0 0.00 0.00 0.18 6.93 5.86 83.40 25.14 0.02 2.53 8.67 2.37 0.33 0.23
dm-1 0.00 0.00 0.23 0.56 0.91 2.23 8.00 0.27 338.90 4.97 475.73 0.04 0.00
dm-2 0.00 0.00 0.97 3.38 73.83 483.14 255.88 0.15 34.81 0.41 44.69 0.42 0.18
avg-cpu: %user %nice %system %iowait %steal %idle
1.45 0.00 0.76 0.38 0.00 97.42
以下是各个参数的解释:
Device
: 磁盘设备的名称.rrqm/s
: 每秒针对该设备的读请求排队的次数.wrqm/s
: 每秒针对该设备的写请求排队的次数.r/s
: 每秒从该设备读取的次数.w/s
: 每秒向该设备写入的次数.rkB/s
: 每秒从该设备读取的数据量, 单位为 kb.wkB/s
: 每秒向该设备写入的数据量, 单位为 kb.avgrq-sz
: 该设备每个请求的平均大小, 单位为扇区(一般为512字节).avgqu-sz
: 每个请求在设备等待队列中的平均长度.await
: 等待I/O平均的时间(milliseconds)r_await
: io请求读取处理的平均时间w_await
: io请求写入处理的平均时间svctm
: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。%util
: 设备的利用率,即设备正在工作的时间所占总时间的百分比.
显示指定设备的IO状态信息(iostat -x /dev/sda1)
iostat -x /dev/sda1
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月10日 _x86_64_ (20 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.28 0.01 0.82 15.26 0.00 81.64
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda1 0.00 0.00 0.00 0.00 0.00 0.00 80.03 0.00 3.85 156.00 0.00 25.82 0.50 4.19 0.00
只显示cpu的IO状态
iostat -c
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月10日 _x86_64_ (20 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.28 0.01 0.82 15.26 0.00 81.64
只显示设备的使用率状态
iostat -d
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月10日 _x86_64_ (20 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 514 0
loop1 0.00 0.00 0.00 518 0
loop2 0.01 0.01 0.00 23939 0
loop3 0.00 0.00 0.00 343 0
loop4 0.00 0.00 0.00 8 0
sda 99.98 40.54 1574.87 162481582 6311636392
sdb 20.40 258.50 342.12 1036002652 1371123512
dm-0 43.05 258.50 342.12 1036002256 1371123512
dm-1 211.49 40.54 1789.65 162465973 7172425904
rbd0 0.00 0.02 0.12 83637 461276
rbd1 0.00 0.00 2.55 4561 10218788
rbd3 0.52 0.03 16.37 128797 65604120
rbd4 0.20 1.71 88.25 6848441 353692812
rbd5 5.26 0.22 145.04 894837 581286600
以千字节每秒为单位显示
iostat -k
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月10日 _x86_64_ (20 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.28 0.01 0.82 15.26 0.00 81.64
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 514 0
loop1 0.00 0.00 0.00 518 0
loop2 0.01 0.01 0.00 23939 0
loop3 0.00 0.00 0.00 343 0
loop4 0.00 0.00 0.00 8 0
sda 99.98 40.54 1574.87 162481642 6311664584
sdb 20.40 258.50 342.12 1036002652 1371132264
dm-0 43.05 258.50 342.12 1036002256 1371132264
dm-1 211.49 40.54 1789.65 162466033 7172454240
rbd0 0.00 0.02 0.12 83637 461276
rbd1 0.00 0.00 2.55 4561 10218788
rbd3 0.52 0.03 16.37 128797 65604784
rbd4 0.20 1.71 88.25 6848441 353692960
rbd5 5.26 0.22 145.04 894837 581290208
以兆字节每秒为单位
iostat -m
Linux 4.15.0-197-generic (jz-desktop-07) 2023年08月10日 _x86_64_ (20 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.28 0.01 0.82 15.26 0.00 81.64
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 0.01 0.00 0.00 23 0
loop3 0.00 0.00 0.00 0 0
loop4 0.00 0.00 0.00 0 0
sda 99.98 0.04 1.54 158673 6163763
sdb 20.40 0.25 0.33 1011721 1339006
dm-0 43.05 0.25 0.33 1011720 1339006
dm-1 211.49 0.04 1.75 158658 7004384
rbd0 0.00 0.00 0.00 81 450
rbd1 0.00 0.00 0.00 4 9979
rbd3 0.52 0.00 0.02 125 64067
rbd4 0.20 0.00 0.09 6687 345403
rbd5 5.26 0.00 0.14 873 567670
表示以 MB 为单位显示内存的详细信息。