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)
更多推荐
所有评论(0)