- vmstat
- vmstat 是最早用于显示所有与内存和进程相关信息的命令,调用时,该命令会持续运行并发布其信息。它有两个参数:
- # vmstat <interval> <count>
- <interval> 是两次运行之间的时间间隔,以秒为单位。
- <count> 是 vmstat 重复的次数。
- 下面是当我们希望 vmstat:
- 每隔 5 秒运行一次并在第 10 次运行后停止时的示例。
- 每 5 秒之后都会输出一行并显示此时的统计信息。
- # vmstat 5 10
- procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 0 0 170988 22256 6796 322680 1 2 335 48 92 22 4 8 84 5 0
- 该输出显示有关系统资源的信息:
- procs 显示进程数
- r 等待运行的进程。系统上的负载越多,等待运行 CPU 周期的进程数量越多。
- b 不可中断睡眠的进程,也称为“被阻塞”的进程。这些进程最有可能等待 I/O,但也可能等待其他事情。
- wpd,free,buff,cache显示了内存值班
- wpd 虚拟内存或交换内存的数量(以 KB 为单位)
- free 可用物理内存的数量(以 KB 为单位)
- buff 用作缓冲区的内存数量(以 KB 为单位)
- cache 用作缓存的物理内存数量(以 KB 为单位)
- si so 显示了交换活动:
- si 将内存从磁盘交换回物理 RAM 的速率(以 KB/秒为单位)
- so 将内存从物理 RAM 交换到磁盘的速率(以 KB/秒为单位)
- bi,bo显示了 I/O 活动:
- bi 系统向块设备发送数据的速率(以块/秒为单位)
- bo 系统从块设备中读取数据的速率(以块/秒为单位)
- in,cs 显示了系统相关活动:
- in 系统每秒接收到的中断数
- cs 在进程空间中切换上下文的速率(以数量/秒为单位)
- us,sy,id,wa 显示了 CPU 负载的信息:
- us 显示花费在用户进程中的 CPU 百分比。Oracle 进程属于这一类。
- sy 系统进程(如所有根进程)使用的 CPU 百分比
- id 可用 CPU 百分比
- wa 花费在“等待 I/O”上的百分比
- 输出的第一行是自从系统重新启动以来所有指标的平均值。该行可忽略,因为它并不显示当前状态
- 理想情况下,等待或阻塞的进程数量(位于“procs”下)应该为 0 或接近于 0。
- 如果数值较高,则表示系统没有足够的资源(如 CPU、内存或 I/O)。
- “swap”下的数据表明交换是否过多。如果交换过多,则表明物理内存可能不足。应该减少内存需求或增加物理 RAM。
- “io”下的数据表示往返于磁盘的数据流。这表明正在进行的磁盘活动量,这并不一定表明存在问题。
- 如果您看到“proc”和“b”列(正在阻塞的进程)下有较大的数值和较高的 I/O,则可能出现了严重的 I/O 争用问题。
- “cpu”标题下是最有用的信息。“id”列显示空闲 CPU。如果用 100 减去该数值,则会得到繁忙 CPU 的百分比。
- 还记得本系列的另一个部分中描述的 top 命令吗?该命令还显示 CPU 的空闲百分比数值。区别是:top 显示每个 CPU 的空闲百分比,而 vmstat 显示所有 CPU 的空闲百分比。
- vmstat 命令还显示 CPU 使用情况的划分:Linux 系统使用多少、用户进程使用多少以及等待 I/O 使用多少。
- 通过该划分,您可以确定 CPU 消耗的组成。如果系统 CPU 负载较高,能表明正在运行某个根进程(如备份)吗?
- 一段时间内的系统负载应该一致。如果系统显示较高的数值,请使用 top 命令确定占有 CPU 的系统进程
- 针对 Oracle 用户的用法
- Oracle 进程(后台进程和服务器进程)和用户进程(sqlplus、apache 等)位于“us”下。
- 如果该数值较高,则使用 top 来确定进程。如果“wa”列显示较高的数值,则表明 I/O 系统无法跟上读取或写入的数量。
- 有时这可能是因为在数据库中进行大量更新,从而导致日志切换以及后续的大量存档进程。
- 但是,如果它持续显示一个较大的数值,则表明可能存在 I/O 瓶颈。
- Oracle 数据库中的 I/O 瓶颈可能会造成严重的问题。与性能问题不同,慢速 I/O 可能导致控制文件写入速度缓慢,
- 这会导致等待获取控制文件的进程加入队列。如果等待超过 900 秒且等待者是关键进程(如 LGWR),则会关闭数据库实例。
- 如果您看到很多交换,可能是 SGA 的太大,以至于物理内存容纳不下。应该减小 SGA 大小或增加物理内存。