通过Vmstat诊断虚拟内存找出内存IO瓶颈

当系统响应变慢但CPU未满载时,可能是虚拟内存管理问题。本文介绍了如何通过vmstat命令分析内存IO瓶颈,重点关注swpd、free、si、so等字段的变化,以诊断内存交换频繁和系统性能下降的情况。
摘要由CSDN通过智能技术生成


当你的Windows连续开机一个星期时,你是不是发现机器特别慢,点啥啥不开。但是你去看资源管理器的又发现内存占用也没有到90%,CPU也没跑满。那为什么这个时候会那么卡呢?

其中一个原因就是由于长期使用机器且没有关机,导致内存中缓存了大量的数据。由于系统的虚拟内存管理,当内存使用达到一定程度时,系统会将内存中 的数据交换到硬盘中,也就是Windos的虚拟内存,在Linux中叫Swap分区。此时如果要使用交换到硬盘上的数据,那么系统首先要把内存中最远最久没有 使用的数据交换到硬盘,再把硬盘中需要的数据加载到内存,然后才可以跑逻辑,这样就造成了“点啥啥不开”的残像了。

那么这样的情况会不会发生在我们的Server端Linux上呢?答案当然是肯定的。而且一旦该情况发生,有可能产生雪崩效应,一下就把服务器弄回老家了。 这里的典型案例就有云风大大遇到的Redis转储。又或者可以自己手写一个无限分配 内存并使用的例子。然后静静等待系统挂掉的那一刻。

那么什么时候会发生这样的情况?或者说当我们的系统表现出什么的症状时我们要考虑这样的情况?如何进行确诊?

一般当系统频繁的需要新内存时可能发生这样的情况,如频繁的读文件而不释放、网络接收大量文件写磁盘(写磁盘跟不上内存从网络接收的量)。此时我们的系统 对外相应速度会急剧下降但是CPU又没有跑满。这时我们就应该考虑是不是虚拟内存频繁交换的问题了。通过使用vmstat可以帮助我们来确诊是不是这个原因。

1. vmstat输出

裸奔运行vmstat命令,可以看到一行输出。该行输出内容表示的自系统最近启动后虚拟内存和CPU的平均情况。 在输出的第一行我们称之为表头。依次包含了:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

几个字段,第二行我们称之为子表头,依次包含了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值