日常服务器巡检时,free -m命令的说明

日常服务器巡检中,我们通常会进行服务器的硬件健康状态,比如对服务器的硬盘、CPU和内存等状态进行查询。现在这里我们进行的是对常用的查看内存使用情况的free -m 命令进行讲解:

一、巡检第一台服务器:

#free -m

                                    total            used         free      shared       buffers       cached
Mem:                        16031             744       15287          0             182             213
-/+ buffers/cache:                             348       15683
Swap:                        8015                 0          8015

以上是对某台服务器进行内存的使用情况进行检查,好多新手统计当前内存的使用率=user/total=744 / 16031 * 100%=5%,感觉没毛病,加上用top命令查看cpu使用率时,发现使用率为0.3%

二、接着往下看第二台服务器的硬件设备使用率情况:

先查看第二台服务器CPU使用情况

(类似上面的第一台服务器,cpu使用率不高,那么就查看它(第二台)的内存使用率了)

#free -m

                                    total            used         free      shared       buffers       cached
Mem:                        16031            15861       170        0              287             15079
-/+ buffers/cache:                             494       15537
Swap:                        8015                 0          8015

扫描二维码关注公众号,回复: 5930112 查看本文章

在第二台服务器,你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,那么这是什么情况呢?

其实一开始,算内存的使用率=user/total=744 / 16031 * 100%=5%用这公式是错误的了,这是Linux新手,容易犯的错误!

那好,现在开始进行对free -m命令进行讲解:

(以上例子进行讲解)

#free -m

                                    total            used         free      shared       buffers       cached
Mem:                        16031            15861       170        0              287             15079
-/+ buffers/cache:                             494       15537
Swap:                        8015                 0          8015

+++++++++++++++++++++我是华丽的分隔线+++++++++++++++++++++

-m:   内存大小以M为单位,只输free命令时是以kb为单位。

 totel: 机器总的物理内存。

 used:用掉的内存。

 free:空闲的物理内存。

shared:多个进程共享的内存总和,一般数值为0,当前废弃不用。

buffers: 写缓存,数据存储时,先保存到磁盘缓冲区,然后再写入到永久空间。

cached: 读缓存,数据从磁盘读出后,暂留在缓冲区,预备程序接下来的使用。

- buffers/cache:序角度上看已经使用的内存数,这才是程序实实在在用掉的内存数。

+ buffers/cache:程序角度上看未使用、可用的内存数。

Swap:total是交换分区的总内存大小,free是交换分区空闲可用的内存大小。

其实算已有的内存和可用的内存,计算方式如下:

#free -m

                                    total            used         free      shared       buffers       cached
Mem:                        16031            15861       170        0              287             15079
-/+ buffers/cache:                             494       15537
Swap:                        8015                 0          8015

-buffers/cache:(已用)的内存数,即used-buffers-cached=15861-287-15079=495

+buffers/cache:(可用)的内存数,即free+buffers+cached=170+287+15079=15537

在Linux中,内存是拿来用的,不是拿来看的。而在Windows中,无论你的真实物理内存有多少,它都会用硬盘交换文件来读,即使是内存还有一大部分。这也就是Windows常常提示虚拟空间不足的原因。可以想见,硬盘怎么会快过内存,所以我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不用担心自己的内存太少。如果常常看到swap用了很多,那么你就要考虑加物理内存了。这也是在Linux服务器上看内存是否够用的标准。从用户和操作系统的角度来看,其大小空间是有区别的。像buffer/cached的内存,由于这块内存从操作系统的角度确实被使用,但如果用户要使用,这块内存是可以很快被回收而被用户空间程序使用,因此从用户角度而言这块内存应被划为空闲状态。

但是如何回收cache及什么时候cache是回话不了,想更深层了解buffers/cache的区别,个人发现一位大神的精彩讲解,请看下面的链接!

https://blog.csdn.net/lqglqglqg/article/details/82313966

(摘取部分总结)

Linux 系统内存中的 cache 并不是在所有情况下都能被释放当做空闲空间用的。并且也也明确了,即使可以释放 cache,也并不是对系统来说没有成本的。总结一下要点,我们应该记得这样几点:

  1. 当 cache 作为文件缓存被释放的时候会引发 IO 变高,这是 cache 加快文件访问速度所要付出的成本。
  2. tmpfs 中存储的文件会占用 cache 空间,除非文件删除否则这个 cache 不会被自动释放。
  3. 使用 shmget 方式申请的共享内存会占用 cache 空间,除非共享内存被 ipcrm 或者使用 shmctl 去 IPC_RMID,否则相关的 cache 空间都不会被自动释放。
  4. 使用 mmap 方法申请的 MAP_SHARED 标志的内存会占用 cache 空间,除非进程将这段内存 munmap,否则相关的 cache 空间都不会被自动释放。
  5. 实际上 shmget、mmap 的共享内存,在内核层都是通过 tmpfs 实现的,tmpfs 实现的存储用的都是 cache。

猜你喜欢

转载自blog.csdn.net/lituxiu/article/details/88412014