首页
学习
活动
专区
工具
TVP
发布

一次解决Linux内核内存泄漏实战全过程

什么是内存泄漏: 程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费. 发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示: ?...PSS:按比例报告的物理内存,比如进程A占用20M物理内存,进程B和进程A共享5M物理内存,那么进程A的PSS就是(20 - 5) + 5/2 = 17.5M 2.监控/proc/meminfo输出,重点观察...在排查的过程中发现系统非常空闲,都没有跑任何用户业务进程。 其中在使用slabtop监控slab的使用情况时发现size-4096 不停增长 ?...接下来使用trace event(tracepoint)功能来监控size-4096的使用和释放过程, 主要用来跟踪kmalloc()和kfree()函数对应的trace event, 因为他们的trace.../vmlinux.debug 读出上面kmalloc申请的ptr内存信息 ? (读取0xffff880423744000内存开始的4096个字节,并以字符形式显示) ?

4K20

一次python 内存泄漏解决过程

最近工作中慢慢开始用python协程相关的东西,所以用到了一些相关模块,如aiohttp, aiomysql, aioredis等,用的过程中也碰到的很多问题,这里整理了一次内存泄漏的问题 通常我们写python...程序的时候也很少关注内存这个问题(当然可能我的能力还有待提升),可能写c和c++的朋友会更多的考虑这个问题,但是一旦我们的python程序出现了 内存泄漏的问题,也将是一件非常麻烦的事情了,而最近的一次代码中也碰到了这个问题...,不过好在最后内存溢出不是我代码的问题,而是所用到的一个包出现了内存的问题,下面我通过一个简单的代码模拟出内存的问题,然后也会将解决的过程描述一下,希望能帮助到遇到同样问题的朋友。...二、解决内存泄漏的过程 像上面的例子是一个非常简单的程序,不复杂我们也并没有做上面复杂的操作就是一个简单的接受post请求的服务端,但是如果是在实际的项目中我们可能会写非常复杂的业务逻辑,那到时候我们又如何找到是哪里导致的内存问题...,并且没有不会释放,这个时候,可以直接通过浏览器访问get_info这个路由看看print打印的内容,这里将会打印出你程序运行到这个时候那一行的代码内存增长的比较多,进行一次排序,前面的几个其实都是需要你关注的

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

值得一linux内存学习总结

cache又计算了一次,因此最后的结果应该是减去SHMEM, 这样 和总内存相比,还有5497KB的gap .那么这个gap 到底应该是available的,还是算作used的,不得而知,那么因为这个gap...]# python Python 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2...: 在linux 系统中,有一个参数swappiness,这个值默认为60, 可以调整为0到100之间的任意值。...cache,buffer 的理解: 在古老的时代,cache 就是低俗设备的缓存,而buffer就是低速设备的写缓存。...工作中经常遇到的一个问题是: linux 的cache 占用非常高,有如下的两种参考方案: 修改kernel 参数 /proc/sys/vm/drop_caches 的值,从而清空cache.

33830

Linux内存管理之MMU的过程

ARMv8中的访问内存流程 我喜欢用图的方式来说明问题,简单直接: ? 蓝色部分是cpu,灰色部分是内存,白色部分就是cpu访问内存过程,也是地址转换的过程。...第一次读取内存得到pgd_t结构的目录项,从中取出物理页基址取出,即页上级页目录的物理基地址。 从线性地址的第二部分中取出页上级目录项的索引,与页上级目录基地址相加得到页上级目录项的物理地址。...整个过程是比较机械的,每次转换先获取物理页基地址,再从线性地址中获取索引,合成物理地址后再访问内存。...这个过程也是mmu的过程。 小结 我相信你已经对cpu通过MMU访问内存的本质有所掌握(还是不理解的话不要说认识我),而且通过linux的一个实验,对其软件模拟流程也有所感性的认识。...下一篇我们正式进入内存管理的大门——linux内存管理。

2.2K42

一次线上内存泄漏的破案过程

