内存瓶颈

分析内存相关问题应该从检查 vmstat 输出中的可用内存量开始,它位于第 4 列。
如果空闲内存很低,我们需要更多地调查哪个进程消耗了更多内存。

命令行选项

通过为 vmstat 命令提供不同的选项,可以包含其他信息。
列出了一些命令行选项:

-a显示活动和非活动内存。
-f显示自启动以来的分叉数。
-t向输出添加时间戳。
-d报告磁盘统计信息。

磁盘/IO 性能

vmstat 实用程序无法告诉我们哪些磁盘存在瓶颈,但它可以告诉我们是否存在整体 IO 问题。
输出中的重要列是 b(阻塞)列。
它是指在过去的时间间隔内被阻塞或者等待 IO 完成的线程数。
大多数情况下,b 列应为 0。
如果该列中不断有非零数字,我们可以使用 iostat 进一步调查。

如何读取 vmstat 输出

vmstat 输出包含的不仅仅是内存统计信息。
与 iostat 和 mpstat 一样,vmstat 接受 interval 和 count 参数。
以下示例每隔 5 秒运行 3 个报告:

# vmstat 5 3
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 384120  68604   8088 327332    1    2    90    20   90   14  1  1 98  0  0
 1  0 384120  68604   8088 327364    0    0     0     0   91  179  1  0 99  0  0
 0  0 384120  68232   8088 327364    0    0     0     0  107  190  1  1 98  0  0

输出分为六个部分:

  1. procs
  2. memory
  3. swap
  4. io
  5. system
  6. cpu

procs进程信息

前两列提供有关进程的信息:

r处于等待状态的进程数。这些进程什么也不做,只是在等待运行。
b自上次更新以来处于睡眠模式并被中断的进程数

memory

接下来的四列提供了有关内存的信息:

swpd使用的虚拟内存量
free空闲内存量
buff用作缓冲区的内存量
cache用作缓存的内存量

swap

接下来的两列提供了有关交换的信息:

si从磁盘换入的内存量(每秒)
so换出到磁盘的内存量(每秒)

非零 si 等数字表示没有足够的物理内存,内核正在将内存交换到磁盘。

io

前两列提供有关 I/O(输入-输出)的信息:

bi每秒从块设备接收的块数
bo每秒发送到块设备的块数

system

接下来的两列提供以下系统信息:

in每秒中断数,包括时钟
cs每秒上下文切换次数

CPU

最后五列给出了总 CPU 时间的百分比:

us用于用户进程的 CPU 周期百分比
sy在系统(内核)进程上花费的 CPU 周期百分比
id闲置的 CPU 周期百分比
wa用于等待 I/O 的 CPU 周期百分比
st从虚拟机中窃取的 CPU 周期百分比

不带任何参数运行 vmstat

在开始之前,重要的是要注意 vmstat 的第一行输出(如果它不带参数运行,则是唯一给出的输出)是自系统启动时间以来的摘要。
它对于性能问题通常不是很有用,特别是如果系统已经运行了很长时间。
但是,它可能仍包含有关过去发生但当前未发生的事件的有用信息。

# vmstat
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 387560  62140     44 348320    1    2    94    20   90   15  1  1 98  0  0
使用 vmstat 解决 Linux 中的性能问题

vmstat(虚拟内存统计)命令允许我们监控系统的内存使用情况。
它显示有多少虚拟内存,以及有多少空闲和分页活动。
我们可以观察发生的页面调入和调出。
这对于检测物理内存短缺非常有用,这会对系统性能产生不利影响。

更多: zhilu jiaocheng

CPU瓶颈

vmstat 输出中有两个与 CPU 性能有关的重要区域。
第一个是 r 列。
它是输出中的第一列。
它包含一个值,该值对应于运行 vmstat 的过去间隔期间运行队列中的线程数。
这些线程正在等待 CPU 可用才能运行。
对于此处合适的最大数量,有多种思想流派,但大多数人都同意,系统上的 CPU 数量超过 2 到 5 倍就表明存在瓶颈(此估计需要针对多核 CPU 进行调整)。

查找 CPU 相关数据的第二个位置是在输出的右侧列中。
一共有三列:us(用户)时间,sy(系统)时间,id(空闲)时间。
这三个按百分比分解了 CPU 时间的使用。
它们加起来应该是 100%。
理想情况下,CPU 将大部分时间用于 us 和 id 类别。
sy 类别是指 CPU 花费在驱动程序/内核级工作上的时间。
这个时间是从用户应用程序中带走的。
如果 CPU 的大部分时间都花在此类别上,则可能表明由于 CPU 或者内存瓶颈、内核级锁定问题或者其他问题导致上下文切换过多。
繁忙的系统将显示接近零的恒定空闲百分比。
但繁忙的系统并不一定意味着系统过载。

日期:2020-09-17 00:14:50 来源:oir作者:oir