news 2026/5/11 3:56:17

Linux操作系统自带的测试内存泄漏的命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux操作系统自带的测试内存泄漏的命令

Linux操作系统自带的测试内存泄漏的命令:
watch -n 1 "ps -o vsz,rss,pmem,comm -ppidof DataBridgeDeamon
通过查看:rss的数据变化来粗略的判断是否有内存泄漏。

在嵌入式开发和 Qt 编程中,内存泄漏(Memory Leak)通常是指程序申请了内存但未能正确释放,导致可用内存持续减少。

结合你目前的 TCP 服务器项目,常见的内存泄漏原因可以归纳为以下几类:

1. 逻辑性堆积(最隐蔽的原因)

这是你之前遇到的情况。程序并没有“忘记”释放内存,而是数据产生的速度快于处理的速度,导致数据在内存中无限堆积。

  • 缓冲区积压:如m_receiveBuffer没能成功匹配到协议帧,导致数据只增不减。
  • 信号槽队列溢出:使用Qt::QueuedConnection时,如果发送信号频率极高,事件循环来不及处理,每个挂起的信号及其携带的参数(如巨大的QString)都会占用内存。

2. Qt 特有的对象生命周期问题

Qt 提供了QObject的父子树机制来自动管理内存,但如果不熟悉该机制,很容易出错:

  • 孤儿对象:通过new创建了QObject对象,但没有为其指定parent,且没有手动delete
  • 重复创建:在定时器或频繁触发的槽函数(如handleNewConnection)中new了对象,却忘记在关闭连接时调用deleteLater()

注意:在 Qt 中,建议对QTcpSocket使用socket->deleteLater()而不是delete socket,以防删除时还有未处理的事件导致崩溃。

3. 临时大对象的频繁拷贝

虽然这不一定是严格意义上的“泄漏”,但它会导致RSS (常驻内存)快速上升:

  • 字符串转换:在高频函数中使用QByteArray::toHex()QString::arg()拼接大字符串。这些临时对象在被垃圾回收前会占用大量内存空间。
  • 容器深拷贝:频繁地将大型QByteArrayQList作为信号参数进行值传递,而不是使用引用或常量引用。

4. 经典的 C++ 内存管理错误

这些是所有 C++ 程序员都会面临的基础问题:

  • 只申请不释放:调用了malloc/new但没有对应的free/delete
  • 异常退出导致的泄漏:程序在new之后、delete之前因为return或抛出异常而退出,跳过了释放逻辑。
  • 析构函数未定义为虚函数:当删除一个指向子类对象的基类指针时,如果基类析构函数不是virtual,子类的析构函数不会被调用。

5. 第三方库或系统层缓存

  • Glibc 内存碎片:有时候程序释放了内存,但操作系统的内存管理器(如glibc)并没有立刻将物理内存归还给内核,而是保留在自己的“内存池”中以备后用。这表现为 RSS 很高,但实际上并没有持续泄露。
  • 日志系统缓存:如果你向控制台或文件输出大量日志,系统可能会缓存这些 IO 操作,占用一定的内存。

总结

对于我现在的 TCP 项目,内存增长的前三大元凶通常是:

  1. 信号槽里的toHex字符串
  2. 未处理的数据在m_receiveBuffer中积压
  3. **频繁new出的QTcpSocket没有被正确deleteLater()**

建议建议:既然现在观察到 RSS 每 13 分钟增长约 0.5MB,建议运行 1 小时。如果 1 小时后它停留在 30-40MB 不动了,通常不需要担心;如果它一直涨到 100MB 以上,说明代码里肯定还有一个new出来的对象没有被管理起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 13:53:07

学读书类比大语言模型训练?通俗易懂掌握AI核心原理

大语言模型训练类比人类学习过程,分为三步:预训练从互联网学习基础知识并构建预测模型;监督微调通过问答数据教会模型回答问题;强化学习让模型自主探索最佳解决方案,形成思维链。本质上,AI大语言模型是一个…

作者头像 李华
网站建设 2026/5/10 4:18:40

AI落地六大黄金场景:从营销到政策驱动,附国内及出海成功案例,技术收藏必读

本文详细探讨了AI最有可能率先落地的六大场景:营销与客户运营智能化、生产流程与供应链优化、办公自动化与内部管理提效、垂直行业场景化解决方案、智能硬件与终端应用创新、政策驱动下的普惠化与生态协同。每个场景均分析了功能、实现方式及成功案例(包…

作者头像 李华
网站建设 2026/5/8 22:04:27

前端开发:提示词驱动的全链路

2025 前端开发大变局&#xff1a;从“手写代码”到“提示词驱动”的全链路革命 引言&#xff1a;前端开发的新常态 在 2025 年&#xff0c;如果你还在逐行敲入 <div> 和 handleOnClick&#xff0c;那么你可能正在掉队。前端领域已经进入了**“提示词即开发” (Prompt-a…

作者头像 李华
网站建设 2026/5/8 22:05:04

影刀RPA实战:3步搞定希音客户行为数据提取,效率飙升[特殊字符]

影刀RPA实战&#xff1a;3步搞定希音客户行为数据提取&#xff0c;效率飙升&#x1f680;每天手动整理希音数据浪费3小时&#xff1f;别让低效重复工作偷走你的创作时间&#xff01;今天分享如何用影刀RPA打造智能数据提取机器人&#xff0c;原需半天的任务现在3分钟自动完成—…

作者头像 李华
网站建设 2026/5/8 22:04:17

CTF中Web题目的常见题型及解题姿势,零基础入门到精通,收藏这篇就够了

一、基础知识类题目 考察基本的查看网页源代码、HTTP请求、修改页面元素等。 这些题很简单&#xff0c;比较难的比赛应该不会单独出&#xff0c;就算有应该也是Web的签到题。 实际做题的时候基本都是和其他更复杂的知识结合起来出现。 姿势&#xff1a;恶补基础知识就行 查…

作者头像 李华
网站建设 2026/5/8 11:32:46

测试驱动开发(TDD)的实践与思考

在敏捷开发与DevOps浪潮席卷软件工程的今天&#xff0c;测试驱动开发&#xff08;Test-Driven Development&#xff09;作为一项经典而充满争议的实践&#xff0c;始终占据着质量保障体系的核心位置。对于专业测试人员而言&#xff0c;TDD不仅是开发方法的变革&#xff0c;更是…

作者头像 李华