惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - 一字千金

linux C++崩溃堆栈信息打印 看懂成交密度,秒辨股市资金真假动向 安装android studio时出现下面报错source-36_r01.zip安装失败 异动拉升横盘突破筛选股票 sh看门狗脚本 QLabel设置QToolTip显示的样式 自动化http请求脚本 批量遍历文件夹内得文件生成md5值 g_JavaVM->AttachCurrentThread((void **) &pEnv, NULL))返回-1 python使用pg数据库 批量获取git所有分支命令 大模型之智能体 深⼊了解 GPT-4和ChatGPT的API 初识GPT-4和ChatGTP 什么是大模型以及需要掌握哪些基础知识 pycharm2024下载安装一键激活2099年 linux根据进程名查找进程并杀死进程脚本 linux根据进程名称定时获取进程内存脚本 QGridLayout删除旧窗口还有清干净 linux编译安装ccache3.2.4
linux下检测程序内存泄漏方法步骤
一字千金 · 2025-03-18 · via 博客园 - 一字千金

1.安装使用valgrind

sudo yum install valgrind

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt ./your_program

当我执行一个程序,库在子文件夹中时,需要先将子文件夹中的库文件路径指定为环境变量,然后再运行你的程序;

export LD_LIBRARY_PATH=$(pwd)/lib:$(pwd)/lib/postgres:$LD_LIBRARY_PATH

程序如果是服务,需要执行kill -15  id,命令去让程序正常退出后,才会记录内存泄漏情况;id是进程id可以通过ps -f | grep 进程名称 来获取,或者 pgrep  进程名称 来获取;程序退出后,才会出现泄漏日志

 2.valgrind日志分析

一般只要看 definitely lost的地方,在valgrind-out.txt中全局搜索definitely lost关键词,就会定位到内存泄漏的地方

(1)泄漏汇总

LEAK SUMMARY:
==260150== definitely lost: 383,348 bytes in 28 blocks //确定是内存泄漏的
==260150== indirectly lost: 1,137,920 bytes in 55,958 blocks//间接导致的内存泄漏
==260150== possibly lost: 647,588 bytes in 1,601 blocks
==260150== still reachable: 1,013,620 bytes in 10,373 blocks

(2)泄漏详情

直接搜索definitely lost 就会找到泄漏的堆栈信息,调用顺序是从下往上的,看最近的调用可以看最上面,最后找到泄漏是在authorize_server_get_safenet_info new的内存,没有释放调

==260150== 244,104 (264 direct, 243,840 indirect) bytes in 3 blocks are definitely lost in loss record 2,135 of 2,139
==260150== at 0x4C2C089: calloc (vg_replace_malloc.c:762)
==260150== by 0x55A18D1: mxml_new (mxml-node.c:751)
==260150== by 0x55A1496: mxmlNewElement (mxml-node.c:400)
==260150== by 0x559E09B: mxml_load_data (mxml-file.c:1771)
==260150== by 0x559BD37: mxmlLoadString (mxml-file.c:192)
==260150== by 0x4A5A23: authorize_server_get_safenet_info (authorise.cpp:2257)
==260150== by 0x57A814: __restful_getSafenetInfo(std::string&) (restful_authCMS.cpp:3521)
==260150== by 0x57C24A: __restful_get_allAuthInfo_ret(int, APPWEBS_T*) (restful_authCMS.cpp:3868)
==260150== by 0x582E98: restful_authCMS_getAllAuthResourceInfo (restful_authCMS.cpp:5772)
==260150== by 0x56F8BB: rest_srv_proc(APPWEBS_T*) (rest_root.cpp:542)
==260150== by 0x5488AA: runSelfCtrl (selfCtrlHandler.c:1298)
==260150== by 0x53B008: maRunPipeline (pipeline.c:340)
==260150==

3.自动根据进程名称获取进程内存使用并显示脚本getmemory.sh

#!/bin/bash

# 定义循环间隔时间(秒)
PROCESS_NAME="SystemCMS"
INTERVAL=4
lastuse=0;
while true; do
    # 获取进程ID
    PID=$(pgrep $PROCESS_NAME)
    
    if [ -z "$PID" ]; then
        echo "$PROCESS_NAME 进程未找到"
    else
        # 获取内存使用情况
        MEM_USAGE=$(cat /proc/$PID/status | grep VmRSS)
        echo "$PROCESS_NAME 进程ID: $PID"
        echo "内存使用情况: $MEM_USAGE"
    fi

    # 等待指定的间隔时间
    sleep $INTERVAL
done

 4.如果是web后台服务需要循环调用web网页

可以用ChromeReloadPlus插件,放入谷歌浏览器中,定时刷新网页调用web服务接口;来测试web服务是否存在内存泄漏

下载地址:

https://download.csdn.net/download/baochunlei1/90484400

下载之后解压,打开谷歌浏览器设置---扩展程序,将插件拖入网页,然后点击浏览器右上角的

点击插件选择时间,定时刷新网页;