linux脏内存代码,Linux内存(手动释放cache)(示例代码)

项目的扩容申请了一台机器,到手之后看一下机器的指标,看到内存使用情况是这样的。

1、查看内存

free

$ free -h

total usedfreeshared buffers cached

Mem: 125G 89G 36G 92K 212M 74G-/+ buffers/cache: 14G 111G

Swap:7.5G 1.8G 5.6G

cat /proc/meminfo

如果你想得到更加相近的信息可以使用cat /proc/meminfo,直接看硬件的统计数据。

MemTotal: 131755760kB

MemFree:38151680kB

Buffers:217564kB

Cached:78274852kB

SwapCached:6072kB

Active:29647292kB

Inactive:50949268kB

Active(anon):2073604kB

Inactive(anon):30640kB

Active(file): 27573688kB

Inactive(file): 50918628kB

Unevictable:0kB

Mlocked:0kB

SwapTotal:7812092kB

SwapFree:5889924kB

Dirty:804kB

Writeback:0kB

AnonPages:2100436kB

Mapped:442904kB

Shmem:92kB

Slab:12017476kB

SReclaimable:11910264kB

SUnreclaim:107212kB

KernelStack:31184kB

PageTables:37492kB

NFS_Unstable:0kB

Bounce:0kB

WritebackTmp:0kB

CommitLimit:73689972kB

Committed_AS:25708340kB

VmallocTotal:34359738367kB

VmallocUsed:491656kB

VmallocChunk:34290629896kB

HardwareCorrupted:0kB

AnonHugePages:694272kB

HugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048kB

DirectMap4k:4096kB

DirectMap2M:2019328kB

DirectMap1G:132120576 kB

这里我们看到,内存总数total=125G,已使用used=89G,空闲free=36G,cache=78G。其他类型不等。

先解释一下:

total 内存总数

used 已经使用的内存数free空闲的内存数

shared 多个进程共享的内存总额

buffers Buffer Cache和cached Page Cache 磁盘缓存的大小-buffers/cache (已用)的内存数:used - buffers -cached+buffers/cache(可用)的内存数:free + buffers +cached

可用的memory=free memory+buffers+cached

这里可以看到我们使用了89G,其中cache占用了78G。这个占用有点高,并且不会自动释放。

2、什么是cache

为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .

Free中的buffer和cache:(它们都是占用内存):

buffer : 作为buffer cache的内存,是块设备的读写缓冲区

cache: 作为page cache的内存, 文件系统的cache

如果 cache 的值很大,说明cache住的文件数很多。

3、手动释放cache

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。

释放方法有三种(系统默认值是0,释放之后你可以再改回0值):

To free pagecache:  echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:  echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:  echo 3 > /proc/sys/vm/drop_caches

注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上

具体的操作如下

# 先查看一下释放cache信令值, 此时应该是0

$cat /proc/sys/vm/drop_caches0# 将缓冲区写入磁盘, 当需要停止系统的时候, 保证文件系统的完整性

$sync# 释放cache, 这个命令可能要花费一点时间, 请耐心等待

$echo 3 > /proc/sys/vm/drop_caches

# 再看一眼

$cat /proc/sys/vm/drop_caches3

再来看一眼内存

$ free -h

total usedfreeshared buffers cached

Mem: 125G3.5G 122G 88K 13M 444M-/+ buffers/cache: 3.1G 122G

Swap:7.5G 1.8G 5.6G

cache已经释放,free=122G。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值