linux下程序占用内存只涨不降原因追查

这篇具有很好参考价值的文章主要介绍了linux下程序占用内存只涨不降原因追查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        这几天在做战斗校验压测的时候发现,战斗校验进程占用内存一直在涨,而且长时间不降,但是相同逻辑在windows下跑的时候,校验结束进程占用内存就会降下来,这里记录一下整个追查过程。

        首先怀疑有内存泄露,于是先用valgrind

valgrind --tool=memcheck --leak-check=full --log-file=/tmp/bc_leak ./battle_check

校验几场场战斗后得到结果并没有"definitely lost", "indirectly lost", "possibly lost", "still reachable", and "suppressed"这五种级别的泄露提示,据此判断,应该是没有内存泄露。 

         根据上面的检测结果,分析一下,没有泄露,但是进程占用内存又一直在增加,那应该是从系统申请了内存但是没有还回去,那什么操作会导致这样的结果呢,继续追查,这次该拿出系统调用追踪利器strace

strace -tt -f -o /tmp/bc_leak_strace ./battle_check

同时结合top命令

top -p 17626 -d 0.1

这样可以观察在进程res占用增大的时候,系统调用是什么,得到的数据是这样的,在res猛增的时候,一直在跑brk调用   

 程序运行内存一直在增长,c++编程,cache,服务器,linux

而后是没有对应的释放操作的,于是上网查了一下brk申请内存导致只涨不降的情况,发现还挺多的,主要是glibc的优化,brk比mmap性能好,小内存是brk申请,大内存就是mmap申请,但是brk申请的内存回收有个限制,如果最后申请的内存还在用的话,之前所有不在用的内存都不能回收,除非用malloc_trim(0)强制回收,找到症结之后,在每场校验最后加了强制回收空闲内存的逻辑,

程序运行内存一直在增长,c++编程,cache,服务器,linux 

这会触发之前大量的内存被回收,在我的逻辑中,内存从250m增长到460m,然后一次全部回收完,校验进程占用的内存会回到最原始的250m。

这里贴一下相关文章,单价可以参考:

glibc下的内存管理 - lookof - 博客园

内存泄漏之malloc_trim - 寒魔影 - 博客园文章来源地址https://www.toymoban.com/news/detail-612172.html

到了这里,关于linux下程序占用内存只涨不降原因追查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux运维(二)内存占用分析

    1.1: free 命令是 free最常规的查看内存占用情况的命令 1.2: 参数说明 top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令。 按 q 退出 top命令也可以用来查内存 输入top命令 按x,高亮排序列,默认应该是%CPU,按CPU占用排序。 按shift +M (或 按

    2024年02月09日
    浏览(47)
  • Linux系统内存、磁盘占用情况查询

    #查看磁盘占用空间 显示所有磁盘的使用情况,包括磁盘的总大小、已用空间、可用空间和文件系统类型等。 #查看运行内存的占用情况 #查看进程 1、 ps 命令:该命令用于列出当前用户的进程。以下是几个常用的选项: ps -ef :列出所有进程(包括系统进程)的详细信息。

    2024年02月05日
    浏览(54)
  • Linux查询java服务占用的内存

     使用top命令可以查询 使用jps -l 可以查询jar包名称和PID  

    2024年02月14日
    浏览(44)
  • Linux中buff/cache内存占用过高,手动释放内存

    buff/cache内存占用太高 我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图:(可以看到总内存就251G,buff/cache占用了174G) 什么是buff buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。 什么是cache cache(Page

    2024年02月12日
    浏览(46)
  • STM32-程序占用内存大小计算

    STM32中程序占用内存容量 Keil MDK下Code, RO-data,RW-data,ZI-data这几个段: Code存储程序代码。 RO-data存储const常量和指令。 RW-data存储初始化值不为0的全局变量。 ZI-data存储未初始化的全局变量或初始化值为0的全局变量。 占用的Flash=Code + RO Data + RW Data; 运行消耗的最大RAM= RW-data+ZI-dat

    2024年02月04日
    浏览(44)
  • 【Linux】磁盘或内存 占用比较高要怎么排

    请注意,在进行任何删除操作之前,请确保你知道哪些文件可以安全删除,并备份重要文件,以免意外丢失数据。 当 Linux 磁盘空间满了时,可以按照以下步骤进行排查: 运行 命令来查看磁盘使用情况。该命令将显示每个挂载点的磁盘使用量,以及可用空间和使用率。 使用

    2024年02月13日
    浏览(38)
  • linux中 buff/cache占用内存过多

    Linux服务器用一段时间就会出现buff/cache占用内存过多的情况,导致free空闲内存变得非常少,严重影响使用; 这个时候就可以用如下命令去清除一下cache内存 echo 1 /proc/sys/vm/drop_caches echo 2 /proc/sys/vm/drop_caches echo 3 /proc/sys/vm/drop_caches ##/proc/sys/vm/drop_caches的值为是0-3之间的数字,代

    2024年01月18日
    浏览(39)
  • Linux分析内存占用的几个方法

    内存管理是一个非常重要的任务,Linux内存占用分析的方法不只以上几种,用户可以根据需要选择合适的方法进行使用。对于使用Linux进行开发和运维的人员,熟练使用这些命令和方法能够帮助他们更好的管理系统资源,提高系统性能和稳定性。 1. free命令 free命令可以查看L

    2024年02月13日
    浏览(52)
  • 《Linux系列》buff/cache占用太多内存,如何释放内存?

      当遇到很多日志文件时,想要清理部分日志,但是一个一个清理太过麻烦。所以希望通过从文件时间上做逻辑判断,实现把某一时间之前的文件删除。 ll查看所有的日志信息 wc -l统计数量 find查找文件命令 -name指定查找文件的名称 -mtime +n, 查找n天前的文件 -exec 执行脚本固

    2024年02月16日
    浏览(40)
  • linux下的buff/cache内存占用过高-手动清除释放内存

    buff/cache内存占用太高 我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图: 可以看到占用了377M的内存 什么是buff buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。 什么是cache cache(Page Cache)是一种高速缓

    2024年02月07日
    浏览(99)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包