free命令这东西,看着简单,里头的门道还真不少。今天咱们就坐下来好好聊聊,怎么用这个小工具,看清楚你轻量云服务器的内存到底是个什么情况。先说说最基本的操作。想知道内存用了多少,最简单就是敲下面这行:
free -h
加个-h参数,系统会自动帮你把单位换算成G或者M,看着最舒服。出来的结果大概长这样:
total used free shared buff/cache available
Mem: 7.6G 5.2G 1.1G 123M 1.3G 1.9G
Swap: 2.0G 0.0B 2.0G
一眼扫过去,你可能觉得“完了,used 5.2G,就剩1.1G空闲,这不得扩容了?”别急,这里头有个常见的误会。
你看中间那列叫buff/cache,占了1.3G。这是啥?是Linux系统帮你做的一些“手脚”。它会把读过的文件、数据缓存下来,想着你下次再用的时候能快点儿。这部分内存,严格来说是被占用了,但它随时可以被释放出来给正经程序用。所以真正需要你关心的,是最后一列available,它告诉你现在有多少内存是可以马上分配给新应用的。上面例子里available是1.9G,这其实还挺健康的。
那有人会问,我想看程序实实在在吃了多少内存,不看缓存的那种,咋整?以前老版本的free会有一行叫-/+ buffers/cache,就是干这个用的。新版本虽然简化了显示,但道理一样,你只要记住,available才是你的“真心朋友”,free那一列的数字,看看就好。
说到这儿,得提一下swap,就是那个交换分区。很多人看到swap用了不少就紧张,其实不用。如果系统只是偶尔把一些不怎么活跃的数据挪到swap里,腾出物理内存给热门应用,这是正常操作。但如果你发现swap的used一直在涨,同时物理内存的available一直在降,那就要注意了,这可能说明物理内存真的不够用了,系统在频繁地换进换出,性能会受很大影响。
平时怎么用free更顺手?我习惯用这个组合:
free -hs 5
这命令会每5秒钟刷新一次,而且单位是人性化的,你可以开着它去跑个业务,看看内存变化趋势。如果想看更细的,比如总共用了多少内存加swap,可以加个-t参数。
另外有个小细节,如果你用的是云轻量云服务器,特别是容器环境,得留个心眼。有时候在容器里看free,数据可能不太准,因为它共享的是宿主机的内核,cgroup的限制不一定能直接体现在free的输出里。这时候最好配合docker stats或者kubectl top这类工具一起看。
真正需要担心内存的时候是什么样的呢?有这么几个信号:一是available一直低于总内存的10%;二是用vmstat看到si和so那一列(分别代表从swap换入和换出的数据量)经常有比较大的数值;更严重的,用dmesg命令查系统日志,如果看到“Out of Memory”的字样,那就是内存彻底爆了,系统开始杀进程了。
真到了那一步,也别慌,该加内存加内存,该优化应用优化应用。free这个命令,其实就是帮你早点发现问题,别等到网站打不开了才后知后觉。
总之一句话,看内存别光盯着used和free,多留意available和swap的变化。轻量云服务器这东西,你待它细心点,它就不给你添乱。