以前想把系统日志写在内存里,无奈基本上只能写10米,所以我得赶紧把日志切回硬盘里。

不过紧巴巴的硬盘也不怎么够用。于是还是不死心,看看能不能把内存中日志的容量设置得大一点。于是就有了这篇文章。

做人最要紧呢,就是对自己的认识要足够清晰

怎么样才能知道我的机器上,总共有多少内存呢?虽然买的是云服务器,但是作为一个Linux服务器管理员,机器都给你了还没法解决,总觉得说不过去。于是今天又认识了一个新朋友:free

礼数要到位。

man free

手册上对该命令的描述不多,基本上就是说,这个命令能查看系统上物理内存和swap内存,总共有多少,使用了多少,还剩多少。以及内核使用了多少缓存。这个信息也是通过解析 /proc/meminfo 得来的。

什么是swap内存?

描述中提到了我不太熟悉的 swap内存,顺便给大家科普一下。红帽的文档对它有一个说明:

Linux中的swap空间是当物理内存(RAM)耗尽时使用的。如果系统需要更多的内存资源,而RAM已经满了,那么内存中不活跃的页面会被移动到swap空间中。尽管swap空间能够帮机器提供少量的RAM,但是不能把它想成是RAM变多了。swap空间存在于硬盘中,比物理内存的访问速度更慢。

swap空间可以是一个专属swap分区,也可以是一个swap文件,亦或是两者的组合。

所以,听起来,似乎会让人联想到Windows上的虚拟内存的概念。有更专业的解答欢迎留到评论区。

free命令返回的结果分为好几列,分别是:

total:总共安装内存容量,来自于 /proc/meminfo 中的 MemTotal 和 SwapTotal

used:已使用的内存容量,计算方法为:total – free -buffers – cache

这里提到了 buffers 和 cache 。两者在内存中,各自承担着不同的角色。

简单说一下区别的话:

cache:

它存储的东西可不止一样,不过最主要的呢,还是保存了硬盘中,最经常访问的数据,以便为系统进程提供更高的读写性能。尽可能最大化地使用内存,并且有一套自己判断该存什么,不该存什么的逻辑,也有一套何时释放内存空间的机制。

buffer:

保存了cache中数据的元数据。如果请求了cache中存在的数据,第一步是检查指向cache中的真实数据的元数据,一旦元数据找到了,内核就能够去获取cache中的真实数据了。

free:未使用的内存容量

shared:通常是 tmpfs 所使用的内存容量

buffers:内核缓冲使用的内存容量

cache:页面缓存和 slabs 使用的内存容量

buff/cache:buffers和cache的总和

available:预估不做swap的话,启动新应用可用的内存空间。

那么列就以上这么多,大家在使用命令的时候,可以各取所需。

命令选项

命令选项有很多,来看2个比较常用的:

--si

如果你比较讲究,喜欢标准的程序员单位的话,不用这个选项就很适合您。各个单位之间,都相差1024倍,比如1M是1024K。如果你更习惯整数1000的话,可以带上这个选项。每个单位都差1000倍。

-h即--human

笔者自认为还是个人类,这个选项就是给人类用的。可以根据单位的设置,自动把容量缩小到3位数之内,同时带上对应的单位。

实践

实践时间,漏家底的时候到了,看看我电脑上的内存有多大。

太好了,一个G的样子。

同意给笔者加内存的记得长按点赞哈。我们下期不见不散。

相关推荐