[转帖]smaps 使用&& 内存泄露

smaps,使用,内存,泄露 · 浏览次数 : 0

小编点评

## 进程内存泄漏分析 根据您提供的信息,以下分析可能有助于找出导致进程内存泄漏的原因: **1. 进程smaps信息分析** smaps 文件包含进程虚拟内存空间中各个区域的属性,例如地址范围、权限标识、文件路径等。结合进程地址空间大小(VIRT)、占用的物理内存(RES)以及其他进程共享的内存,可以分析进程是否泄漏了内存。 **2. 00400000-00531000 r-xp 00000000 fc:02 687197 的分析** 该记录表示进程使用了地址范围00400000-00531000,权限为r-xp,设备号为687197,指向/opt/bin/proxy_test文件中的内存数据。 **3. 其他问题** * 进程内存一直增长,但版本发布前使用valgrind发现没有出现内存泄漏,说明可能存在其他问题导致内存泄漏。 * 进程使用了多个内存映射,可能存在内存碎片或共享内存泄漏。 * 进程使用了tls协议,可能存在tls相关内存泄漏。 **4. 建议** * 使用smaps文件分析进程内存分配情况,查找可能泄漏的内存区域。 * 使用gdb调试工具分析进程内存使用情况,查找具体内存泄漏地址。 * 使用 valgrind 分析进程内存泄漏原因。 * 针对具体问题,可以尝试解决内存碎片、共享内存泄漏、tls相关内存泄漏等问题。 **5. 其他资源** * cnblogs 文章介绍进程地址空间划分:https://www.cnblogs.com/arnoldlu/p/10272466.html * proc-smaps 工具介绍:proc-smaps * procmem 工具介绍:procmem * valgrind 文档:valgrind * smaps 文件格式:smaps文件格式

正文

  •  

     

       这是一般进程的地址空间划分,现在有个问题,如果进程出现使用较多内存,非常明显,在不使用valgrind 工具下 能否看出来大概原因??

     top命令我们已经能看出进程的虚拟空间大小(VIRT)、占用的物理内存(RES)以及和其他进程共享的内存(SHR)。但是仅此而已; 但是想知道 更详细的呢??

    /proc/self/maps,基于里面信息能大概判断泄露的内存的属性,是哪个区域在泄漏、对应哪个文件。辅助工具procmem输出更可读的maps信息。

     参考:https://www.cnblogs.com/arnoldlu/p/10272466.html

     参考:proc-smaps

       在smaps文件中,每一条记录表示进程虚拟内存空间中一块连续的区域。其中第一行从左到右依次表示地址范围、权限标识、映射文件偏移、设备号、inode、文件路径

    --00400000-00531000---该虚拟内存段的开始和结束位置
    ---r-xp内存段的权限,最后一位p代表私有,s代表共享 
    ---00000000-该虚拟内存段在对应的映射文件中的偏移量
    -fc:02---文件的主设备和次设备号--
    -687197---被映射到虚拟内存的文件的索引节点号
    --/opt/bin/proxy_test--- 被映射到虚拟内存的文件名称后面带(deleted)的是内存数据,可以被销毁
    00400000-00531000 r-xp 00000000 fc:02 687197                             /opt/bin/proxy_test
    Size:               1220 kB 是进程使用内存空间,并不一定实际分配了内存(VSS)
    Rss:                 928 kB 实际分配的内存(不需要缺页中断就可以使用的)
    Pss:                 894 kB 平摊计算后的使用内存(有些内存会和其他进程共享,例如mmap进来的)
    Shared_Clean:         68 kB  RSS中其他进程共享的未改写页面
    Shared_Dirty:          0 kB RSS中其他进程共享的已改写页面
    Private_Clean:       860 kB  RSS中未改写的私有页面页面
    Private_Dirty:         0 kB RSS中已改写的私有页面页面
    Referenced:          928 kB 标记为访问和使用的内存大小
    -----indicates the amount of memory currently marked as referenced or accessed.
    Anonymous:             0 kB
    AnonHugePages:         0 kB
    Swap:                  0 kB
    KernelPageSize:        4 kB 内核页大小 
    MMUPageSize:           4 kB MMU页大小,基本和Kernel页大小相同
    Locked:                0 kB
    Anonymous” shows the amount of memory that does not belong to any file. 
    Even a mapping associated with a file may contain anonymous pages: when MAP_PRIVATE 
    and a page is modified, the file page is replaced by a private anonymous copy 

    参考:https://www.modb.pro/db/47525

       目前在处理问题过程中出现 进程内存一直都在增长,但是版本发布前使用valgrind发现没有出现内存泄漏, 同时是线上环境,目前不能动!

    所以只能先将进程的smaps 打印出来;根据smaps的数据 每一个

    00400000-00531000 r-xp 00000000 fc:02 687197                     

    地址段的情况;根据其特定记录可能出现问题的地址段!!

    然后使用gdb  dump memory 名将此地址段的内存等都 dump到文件dumpres.text中;

    然后strings -100  dumpres.text 分析 读取其字符

    根据其内容分析可能有问题的地方

    目前根据strings 结果发现有很多tls 相关信息。可能是使用tls 时出现错误吧!!!

    目前在客户线程 关闭了https 代理 运行一天后 发现 内存没有增长, 所以应该 就是ssl/tls 使用不当导致的堆内存泄露

    http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子

与[转帖]smaps 使用&& 内存泄露相似的内容:

[转帖]smaps 使用&& 内存泄露

这是一般进程的地址空间划分,现在有个问题,如果进程出现使用较多内存,非常明显,在不使用valgrind 工具下 能否看出来大概原因?? top命令我们已经能看出进程的虚拟空间大小(VIRT)、占用的物理内存(RES)以及和其他进程共享的内存(SHR)。但是仅此而已; 但是想知道 更详细的呢?? /p

[转帖]Linux内存管理 -- /proc/{pid}/smaps讲解

https://www.jianshu.com/p/8203457a11cc 本文包括如下三部分: 基本介绍与输出介绍 第一行基础信息讲解 详细信息讲解3.1 Size3.2 Rss3.3 Pss、Shared/Private_Clean/Dirty3.4 Referenced3.5 Anonymo

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /