当前位置: 首页 > ops >正文

linux下程序运行一段时间无端崩溃/被杀死,或者内存占用一直增大。linux的坑

如果你的程序没有内存泄漏,且有读多个文件的操作,当运行一段时间后无缘无故崩溃/被杀死。那你遇到的问题跟我遇到的一样。

  1. 一开始我以为程序有BUG,当抓崩溃信号又抓不到,直到我定时往日记里写当前内存的使用情况,发现内存一直再涨,通过top命令查看程序内存的使用情况,发现所有程序的内存使用并不多,但内存使用率却很高。通过free -m命令查看,发现Buffers / Cached的使用率很高,且一直涨。后来查了才知道,Linux有一个机制就是进行文件操作的时候,Linux为了提高文件IO的速度,会把读取过的文件放到内存中缓存起来(所以Cached会越来越大),然后程序读取文件的时候,先看缓存有没有,避免频繁进行IO操作,提高效率。当你读的文件够多够大,内存就会有被撑爆的情况,内存爆了以后,系统会把一些程序给干掉了,让内存释放出来,所以你的程序就会毫无征兆的挂了。
    在这里插入图片描述

清理缓存的方式:执行命令

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

参考https://blog.csdn.net/feiying00544/article/details/82504779

  1. 如果你发现只用命令清除缓存,内存还是一直涨,那可能就遇到了Linux的另一个机制。这个机制就是在Linux上申请内存空间的时候,会有两个函数brk和mmap负责,brk负责小的内存空间申请,mmap负责大的内存空间申请。其中brk的单项队列,如果队列顶的空间没有被释放,即使该队列的其他空间都被释放,也不会返还给系统,所以内存空间也会越来越大。

清理缓存的方式:调用malloc_trim函数让系统强制回收

malloc_trim(0);

参考https://blog.csdn.net/cleanfield/article/details/128312395

我的最终做法:内存使用率达到一定使用率后执行下面的代码

system("sync");
system("sync");
system("echo 3 > /proc/sys/vm/drop_caches");
malloc_trim(0);
http://www.xdnf.cn/news/17883.html

相关文章:

  • Docker in Test:用一次性的真实环境,终结“测试永远跑不通”魔咒
  • 集成运算放大器(反向比例,同相比例)
  • C++实战
  • 静态库和动态库
  • 【leetcode】5 最长回文子串 动态规划法
  • Protues使用说明及Protues与Keil联合仿真实现点亮小灯和流水灯
  • 【Docker项目实战】使用Docker部署Notepad轻量级记事本
  • 【基础-判断】HarmonyOS提供了基础的应用加固安全能力,包括混淆、加密和代码签名能力
  • 数据结构 实现循环队列的三种方法
  • 如何在 MacOS 上安装 SQL Server
  • 搭建ktg-mes
  • 新手向:Python列表、元组、集合和字典的用法对比
  • MySQL的三大范式:
  • AI云电脑盒子技术分析——从“盒子”到“算力云边缘节点”的跃迁
  • 实现Android图片手势缩放功能的完整自定义View方案,结合了多种手势交互功能
  • Vue 3.5重磅更新:响应式Props解构,让组件开发更简洁高效
  • MQ积压如何处理
  • Markdown 生成 Gantt 甘特图
  • 使用js完成抽奖项目 效果和内容自定义,可以模仿游戏抽奖页面
  • 31 HTB Union 机器 - 中等难度
  • C:\Windows\WinSxS 目录详解
  • 【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
  • AI搜索引擎下的内容优化新范式:GEO的关键技术解析
  • 二十七、动态SQL
  • RK3568 NPU RKNN(三):RKNN-ToolKit2模型构建与推理
  • 大模型教机器人叠衣服:2025年”语言理解+多模态融合“的智能新篇
  • PowerPoint和WPS演示放映PPT时如何禁止鼠标翻页
  • 玉米及淀粉深加工产业展|2026中国(济南)国际玉米及淀粉深加工产业展览会
  • Java 学习笔记(基础篇3)
  • 数据结构:构建 (create) 一个二叉树