linux定时每天清理系统缓存&操作系统吞吐量优化

最近做项目搭建服务的时候遇到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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值