开始怀疑是网络问题,但没有证据.随后网关的一台机器突然宕机,这个现象引起了我们注意.在上次迭代中,我们服务有一次重大升级,所有请求均会经过网关服务转发,以实现Server/DB单元化绑定,问题可能出在转发环节...二 调查过程 网关本身无太多业务逻辑,依赖项非常少,为了实现时间最小损耗,技术框架采用spring cloud gateway,底层WebFlux 则使用了高性能的 Reactor 模式.在上线前的多次压测中...,网关服务表现非常优秀,时间损耗基本在毫秒级别.万万没想到上线没几天就挖了个大坑,必须要刨根问底调查清楚 2.1 第一次定位 由于刚迁移到新机房,可用于问题还原的监控手段不多,刚开始只能从查看pod云监控以及日志着手...,具体资料可以在网上搜,这里主要介绍定位过程....再一次分析内存中保留的对象内容 可以看出1000W+的对象中,全部记录的是我们每次请求的RouteUri Method 耗时等信息,通过关键字定位,这些对象生产的源头是GateWay的 GatewayMetricsFilter

83610

一次Linux木马清除过程

前段时间公司发生了一起服务器入侵事件,在此分享给大家也顺便理顺下linux入侵应急响应思路。 一、事件描述 某天监控同事反馈有台机器cpu飙高到2000%,可能机器已经被黑。...二、处理过程 2.1 查杀病毒进程 cpu占用率如此之高,基本可判断为挖矿程序无疑了,使用在线威胁情报系统对进程进行检测,不出所料,得出的标签是coinminer。...三、总结 首先啰嗦一下,关于linux主机,高危端口真得万万不能全网开放。看了日志后,发现黑客真是时时刻刻在爆破啊。...关于linux入侵的排查思路,总结如下: 1.查看异常进程活动-查找是否有异常进程和端口占用 1.1查找占用cpu最多的进程,相关命令:运行top命令后,键入大写字母P按cpu排序; 1.2查找占用内存最多的进程...cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" 2.2 查看是否有账号异常登录情况: a.查看当前登录用户和其行为 w b.查看所有用户最后一次登录的时间

2.8K21

一次内存占用问题的调查过程

马哥linux运维 | 最专业的linux培训机构 ---- 最近在维护一台CentOS服务器的时候,发现内存无端"损失"了许多,free和ps统计的结果相差十几个G,搞的我一度又以为遇到灵异事件了,...虽然天天都在用Linux系统办公,其实对它的了解也不过尔尔。...Slab简介和进一步调查 Slab Allocation是Linux 2.2之后引入的一个内存管理机制,专门用于缓存内核的数据对象,可以理解为一个内核专用的对象池,可以提高系统性能并减少内存碎片。...(Linux 2.6.23之后,SLUB成为了默认的allocator。)...图片取自The Linux Kernel's VFS Layer vm.min_free_kbytes 系统的"保留内存"的大小,"保留内存"用于低内存状态下的"atomic memory allocation

2.6K40

一次 Java 内存泄漏排查过程,涨姿势

由于经常需要对数据做大量的更新,维护索引就不太值得,所以每执行一次定时任务,整个索引都会重建一次。这意味着一整块数据都要经过这个系统,从而引发大量的内存回收。...大眼一看,可以发现我们域中Ad对象的数量高的不正常,并且在索引的过程中一直在增长,一直增长到我们处理的广告的数量级别。但是……这不应该啊。...重写代码,只使用 RX;在重写的过程中,升级到 RX2;真正的流式处理数据,而不是在内存里收集它们。这些改动通过 code review 之后,部署到开发环境进行测试。...我们的应用在索引的过程中会产生大量短生命周期的对象,因此一些过早提升是正常的,但是不应该如此严重。当应用产生大量短生命周期的对象时,能想到的第一件事就是简单的增加新生代的空间。...这应该会阻止老年代被填满从而产生一次 full GC。然而,在运行一段时间以后,我们再次惊讶的发现了一次 full GC。

80530

一次Linux系统被攻击的分析过程

一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Linux系统下最常见的攻击手段和攻击方式。...cpu,这也是之前客户反映的网站服务器异常缓慢的原因,从这个输出,我们得到了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:进入内存目录,查看对应PID目录下exe文件的信息...2)、在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有.../cd; } 6、揭开谜团 通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下: (1)攻击者通过Awstats脚本awstats.pl文件的漏洞进入了系统,在/var/tmp...(4)使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。

1.1K31

一次Linux系统被攻击的分析过程

一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Linux系统下最常见的攻击手段和攻击方式。...cpu,这也是之前客户反映的网站服务器异常缓慢的原因,从这个输出,我们得到了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:进入内存目录,查看对应PID目录下exe文件的信息...2)、在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有.../cd; } 6、揭开谜团 通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下: (1)攻击者通过Awstats脚本awstats.pl文件的漏洞进入了系统,在/var/tmp...(4)使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。

