• [C语言]内存泄漏问题Out Of Memory


    看下面这段代码

    void memory_leak() {
      int *p = (int *)malloc(sizeof(int));
      return;
    }

    上述代码在申请一段内存后直接返回,这样申请到的这块内存在代码中再也没有机会释放掉了,这就是内存泄漏。
    内存泄漏是一类极为常见的问题,尤其对于不支持自动垃圾回收的语言来说,但并不是说自带垃圾回收的语言像 Java 等就不会有内存泄漏,这类语言同样会遇到内存泄漏问题。
    有内存泄漏问题的程序会不断的申请内存,但不去释放,这会导致进程的堆区越来越大直到进程被操作系统 Kill 掉,在 Linux 系统中这就是有名的 OOM 机制,Out Of Memory Killer。

    幸好,有专门的工具来检测内存泄漏出在了哪里,像valgrind、gperftools等。
    内存泄漏是一个很有意思的问题,对于那些运行时间很短的程序来说,内存泄漏根本就不是事儿,因为对现代操作系统来说,进程退出后操作系统回收其所有内存,这就是意味着对于这类程序即使有内存泄漏也就是发生在短时间内,甚至你根本就察觉不出来。
    但是对于服务器一类需要长时间运行的程序来说内存泄漏问题就比较严重了,内存泄漏将会影响系统性能最终导致进程被 OOM 杀掉,对于一些关键的程序来说,进程退出就意味着收入损失,特别是在节假日等重要节点出现内存泄漏的话,那么肯定又有一批程序员要被问责了。

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    记录一则enq: TX
    RAC节点两边存储名字不一致导致的故障及相关延伸
    记录一则fsck的简单案例
    RAC某节点v$asm_disk查询hang分析处理
    统计信息自动收集任务失效原因排查
    OEMCC 13.2 安装部署
    Linux平台Oracle 12.1.0.2 单实例安装部署
    java 除法运算只保留整数位的4种方式
    eclipse spring 配置文件xml校验时,xsd报错
    oracle decode()函数的参数原来可以为sql语句!
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14492532.html
Copyright © 2020-2023  润新知