【linux】free、vmstat、top“三贱合璧”追查内存

一、监控概述

    参看点击打开链接

    监控基本上分为机器监控和服务监控,本文主要谈的是机器监控,服务监控线上部署的服务有关,对外没法谈···


二、内存监控

    linux就是个操作系统,他就是一组程序的集合,一组管理计算机软硬件资源、合理组织工作流程,以方便用户使用计算机的程序的集合,操作系统离不开硬件资源,服务器就是他的“宿主”。服务器硬件出问题,那操作系统也好不了。所以机器监控玩什么?一方面玩的是“操作系统做什么”,一方面玩的是“服务器有哪些硬件资源”,也就是监控硬件资源,以确保操作系统正常工作。

1. 操作系统做什么

    前面说了,操作系统是一组程序的集合,是一组管理就算计软硬件资源、合理组织工作流程,以方便用户使用计算机的程序的集合(《操作系统理论》),一个操作系统至少应该具备五项功能:内存管理、进程管理、文件系统管理、用户接口管理、硬件设备管理。这就引出了本文要谈的内容,内存。

2. 服务器有哪些资源

    什么是服务器资源?其实主要是硬件资源,主要是我们关注的硬件资源。之所要关注,是因为我们线上部署的服务安全无时无刻都与这些资源息息相关。一台服务器有哪些资源呢?磁盘容量、磁盘IO、内存、网卡和CPU。所以,要了解linux操作系统,就要从“操作系统做什么”的五部分出发,但是要把理论付诸于实践,就需要把“操作系统做什么”映射到“服务器有哪些资源”上。

3. 内存监控

    回归正题。有了上面的引入,那就直接谈内存监控。监控内存状态,当操作系统异常时,作为判断系统异常的线索之一(基本上都需要综合硬件资源监控来进行判定);确认作为异常源时,监控数据作为找出元凶的“证据”。


三、linux内存机制

    “追查有道”,首先你要知道linux的内存机制。你不能看到系统空下内存只剩下一点点就言之凿凿的认定内存是异常源。

    linux内存机制:点击打开链接

    linux swap:点击打开链接

    请认真看完上面两个链接,因为linux内存机制一方面是物理内存,一方面是交换分区,交换分区作为物理内存的扩展;而物理内存,以方面是缓存机制,一方面是非缓存机制。对他们清晰的认识,是你追查思路的主要来源。简单萃取一下:

    1. swap分区不够,那么系统会假死,基本上你只能重启机器了,所以swap分区的合理分配很重要;

    2. 你看到的内存只剩下一点点,也不并不是真的,因为linux缓存机制的存在;

    请认真阅读上面两个链接,下面作为linux缓存机制的一点补充(数据截图:个人PC安装的虚拟机,因为安装了七八个虚拟机,所以单个虚拟机分配的资源很少,系统CentOS release 6.4,内核版本Linux localhost 2.6.32-358.el6.i686)。


    看红色框数据,对linux物理内存而言,总共498M,已经使用154M,空闲343M,498M=154M+343M,数据吻合;

    看黄色框数据,对linux内存机制而言,总共499M,已经使用65M,空闲433M,498M=65M+433M,数据吻合;

    这个数据,单看都是正确的,但是合起来看,看哪儿都觉得别扭。但如果你真的了解linux内存缓存机制,那么这一切都是合理的。再看下一个图。


    看红色框数据:对linux物理内存而言,使用154M,其中buffers和cached使用23M+65M=88M,还有154M-88M=66M(实际上因该是65M,因为用M作为单位,如果以byte作为单位,则不存在误差)不见踪影,但是巧合的是,在linux内存机制中,使用的内存刚好是65M。

    154M=23M+65M+65M(为了方便观看,用的单位是M,因此存在误差,如果用byte,则不会存在误差)。

    如果你认真看了第一个链接的文章,你会知道buffers的23M和cached的65M是linux缓存,而buffers/cache的used 65M则是真实的内存使用(进程、内核等使用的内存,而不是linux缓存机制占用的内存)。


    看黄色框数据:对linux物理内存而言,空闲343M内存,但是对于linux内存机制而言,空闲433M内存,还有433M-343M=90M空闲内存(实际上是88M左右),但是你看物理内存一栏,buffers和cached的数据加起来正好是88M。

    所以,如果不了解linux内存机制,就会错误的判定当前内存使用情况,造成误判定,导致元凶逍遥法外。

    

补充:

    为了证明是M单位造成误差,补上byte单位数据截图,可自行加减验证



四、free、vmstat、top“三贱合璧”追查真相

    为什么不采用其他更强大的程序来监控?首先考虑的是安全。这三个指令基本上系统都会自带,如果自己安装,你是否能保证安装的程序是安全的呢?你要知道,这台机器上面可是存放业务服务和数据,轻易不容闪失。其次,性能也是要考虑的。集群变大之后,如果每台服务器的资源消耗都很低,那浪费就太大了,因此公司总会想方设法的提高资源利用率,你不可能用搞自己PC机的姿势来搞线上的服务器。所以额外安装程序来进行监控,额外的程序会消耗多少服务器多少性能,以及这个额外程序的稳定性保证等等···要想拒绝你安装,理由太多了。

    所以,用原装的吧。

1. free

    当系统出问题,追查至内存的时候,要判定内存是否是异常源,先看free指令数据。

    先看交换区swap的使用情况,因为linux的内存机制,当swap不够用的时候,系统会出现假死,当然真的假死的时候,你就看不到了;但是在假死前期,你还是能看到数据,做一些补救工作。如果交换区不正常,则进入vmstat指令(下节);如果正常,则看内存空闲情况,主要关注linux内存机制的free和物理内存的buffers和cached,正常则不用追查,否则进入vmstat做进一步的判断。

    当然这里只是列举一般情况的追查,更多的还是要依靠线上经验。

2. vmstat

    当交换区不够用的时候,物理内存基本上也到瓶颈了。如果内存基本耗光了,而系统因此被拖的很慢,你就可以看vmstat中swap是否存在大量的读写,假死前期还是能看到大量读写的。如果出现大量交换区读写,说明当前内存瓶颈了,存在大量的换入换出,导致CPU空耗在IO上面。这时候需要恢复系统,则进入top指令。

3. top

    top能看到当前进程的实时数据,其实主要就是看谁消耗太多内存资源,判断是否能手动kill然后释放资源的问题。


附注:

    写的粗糙,sorry,凑合看吧,其实更多的还是依靠线上经验,但是都离不开知识的积累。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值