vmstat [-a] [-n] [delay [ count]]vmstat [-f] [-s] [-m]vmstat [-S unit]vmstat [-d]vmstat [-p disk partition]vmstat [-V]vmstat, Virtual Meomory Statistics(虚拟内存统计), 可对操作系统的虚拟内存、进程、CPU活动进行监视. 它是对系统的整体情况进行统计, 但不能针对某个进程进行深入分析.
-a开启 or 关闭显示 active/inactive 内存-n开启 or 关闭周期性循环输出时, 输出的头部信息仅显示一次delay两次输出之间的延迟时间count按照这个指定的时间间隔统计的次数-f开启 or 关闭显示自系统启动后 forks 的数目, 包括(fork, vfork and clone system calls)-m显示 slabinfo-s开启 or 关闭以表格形式显示的 event counters and memory statistics-d显示 disk statistics-p显示参数所指定的分区的详细信息-S(k|K|m|M) 以k|kB|m|MB为单位显示,对应转换(1000|1024|1000000|1048576)-V打印版本信息
[bash]
[root@localhost ~]# vmstat
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 284 66240 165924 419584 0 0 0 5 2 1 0 0 100 0 0
#To output active/inactive memory info
[root@localhost ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free inact active si so bi bo in cs us sy id wa st
0 0 284 65620 86928 833976 0 0 0 5 3 1 0 0 100 0 0
#To run vmstat with 2 updates, five seconds apart
[root@localhost ~]# vmstat 5 2
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 284 65620 165924 419824 0 0 0 5 3 1 0 0 100 0 0
0 0 284 65620 165924 419828 0 0 0 7 1014 64 0 0 100 0 0
[/bash]
procs, 下面三种状态的进程数
r等待运行的进程数b在等待的进程数(通常在等待 IO)w可进入运行队列但被替换的进程(Solaris vmstat)
memory, 虚拟内存和实存信息
swpd虚拟内存使用情况, unit:kbfree空闲的内存, unit:kbbuff被用来做 buffer 的内存数, unit:kbcache被用来做 cache 的内存数, unit:kbinactive闲置的内存,unit:kb,-a显示active活动内存, unit:kb,-a显示
swap, 显示磁盘与内存每秒的交换
si从磁盘交换到内存的交换页数量, unit:kbso从内存交换到磁盘的交换页数量, unit:kb
io, 显示块设备每秒发送和收到的块数
bi发送到块设备的块数, unit: blocksbo从块设备接收到的数据, unit:blocks
system
in每秒的中断数, 包括时钟中断cs每秒的环境切换次数
CPU, CPU 故障时间的百分比, 在多处理器系统上, 这是全部处理器的平均值
usCPU 使用时间(except kernel)syCPU 系统使用时间(内核)id闲置时间wa等待 IO 的时间st
disk, 显示每秒的磁盘操作, s 表示 scsi 盘, 0 表示盘号
pages, 每秒页面调度活动数量的信息(Solaris vmstat)
re回收的页面mf非常严重错误的页面pi进入页面数, unit:KBpo出页面数, unit:KBfr空也的页面数, unit:KBde提前读入的页面中的未命中数sr通过时钟算法扫描的页面
fault, 显示每秒的中断数(Solaris vmstat)
in设备中断sy系统中断cycpu交换
准测
- r<5, b≈0
- 如果free < MINFREE, 将会出现连续不断的页面调度, 将导致系统性能问题.
- 如果在多用户环境中us+sys>80, 进程就会在运行队列中花费等待时间, 响应时间和吞吐量就会下降.
- wa > 40, 表明磁盘io没有也许存在不合理的平衡, 或者对磁盘操作比较频繁
- 如果 r 经常大于 4 , 且 id 经常少于 40, 表示 CPU 的负荷很重
- 如果 pi, po 长期不等于 0, 表示内存不足
- 如果 disk 经常不等于 0, 且在 b 中的队列大于 3, 表示 io 性能不好
通过 vmstat 识别 CPU 瓶颈
r(运行队列)展示了正在执行和等待 CPU 资源的任务个数. 当这个值超过了 CPU 数目, 就会出现CPU瓶颈
获得 CPU 个数的命令(Linux):
[bash]
[root@localhost ~]# cat /proc/cpuinfo | grep processor | wc -l
[/bash]
当 r 值超过了CPU个数, 就会出现CPU 瓶颈, 解决办法大体如下
- 最简单的就是 增加 CPU个数
- 通过调整任务执行时间, 如大任务放到系统不繁忙的情况下进行执行, 进尔平衡系统任务
- 调整已有任务的优先级
通过 vmstat 识别 CPU 满负荷
vmstat 中 CPU 的度量是百分比. 当us+sy≈100时, 表示 CPU 正在接近满负荷工作. 但要注意的是, CPU 满负荷工作并不能说明什么, *nix 总是试图要 CPU 尽可能的繁忙, 使得任务的吞吐量最大化. 唯一能够确定 CPU 瓶颈的还是 r(运行队列) 的值.
通过 vmstat 识别 RAM 瓶颈
数据库服务器都只有有限的 RAM, 出现内存争用现象是常见问题
首先察看 RAM 的数量, 命令如下
[bash]
[root@localhost ~]# free
total used free shared buffers cached
Mem: 1035292 969548 65744 0 165924 419720
-/+ buffers/cache: 383904 651388
Swap: 2096472 284 2096188
[/bash]
也可使用 top 等其他命令来显示RAM.
当内存的需求大于RAM的数量, 服务器启动虚拟内存机制, 通过虚拟内存, 可以将 RAM 段移到 SWAP DISK 的特殊磁盘段上, 这样会出现虚拟内存的页导出和页导入现象, 页导出并不能说明 RAM 瓶颈, 虚拟内存系统经常会对内存段进行页导出, 但页导入操作就表明了服务器需要更多的内存了, 页导入需要从 SWAP DISK 上将内存段复制回 RAM, 导致服务器速度变慢.
解决办法有如下几种
- 加大 RAM
- 改小 SGA, 使得对 RAM 需求减少
- 减少 RAM 的需求(减少 PGA etc)
Reference:
没有评论:
发表评论