最近做项目搭建服务的时候遇到buffer/cache会一直慢慢的增加,而且没有自动的释放,我让项目自动的跑了大概三天的时间没有重启buffer/cache增加到了20多个G,而且在项目中生成了core.xxx文件,一共起了两个实例,每个实例中的core.xxx文件占11个G左右;经过很长时间的查资料才知道,buffer/cache是不会自动释放内存的。

Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放。尤其是被使用更多的cache空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放cache,作为free空间分给相关进程使用。所以一般情况下,我们认为buffer/cache空间可以被释放,这个理解是正确的。

但是这种清缓存的工作也并不是没有成本。理解cache是干什么的就可以明白清缓存必须保证cache中的数据跟对应文件中的数据一致,才能对cache进行释放。所以伴随着cache清除的行为的,一般都是系统IO飙高。因为内核要对比cache中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。

  • 手工释放buffer/cache:
echo 3 > /proc/sys/vm/drop_caches
  • 定时任务释放缓存:

/usr/bin/目录下新建清理脚本 clearcache.sh

#touch clearcache.sh
#vim clearcache.sh
sync
#表示清除pagecache和slab分配器中的缓存对象。
echo 3 > /proc/sys/vm/drop_caches
echo 0 > /proc/sys/vm/drop_caches

添加可执行权限

chmod +x /usr/bin/clearcache.sh

定时执行

crontab -e
输入:
1 1 * * * /usr/bin/clearcache.sh

crontab -l 查看任务是否创建成功

  • 操作系统(linux)的设置:

socket 的最大连接数的修改,在centos中修改socket最大连接数的方法(这里的文件是进程文件已经在运得的,不能使用vim编辑器修改),方法如下

echo 50000 > /proc/sys/net/core/somaxconn (系统默认的值是128,现在改成50000)

加快系统的tcp回收机制 (系统默认tcp在断开后还会存活一段时间) 方法如下

echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle (系统默认是0,修改为1)

允许空的tcp回收利用 方法如下

echo 1 >/proc/sys/net/ipv4/tcp_tw_reuse (系统默认为0,修改为1)

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