显示系统的运行时间以及系统在过去 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 [ 选项 ] [ <时间间隔> ] [ <次数> ]
常用的参数:
- -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:显示命令名和所有参数
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
: 当前进程对应的命令.
执行 pidstat -u 与单独指定 pidstat 效果一样
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
: 进程占用的内存.
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的时候会发生.
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
: 当前进程对应的命令.
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
free命令用来显示系统内存状态,具体包括系统物理内存、虚拟内存、共享内存和系统缓存等信息,它是LINUX系统管理中常用的命令之一。
命令格式:
free [选项] [-s (间隔秒数)]
常用参数选项
参数 | 参数说明 |
---|---|
-b | 以Byte为单位显示内存使用情况 |
-m | 以MB为单位显示内存使用情况 |
-k | 以KB为单位显示内存使用情况,默认情况不带参数时按此显示 |
-g | 以GB为单位显示内存使用情况 |
-s | (间隔秒数) 根据指定的间隔秒数持续显示内存使用情况 |
-h | 以友好的方式显示内存使用情况 |
-t | 显示内存列总和 |
查看内存
$ free
total used free shared buff/cache available
Mem: 65631716 27567684 518216 1161240 37545816 36367040
Swap: 32964604 0 32964604
- total: 物理内存和交换内存的总大小.
- used: 已使用的物理内存和交换内存的大小.
- free: 空闲的物理内存和交换内存的大小.
- shared: 多个进程共享的内存总额.
- buff/cache: 磁盘的缓存大小.
- available: 可用的内存大小.
以 byte 为单位显示内存
$ free -b
total used free shared buff/cache available
Mem: 67206877184 28228767744 530628608 1189109760 38447480832 37240401920
Swap: 33755754496 0 33755754496
以 MB 为单位显示内存
$ free -m
total used free shared buff/cache available
Mem: 64093 26921 505 1134 36666 35515
Swap: 32191 0 32191
以 GB 为单位显示内存
$ free -g
total used free shared buff/cache available
Mem: 62 26 0 1 35 34
Swap: 31 0 31
以更友好的方式显示内存
$ free -h
total used free shared buff/cache available
Mem: 62G 26G 506M 1.1G 35G 34G
Swap: 31G 0B 31G
以一定间隔时间查看内容
$ free -h -s 5
total used free shared buff/cache available
Mem: 62G 26G 504M 1.1G 35G 34G
Swap: 31G 0B 31G
total used free shared buff/cache available
Mem: 62G 26G 504M 1.1G 35G 34G
Swap: 31G 0B 31G
total used free shared buff/cache available
Mem: 62G 26G 505M 1.1G 35G 34G
Swap: 31G 0B 31G
^C
显示列总和
$ free -h -t
total used free shared buff/cache available
Mem: 62G 26G 504M 1.1G 35G 34G
Swap: 31G 0B 31G
Total: 94G 26G 31G
间隔2s打印一次, 总共打印5次
$ free -h -s 2 -c 5
total used free shared buff/cache available
Mem: 62G 26G 502M 1.1G 35G 34G
Swap: 31G 0B 31G
total used free shared buff/cache available
Mem: 62G 26G 502M 1.1G 35G 34G
Swap: 31G 0B 31G
total used free shared buff/cache available
Mem: 62G 26G 490M 1.1G 35G 34G
Swap: 31G 0B 31G
^C
sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。算是一个万能的小能手。
# ubuntu
$ apt-get install sysstat
# centos
$ yum -y install sysstat
$ sar -n DEV 1 5
-n
: 类型, 就是我们要获取的是哪个类型的指标数据,这里的-n,代表的是监控一些网络信息-
-a:文件读写情况 -A:所有报告的总和 -B:分页状况 -b:显示I/O和传送速率的统计信息 -c:输出进程统计信息,每秒创建的进程数 -d:块设备状况 -F [ MOUNT ]:文件系统统计信息 -H:交换空间利用率 -I { <中断> | SUM | ALL | XALL }:中断信息状况 -n:汇报网络情况 -P:设定CPU -q:队列长度和平均负载 -R:输出内存页面的统计信息 -r [ ALL ]:输出内存和交换空间的统计信息 -S:交换空间利用率信息 -u [ ALL ]:输出CPU使用情况的统计信息 -v:输出inode、文件和其他内核表的统计信息 -W:输出系统交换活动信息 -w:任务创建与系统转换信息 -y:终端设备活动情况
-
DEV
: 类型参数(可选), 有的类型带有参数,有的没有。这里的DEV,代表的是监控网卡信息1
: 时间间隔, 每次报告的间隔时间(秒)5
: 次数, 显示报告的次数。如:时间间隔是2,采样次数是3,那么sar命令将阻塞12秒钟。
$ sar -u 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时46分21秒 CPU %user %nice %system %iowait %steal %idle
00时46分22秒 all 1.50 0.00 0.56 1.94 0.00 95.99
平均时间: all 1.50 0.00 0.56 1.94 0.00 95.99
%user
#用户空间的CPU使用%nice
改变过优先级的进程的CPU使用率%system
内核空间的CPU使用率%iowait
CPU等待IO的百分比%steal
虚拟机的虚拟机CPU使用的CPU%idle
空闲的CPU- 在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。
sar -p 1 3
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时48分16秒 CPU %user %nice %system %iowait %steal %idle
00时48分17秒 all 3.70 0.00 1.88 0.25 0.00 94.16
00时48分18秒 all 4.38 0.00 5.07 0.00 0.00 90.54
00时48分19秒 all 1.50 0.00 1.69 0.31 0.00 96.49
平均时间: all 3.20 0.00 2.88 0.19 0.00 93.73
CPU
: 所有CPU的统计%user
用户态的CPU使用统计%nice
更改过优先级的进程的CPU使用统计%iowait
CPU等待IO数据的百分比%steal
虚拟机的vCPU占用的物理CPU的百分比%idle
空闲的CPU百分比
使用sar -q,同样的,和top的参数意义是相似的。除了load值,它还显示了等待队列的长度,对于排查排队问题非常有帮助。
sar -q 1 3
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时49分19秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
00时49分20秒 0 3573 0.46 0.70 0.87 0
平均时间: 0 3573 0.46 0.70 0.87 0
runq-sz
运行队列的长度(等待运行的进程数,每个核的CP不能超过3个)plist-sz
进程列表中的进程(processes)和线程数(threads)的数量ldavg-1
最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推ldavg-5
最后5分钟的CPU平均负载ldavg-15
最后15分钟的CPU平均负载
使用sar -I,注意i是大写的。由于有不同的换算方式,所以中断的参数,分为默认、SUM、ALL等。
$ sar -I SUM 1 2
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时50分17秒 INTR intr/s
00时50分18秒 sum 8143.00
00时50分19秒 sum 6671.00
平均时间: sum 7407.00
使用sar -w,它经常与监控swap交换分区的使用情况的sar -W(注意大小写)搞混,所以要注意。
$ sar -w 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时50分50秒 proc/s cswch/s
00时50分51秒 0.00 6443.00
00时50分52秒 4.00 7584.00
00时50分53秒 0.00 7183.00
00时50分54秒 6.00 6755.00
使用sar -r命令。有些sar版本可能会有sar -R,但一般小写的就够了
$ sar -r 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时51分47秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
00时51分48秒 468660 65163056 99.29 379432 35285760 46668768 47.33 41751780 20173644 2012
平均时间: 468660 65163056 99.29 379432 35285760 46668768 47.33 41751780 20173644 201
kbmemfree
:可用的空闲内存大小kbmemused
:已使用的内存大小(不包含内核使用的内存)%memused
:已使用内存的百分数kbbuffers
:内核缓冲区(buffer)使用的内存大小kbcached
:内核高速缓存(cache)数据使用的内存大小kbswpfree
:可用的空闲交换空间大小kbswpused
:已使用的交换空间大小%swpused
:已使用交换空间的百分数kbswpcad
:交换空间的高速缓存使用的内存大小kbcommit
保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)commit
这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
对于swap分区来说,就可以使用sar -S。效果如下。如果想要看交换分区的使用情况(非容量情况),就要切换到sar -W命令。
$ Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时52分42秒 kbswpfree kbswpused %swpused kbswpcad %swpcad
00时52分43秒 32964604 0 0.00 0 0.00
平均时间: 32964604 0 0.00 0 0.00
主要是使用sar -v命令。v一般在别的命令中用作版本展示,sar命令用来输出slab区的一些信息,可以说是特立独行,不走寻常路。
sar -v 1
$ Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时53分04秒 dentunusd file-nr inode-nr pty-nr
00时53分05秒 2728487 13728 164272 3
00时53分06秒 2728487 13728 164282 3
00时53分07秒 2728492 13728 164289 3
00时53分08秒 2728498 13728 164280 3
- dentunusd 在缓冲目录条目中没有使用的条目数量
- file-nr 被系统使用的文件句柄数量
- inode-nr 已经使用的索引数量
- pty-nr 使用的pty数量
主要是使用sar -B命令。(注意他的发音!很牛掰!) 执行结果如下:
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时55分37秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
00时55分38秒 0.00 257.00 16521.00 0.00 6436.00 0.00 0.00 0.00 0.00
00时55分39秒 0.00 60.00 2344.00 0.00 914.00 0.00 0.00 0.00 0.00
00时55分40秒 0.00 0.00 36.00 0.00 81.00 0.00 0.00 0.00 0.00
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时55分18秒 pswpin/s pswpout/s
00时55分19秒 0.00 0.00
00时55分20秒 0.00 0.00
- pswpin/s 每秒从交换分区到系统的交换页面(swap page)数量
- pswpout/s 每秒从系统交换到swap的交换页面(swap page)的数量
$ sar -b 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时54分52秒 tps rtps wtps bread/s bwrtn/s
00时54分53秒 0.00 0.00 0.00 0.00 0.00
00时54分54秒 6.00 0.00 6.00 0.00 59.00
00时54分55秒 3.00 0.00 3.00 0.00 664.00
00时54分56秒 43.00 0.00 43.00 0.00 1952.00
00时54分57秒 3.00 0.00 3.00 0.00 11.00
- tps 磁盘每秒钟的IO总数,等于iostat中的tps
- rtps 每秒钟从磁盘读取的IO总数
- wtps 每秒钟从写入到磁盘的IO总数
- bread/s 每秒钟从磁盘读取的块总数
- bwrtn/s 每秒钟写入到磁盘的块总数
$ sar -d 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
00时56分17秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
00时56分18秒 dev259-0 1.00 0.00 0.00 0.00 0.01 5.00 6.00 0.60
00时56分18秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时56分18秒 dev8-16 3.00 0.00 104.00 34.67 0.03 11.33 11.33 3.40
00时56分18秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时56分18秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时56分18秒 dev253-2 1.00 0.00 0.00 0.00 0.01 5.00 5.00 0.50
- DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
- tps:每秒I/O的传输总数
- rd_sec/s 每秒读取的扇区的总数
- wr_sec/s 每秒写入的扇区的总数
- avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
- avgqu-sz 磁盘请求队列的平均长度
- await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
- svctm I/O的服务处理时间,即不包括请求队列中的时间
- %util I/O请求占用的CPU百分比,值越高,说明I/O越慢
Linux 5.4.0-150-generic (jz-desktop-04) 2023年08月29日 _x86_64_ (20 CPU)
00时58分35秒 tps rtps wtps bread/s bwrtn/s
00时58分36秒 113.00 0.00 113.00 0.00 2576.00
00时58分37秒 55.00 0.00 55.00 0.00 1312.00
平均时间: 84.00 0.00 84.00 0.00 1944.00
- tps 磁盘每秒钟的IO总数,等于iostat中的tps
- rtps 每秒钟从磁盘读取的IO总数
- wtps 每秒钟从写入到磁盘的IO总数
- bread/s 每秒钟从磁盘读取的块总数
- bwrtn/s 每秒钟写入到磁盘的块总数
Linux 5.4.0-150-generic (jz-desktop-04) 2023年08月29日 _x86_64_ (20 CPU)
00时59分07秒 DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
00时59分08秒 dev7-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev8-0 46.00 0.00 708.00 15.39 2.81 62.78 11.22 51.60
00时59分08秒 dev8-16 53.00 0.00 1044.00 19.70 0.28 7.21 6.19 32.80
00时59分08秒 dev253-0 105.00 0.00 1044.00 9.94 0.44 4.15 3.12 32.80
00时59分08秒 dev7-8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
00时59分08秒 dev7-26 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
- tps:每秒I/O的传输总数
- rd_sec/s 每秒读取的扇区的总数
- wr_sec/s 每秒写入的扇区的 总数
- avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
- avgqu-sz 磁盘请求队列的平均长度
- await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
- svctm I/O的服务处理时间,即不包括请求队列中的时间
- %util I/O请求占用的CPU百分比,值越高,说明I/O越慢
每1秒统计1次,总共统计1次
$ sar -n DEV 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
01时01分44秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
01时01分45秒 veth52f441e 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 vetha5c96e1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 veth3be34cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 veth479597b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 br-75cc768af122 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 vethed4ce16 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 veth6fe94a4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 vethed5d546 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 em1 109.00 86.00 15.05 16.94 0.00 0.00 0.00
01时01分45秒 vethfbe8dbd 13.00 23.00 0.90 17.33 0.00 0.00 0.00
01时01分45秒 veth4fb4f50 23.00 13.00 17.33 0.90 0.00 0.00 0.00
01时01分45秒 veth4d63c46 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 vethb7ad3c9 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 veth88c85cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 br-72715db054ec 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时01分45秒 veth2aa014b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均时间: veth52f441e 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vetha5c96e1 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth3be34cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth479597b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-75cc768af122 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethed4ce16 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth6fe94a4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethed5d546 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: em1 109.00 86.00 15.05 16.94 0.00 0.00 0.00
平均时间: vethfbe8dbd 13.00 23.00 0.90 17.33 0.00 0.00 0.00
平均时间: veth4fb4f50 23.00 13.00 17.33 0.90 0.00 0.00 0.00
平均时间: veth4d63c46 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethb7ad3c9 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth88c85cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-72715db054ec 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth2aa014b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- IFACE 本地网卡接口的名称
- rxpck/s 每秒钟接受的数据包
- txpck/s 每秒钟发送的数据库
- rxKB/S 每秒钟接受的数据包大小,单位为KB
- txKB/S 每秒钟发送的数据包大小,单位为KB
- rxcmp/s 每秒钟接受的压缩数据包
- txcmp/s 每秒钟发送的压缩包
- rxmcst/s 每秒钟接收的多播数据包
$ sar -n EDEV 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
01时02分12秒 IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
01时02分13秒 veth52f441e 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 vetha5c96e1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth3be34cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth479597b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 br-75cc768af122 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 vethed4ce16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth6fe94a4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 vethed5d546 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 vethfbe8dbd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth4fb4f50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth4d63c46 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 vethb7ad3c9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth88c85cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 br-72715db054ec 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01时02分13秒 veth2aa014b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
平均时间: veth52f441e 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vetha5c96e1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth3be34cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth479597b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-75cc768af122 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethed4ce16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth6fe94a4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethed5d546 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethfbe8dbd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth4fb4f50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth4d63c46 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethb7ad3c9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth88c85cc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-72715db054ec 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth2aa014b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- IFACE 网卡名称
- rxerr/s 每秒钟接收到的损坏的数据包
- txerr/s 每秒钟发送的数据包错误数
- coll/s 当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
- rxdrop/s 当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
- txdrop/s 当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
- txcarr/s 当发送数据包的时候,每秒钟载波错误发生的次数
- rxfram 在接收数据包的时候,每秒钟发生的帧对其错误的次数
- rxfifo 在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
- txfifo 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数
$ sar -n SOCK 1 1
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
01时02分58秒 totsck tcpsck udpsck rawsck ip-frag tcp-tw
01时02分59秒 1700 378 8 2 0 139
平均时间: 1700 378 8 2 0 139
- totsck 当前被使用的socket总数
- tcpsck 当前正在被使用的TCP的socket总数
- udpsck 当前正在被使用的UDP的socket总数
- rawsck 当前正在被使用于RAW的skcket总数
- ip-frag 当前的IP分片的数目
- tcp-tw TCP套接字中处于TIME-WAIT状态的连接数量
使用FULL关键字,相当于上述DEV、EDEV和SOCK三者的综合。
$ sar -n TCP 1 3
Linux 3.10.0-1160.49.1.el7.x86_64 (jz-desktop-02) 2023年08月29日 _x86_64_ (16 CPU)
01时04分20秒 active/s passive/s iseg/s oseg/s
01时04分21秒 0.00 0.00 145.00 137.00
01时04分22秒 2.00 1.00 211.00 213.00
01时04分23秒 0.00 0.00 178.00 278.00
平均时间: 0.67 0.33 178.00 209.33
- active/s 新的主动连接
- passive/s 新的被动连接
- iseg/s 接受的段
- oseg/s 输出的段
Perf是内置于Linux内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,常用于性能瓶颈的查找与热点代码的定位。
从2.6.31内核开始,Linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。
CPU周期(cpu-cycles)是默认的性能事件,所谓的CPU周期是指CPU所能识别的最小时间单元,通常为亿分之几秒,是CPU执行最简单的指令时所需要的时间,例如读取寄存器中的内容,也叫做clock tick。
https://github.com/mz1999/blog/blob/master/docs/java-performance-analysis-with-flame-graphs.md