磁盘使用情况
#查看硬盘使用情况 df -h
上图各标题释义:
● Filesystem 文件系统,显示当前机器安装的所有硬盘和硬盘的分区情况
● Size 容量,磁盘空间容量
● Used 已用,
● Avail 可用
● Use% 已用百分比
● Mounted on 挂载点,磁盘挂载的目录位置
其中 /dev/vda1 代表就是我们的硬盘使用情况,这里简单说下:
/dev 下的 vd{x}{y} (其中 x从a-z,y 为数字) x位代表的是硬盘,y位代表的是分区,比如:vda 代表硬盘1,vdb 代表硬盘2;vda1 代表硬盘1的分区1,vda2 代表硬盘1的分区2。
若发现硬盘使用率过高,可通过以下命令查看:
#进入到根目录逐层分析或者进入到你认为可能造成占用过大的文件夹 cd / #查看每个文件夹及文件使用情况 du -sh * #仅查看文件夹的使用情况 du --max-depth=1 -h
要是单纯查看磁盘大小,也可使用以下命令:
fdisk -l
内存使用情况
#数字单位 kb free #数字单位 G free -g #数字单位 M free -m #带有单位展示 free -h
纵向释义:
- Mem 物理内存使用情况
- Swap 交换分区情况
横向释义:
- total 可供系统使用的内存大小,物理内存减去预留位和内核使用内存
- used 已经使用的内存数,包含 buffer 和 cache,但其中部分缓存并未实际使用
- free 空闲未被分配的内存(真正尚未被使用的物理内存)
- shared 多个进程共享的内存
- buff/cache buffers和cache 所用的内存总量
- buffer 内存和磁盘之间产生的用于缓存即将写入磁盘的数据。根据磁盘的读写设计,把分散的写操作集中进行,以减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。Linux中有个守护进程会定期清理缓冲内容。
- cache 用于将从磁盘读取的数据缓存起来,当重新读取时若命中缓存则可从内存中快速获取,而无需从磁盘读取。缓存数据会根据读取的频率进行组织,将频繁读取的放在容易找到的位置,频率低或者不再读取的数据不断向后排,直至删除。Cache 是CPU和内存之间为了解决速度不对等问题产生的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。
- available 应用程序认为的实际可用的最大空间,大致的计算方式为:available = free + buff/cache
- buffer 和 cache 虽然存在分配未使用,但对内核来说都属于已经被使用的内存。当应用程序申请内存时,若 free 内存不够,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。因此从应用程序的角度来说,available = free + buff/cache。
我们根据 free 查询的结果,结合ECS的监控图:
内存使用率=(total-available)/total
因此上述内存使用率 = (7822712-6817660)/7822712 = 12.85%
CPU使用情况
1、概念
简单介绍下 CPU 使用率,指的是单位时间内 CPU 使用情况的统计。这样说可能有些抽象,举个例子,一天24小时,一个外卖员用了6个小时去接单送货,那么他的使用率为:6/24 = 25%。同理,我们衡量 CPU 的使用率就是 CPU占用的时间(非空闲的时间)/ 总 CPU 时间 得到的百分比,粗略的概括为以下公式:
CPU使用率 = 1-空闲时间/总CPU时间
Linux 会将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。
通常大部分性能工具在计算CPU使用率时会取间隔一段时间的两次值做差值计算后,来计算这段时间的平均 CPU 使用率,公示如下:
2、性能
那么如何理解性能呢?比如有两个外卖员,两人接送单的总时间还是 6 小时,使用率仍然是 25%。但A是在接外卖单的空余时间还顺带接了一个跑腿,那么可以看出 A 的整体性能比 B 好。回到系统设计上,我们应该尽量避免任务长时间占用CPU的任务设计,拆分长任务,防止出现卡顿。
3、查看
1)使用 top 命令查看:
top 默认显示的是所有 CPU 的平均值。如果你的机器是多核的,按下数字 1 ,就可以切换到展示每个 CPU 的使用率,再此按下 1 即可折叠收起。
各字段释义:
- us(user 缩写)代表用户态进程占用 CPU 时间占比。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
- sy(system 缩写)代表内核占用CPU时间占比
- ni(nice 缩写)代表低优先级用户态进程 CPU 时间占比。这些进程的优先级会被调整,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。其中,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
- id(idle 缩写)代表空闲CPU时间占比,这个时间不包括等待 I/O 的时间(iowait)
- wa(iowait 缩写)代表等待 I/O 的 CPU 时间占比
- hi(IRQ 缩写)代表硬中断(Hardware)的 CPU 时间占比
- si(softirq 缩写)代表处理软中断的 CPU 时间占比
- st(steal 缩写)代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间占比
补充:
- guest 代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间
- gnice(guest_nice 缩写)代表以低优先级运行虚拟机的时间
基于我们之前介绍的概念,top 工具默认使用的是 3 秒间隔的差值计算的 CPU 使用率。
2)/proc/stat
/proc/stat 中包含系统启动以来的系统和内核的统计信息,通过它我们可以查看 CPU 的汇总时间。它的单位是 USER_HZ,也就是 10 ms(1/100 秒)。
cat /proc/stat |grep cpu
横向:
- cpu 所有的cpu累加数据
- cup{x} x为数字,代表不同cpu的数据
纵向(第二列开始)数字分别为:
- user、nice、system、idle、iowait、irq、softirq、steal、guest、guest_nice
每列的字段释义可参考上面的介绍,CPU 总时间计算公式如下:
CPU总时间= user + nice + system + idle + iowait + irq + softirq
我们可以通过上述的数据通过第一个公式计算出开机以来的 CPU 平均使用率,但这个使用率通常并没有什么意义,实际上我们会更关注一段时间内的CPU使用率。
3)ps命令
查看哪些进程占用了CPU:
ps aux | sort -nrk 3,3 | head -n 5
红框内的数字就代表了这个进程的 CPU 使用率。
我们也可以通过进程名查看CPU的使用率:
ps -C {进程名} -o %cpu #对应上图 28276 这个进程命令如下 ps -C AliYunDunMonitor -o %cpu
此时我们使用 top 查看这两个进程的 CPU 使用情况:
top -p 28276,14429
对比 ps 命令查看的结果,两者并不一样,因为 top 是使用的 3秒时间间隔计算的结果,而 ps 使用的是进程整个生命周期计算的结果。