Linux性能工具
以下操作都在linux上进行,为了能够让故事正常进行,用docker配一个centos出来
// 新建一个容器 并执行脚本
docker run -itd centos:latest /bin/bash
// 如果退出,需要再次进入的场合
docker exec -it xx /bin/bash
cpu性能
uptime 得到平均负载
[root@bd03d2536b13 /]# uptime
11:14:41 up 16:30, 0 users, load average: 2.76, 2.88, 2.97
- 当前时间 16:30
- 系统已运行的时间 11:14:41
- 当前在线用户0 user
- 平均负载:2.76, 2.88, 2.97,最近1分钟、5分钟、15分钟系统的负载
cat /proc/loadavg 最直接查看系统平均负载命令
[root@bd03d2536b13 /]# cat /proc/loadavg
3.52 3.11 3.04 5/761 36
除了前3个数字表示平均进程数量外,后面的1个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID
top指令
top - 11:33:27 up 16:49, 0 users, load average: 3.17, 3.02, 3.03
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 71.2 us, 12.4 sy, 0.0 ni, 16.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1989.5 total, 123.2 free, 1537.8 used, 328.5 buff/cache
MiB Swap: 1024.0 total, 201.7 free, 822.2 used. 302.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 12028 3000 2644 S 0.0 0.1 0:00.08 bash
14 root 20 0 12028 3292 2756 S 0.0 0.2 0:00.07 bash
41 root 20 0 48412 3772 3168 R 0.0 0.2 0:00.00 top
top指令有很多组合,这个之后再说。先只是简单的top指令。
第一行:和uptime得到的数据差不多,最后一个如果大于5相当于是系统负载很高的意思了。
top - 11:33:27 up 16:49, 0 users, load average: 3.17, 3.02, 3.03
第二行:表达当前任务有3个,1个在跑,两个睡眠,0个停止,0个僵尸线程
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
第三行:表达cpu情况如何
%Cpu(s): 71.2 us, 12.4 sy, 0.0 ni, 16.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- us, user: 用户空间占用CPU的百分比。
- sy,system: 内核空间占用CPU的百分比。
- ni,niced:运行已调整优先级的用户进程的CPU时间
- wa,IO wait: 用于等待IO完成的CPU时间
- hi:处理硬件中断的CPU时间
- si: 处理软件中断的CPU时间
- st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。
可以使用t指令切换显示。
第四行:表达内存使用情况,类似于free指令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。
MiB Mem : 1989.5 total, 123.2 free, 1537.8 used, 328.5 buff/cache
MiB Swap: 1024.0 total, 201.7 free, 822.2 used. 302.2 avail Mem
物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。
交换部分显示的是:全部、已使用、空闲和缓冲交换空间。
可以用m指令切换显示。
各个进程的状态主体:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 12028 3000 2644 S 0.0 0.1 0:00.08 bash
14 root 20 0 12028 3292 2756 S 0.0 0.2 0:00.07 bash
41 root 20 0 48412 3772 3168 R 0.0 0.2 0:00.00 top
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
-
S:这个是进程的状态。它有以下不同的值:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
1指令可以看到每个核上的情况
vmstat
这个指令可以得到系统整体的cpu使用率上下文切换次数,中断次数,还包括处于运行和不可中断状态的进程数量。
[root@bd03d2536b13 /]# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 849408 829344 66192 281136 1 4 9 12 3 88 56 10 35 0 0
4 0 849408 613752 66240 279692 0 0 0 156 6027 9175 23 19 58 0 0
4 0 849408 367984 66248 279580 0 0 0 28 5881 6941 43 16 40 0 0
4 0 849408 283032 66248 279572 0 0 0 9 6702 6924 66 13 21 0 0
4 0 849408 243308 66252 279904 0 0 0 4 6421 7482 74 10 17 0 0
5 5的含义是5s内进行5次采样
r: 运行队列中进程数量
b: 等待IO的进程数量
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
bi: 每秒读取的块数
bo: 每秒写入的块数
in: 每秒中断数,包括时钟中断。【interrupt】
cs: 每秒上下文切换数。 【count/second】
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
如果r经常大于4,id经常少于40,表示cpu的负荷很重。
如果bi,bo长期不等于0,表示内存不足。
如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。