2K80

一次Linux系统被攻击的分析过程

一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Linux系统下最常见的攻击手段和攻击方式。...cpu,这也是之前客户反映的网站服务器异常缓慢的原因,从这个输出,我们得到了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:进入内存目录,查看对应PID目录下exe文件的信息...2)、在apa目录下有个后门程序t,这个就是之前在系统中看到的,运行此程序后,此程序会自动去apa目录下的ip这个文件,而ip这个文件记录了各种ip地址信息,猜想这个t程序应该是去扫描ip文件中记录的所有.../cd; } 6、揭开谜团 通过上面逐步分析和介绍,此服务遭受入侵的原因和过程已经非常清楚了,大致过程如下: (1)攻击者通过Awstats脚本awstats.pl文件的漏洞进入了系统,在/var/tmp...(4)使用Linux下的Tcp_Wrappers防火墙,限制ssh登录的源地址。 文章转载于马哥教育官网!

87440

一文读懂 Linux 内存分配全过程

在《你真的理解内存分配》一文中,我们介绍了 malloc 申请内存的原理,但其在内核怎么实现的呢?所以,本文主要分析在 Linux 内核中对堆内存分配的实现过程。...本文使用 Linux 2.6.32 版本代码 内存分区对象 在《你真的理解内存分配》一文中介绍过,Linux 会把进程虚拟内存空间划分为多个分区,在 Linux 内核中使用 vm_area_struct...return 0; } do_anonymous_page 函数的实现比较有趣,它会根据 缺页异常 是由操作还是写操作导致的,分为两个不同的处理逻辑,如下: 如果是操作导致的,那么将会使用 零页...进行映射(零页 是 Linux 内核中一个比较特殊的内存页,所有操作引起的 缺页异常 都会指向此页,从而可以减少物理内存的消耗),并且设置其为只读(因为 零页 是不能进行写操作)。...总结 本文主要介绍了 Linux 内存分配的整个过程,当然只是介绍从堆空间分配的内存过程

1.4K41

一次排查

前言 mysql支持4种级别的事务隔离:未提交(read uncommitted),已提交(read committed),可重复读(repeatable read),串行化(serializable...一般mysql默认的事务隔离级别是可重复读,在这种隔离级别下当遇到幻的情况,该怎么处理呢。...问题发现以及排查经过 首先我们再查表的过程中,发现该笔订单成功发放了3笔200,显然发多了。...image.png 我们发现在读bonus表的过程中,有两次读到paidAmount=200。两次读到已发放200,然后准备奖励200,总共400,小于 500,所以风控通过了。...虽然我们查表插入是以事务的方式进行,但是rr的隔离级别,解决不了表,然后插入导致的一致性问题。这里显然出现了幻

79120

启动期间的内存管理之初始化过程概述----Linux内存管理(九)

而我们今天要讲的boot阶段就是系统初始化阶段使用的内存分配器. 1 前景回顾 1.1 Linux内存管理的层次结构 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点...) 在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务....因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. 因此我们可以把linux内核的内存管理分三个阶段。...但是在操作系统初始化的初期, 操作系统只是获取到了内存的基本信息, 但是内存管理的数据结构都没有建立, 而我们这些数据结构创建的过程本身就是一个内存分配的过程, 那么就出现一个问题 我们还没有一个内存管理器去负责分配和回收内存...在需要分配内存时, 分配器逐位的扫描位图, 直至找到一个能提供足够连续页的位置, 即所谓的最先最佳(first-best)或最先适配位置.该分配机制通过记录上一次分配的页面帧号(PFN)结束时的偏移量来实现分配大小小于一页的空间

1.7K31

JVM内存模型及内存分配过程

一、JVM内存模型 JVM主要管理两种类型内存:堆(Heap)和非堆(Permanent区域)。 1、Heap是运行时数据区域,所有类实例和数组的内存均从此处分配。...二、内存大小 1、Heap内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64; JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。...,默认是物理内存的1/64; 由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。...三、JVM内存分配过程 1、JVM 会试图为相关Java对象在Eden中初始化一块内存区域。 2、当Eden空间足够时,内存申请结束;否则到下一步。...参考: Java 内存模型及GC原理 java内存模型及GC原理 和 图解JVM在内存中申请对象及垃圾回收流程

3.2K20
领券