最近工作中出现一个问题就是在软件服务运行20多天左右就会将内存耗尽,导致软件无法起来,服务无法进行,只能将软件关闭一段时间后,或者将系统重启,才能运行,而这也不是最终的解决方法,因为运行20多天后,内存会又继续耗尽。目前还在寻找解决思路中,目前的方法是定时清除缓存。因此有了这篇文章。

一、free

先来说说free命令:# free -m

其中: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

为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。那么有人说过段时间,linux会自动释放掉所用的内存。等待一段时间后,我们使用free再来试试,看看是否有释放?根据我的观察,cache内容是没有被释放的。

二、手动释放cache

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

# cat /proc/sys/vm/drop_caches0首先,/proc/sys/vm/drop_caches的值,默认为0。

# sync手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件)

# echo 3 > /proc/sys/vm/drop_caches# cat /proc/sys/vm/drop_caches3将/proc/sys/vm/drop_caches值设为3

三、脚本文件

#!/bin/shcaches_num=$(free|grep Mem|awk  '{ print $7 }')echo $caches_numif [ $caches_num -gt  10000000 ] ; then{syncecho "sync done!"echo 3 > /proc/sys/vm/drop_caches}fi

然后通过crontab设置定时任务,进行脚本的执行。定时释放cache。

linux程序释放内存,Linux释放内存方法相关推荐

  1. 后台运行linux程序,后台运行Linux程序的方法

    后台运行Linux程序,可以通过crontab设置,这种方法一般用来让一个程序定时运行,也可以通过./test &这样在程序末尾加上一个&使程序在后台运行. 编写代码,下面我将参考ht ...

  2. linux程序无法启动,Linux无法启动解决方法[阮胜昌]

    2007-10-22 22:27 linux中修复GRUB 呵呵,最近2003系统老出问题,主要是防火墙导致很多聊天软件都用不了@|@哎,有时候甚至把MBR文件也弄没了没办法重新安装GRUB么???? ...

  3. linux 程序调试日志,Linux程序调试

    Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了 ...

  4. linux 程序退出 调试,Linux程序调试 - nbspnbspnbspC++nbsp技术中心 - C++博客

    Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了 ...

  5. 安卓跑linux程序_Android 运行 Linux 可执行程序

    /**************************************************************************** * Android 运行 Linux 可执行 ...

  6. 单片机上运行linux程序代码,在Linux下烧录51单片机

    原标题:在Linux下烧录51单片机 *本文作者:LEdge1,本文属 FreeBuf原创奖励计划,未经许可禁止转载. 背景 我一直在学习Linux 系统,但是最近还要学习51单片机,所以在Linux ...

  7. gsm基于linux程序,基于嵌入式Linux下GSM模块的短信收发系统设计

    摘要:移动通信中的短消息业务以其方便.可靠和价廉得到了广泛应用,本文在嵌入式Linux系统中,通过西门子MC35模块,实现了短信收发系统,该系统采用PDU短信模式,能支持中文短信.程序设计采用异步事件 ...

  8. linux程序不可抢占,Linux内核抢占机制(preempt)

    早期的Linux核心是不可抢占的.它的调度方法是:一个进程可以通过schedule()函数自愿地启动一次调度.非自愿的强制性调度只能发生在 每次从系统调用返回的前夕以及每次从中断或异常处理返回到用户空 ...

  9. linux程序设计项目报告,Linux程序设计实验报告大作业

    Linux程序设计实验报告大作业 实 验 报 告 课程名称: LINUX程序设计 学 院: 计算机学院 专 业: 软件工程 班 级: 14-3 姓 名: 张正锟 学 号: 201401061038 2 ...

  10. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...

    驱动程序开发的一个重大难点就是不易调试.本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是: 利用printk 查看OOP消息 利用strace 利用内核内置的hacking选项 利用i ...

最新文章

  1. 深度学习--TensorFlow(项目)Keras手写数字识别
  2. CKMLCP前期未结算_报错
  3. 互联网1分钟 | 0117 IBM入驻上海张江人工智能岛;IoT业务将成为小米新支撑点
  4. Redis从入门到精通,至少要看看这篇!
  5. 开启Python自动化运维之路
  6. 分计算iv值_快捷、经济、实用的光伏及IV曲线测试仪PVPM 1500X
  7. ZZULIOJ 1072:青蛙爬井
  8. 记一次Task抛异常,调用线程处理而引发的一些随想
  9. 类 java_java类的基本结构
  10. Python Logging.basicConfig
  11. 2014025673《嵌入式系统程序设计》第三、四周学习总结
  12. 微信小程序开发入门教程 含视频 有源码
  13. R. Shankar《Principles of Quantum Mechanics (2nd)》(山卡《量子力学原理(第二版)》)双语目录
  14. aria2最新tracker服务器,Aria2自动更新BT Tracker服务器列表的方法
  15. mcs-51单片机CPU的内部结构及工作原理
  16. 关于华为任正非裁员事件
  17. 计算机显示时区怎么更改,电脑时区自动改怎么办
  18. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
  19. 计算机无法使用本地搜索,电脑资源管理器搜索功能无法使用解决措施
  20. 《冰与火之歌》七王国的骑士

热门文章

  1. 网络安全-点击劫持(ClickJacking)的原理、攻击及防御
  2. 移动端H5强制页面横屏展示
  3. 47、微信-发起群聊AddGroupChatActivity
  4. 在CTeX上编码论文《杂谈勾股定理》及论文式样
  5. Windows快速访问无法取消固定
  6. 网站监控程序uptime-kuma,宝塔面板搭建 ,TCP/HTTP监控
  7. VS2019番茄助手添加头文件防重复宏定义#ifn
  8. N个数选出M个最小或最大值算法
  9. diy服务器个人主机_电脑小白如何自己动手DIY主机?
  10. 无人车路径规划与控制综述