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

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.dtcms.com/a/335258.html

相关文章:

  • 11.web api 2
  • 模式匹配自动机全面理论分析
  • AI短视频爆火?记录AIGC在影视制作场景的实践教程
  • 大模拟 Major
  • 随机整数列表处理:偶数索引降序排序
  • jd-hotkey探测热点key
  • 流量分析服务一审构成非法经营罪二审改判:数据服务的法律边界
  • 电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
  • ethernet_input到应用层处理简单分析
  • 5 索引的操作
  • K8s核心组件全解析
  • 如何使用嵌入模型创建本地知识库Demo
  • 三、memblock 内存分配器
  • 深入理解文件硬链接、软链接与引用计数的那些事
  • 机器学习相关算法:回溯算法 贪心算法 回归算法(线性回归) 算法超参数 多项式时间 朴素贝叶斯分类算法
  • 超详细yolo8/11-pose人体姿态全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • 8.16、8.17 JavaWeb(MyBatis P116-P134)
  • 【网络与爬虫 00】试读
  • lcx、netcat、powercat--安装、使用
  • 【RH134知识点问答题】第 10 章:控制启动过程
  • 深入浅出OpenGL的glDrawArray函数
  • 设计索引的原则有哪些?
  • 数据结构初阶(16)排序算法——归并排序
  • w嵌入式分享合集66
  • 开发一款多商户电商APP要多久?功能拆解与源码技术落地方案
  • vulhub-driftingblues9缓冲区溢出攻击提权
  • 写一个linux脚本,要求实现查找9010端口,如果端口存在则kill,否则不处理,返回对应的提示
  • LE AUDIO----COMMAND AND EVENT
  • ArrayList的扩容源码分析
  • colmap