内存泄漏

slab、slub内存管理与泄漏分析

☆樱花仙子☆ 提交于 2020-03-06 15:51:49
经典博客 类型 文章 slab、slub的关系 SLUB和SLAB的区别 系统性介绍kernel内存泄漏检测 Linux内存管理 (22)内存检测技术 、 Linux内存使用情况以及内存泄露分析之工具与方法 drop_cache应用 liunx的Slab占用比较高的问题 slub、slab内存泄漏诊断有区别 https://blog.csdn.net/dolp怎样诊断SLAB泄露问题 判断slub、slab是否内存泄漏 linux通过meminfo 与 slab 定位内存泄漏 实例 认识Kernel 内存泄漏 、 slub泄露分析 工具介绍与使用 kmemleak的使用 触发slab回收 博文: https://www.iteye.com/blog/fengbin2005-2218722 上文排查到Linux系统中有大量的dentry_cache占用内存,为什么会有如此多的dentry_cache呢? 首先,弄清楚dentry_cache的概念及作用:目录项高速缓存,是Linux为了提高目录项对象的处理效率而设计的;它记录了目录项到inode的映射关系。因此,当应用程序发起stat系统调用时,就会创建对应的dentry_cache项(更进一步,如果每次stat的文件都是不存在的文件,那么总是会有大量新的dentry_cache项被创建)。 当前服务器是storm集群的节点

JavaScript -- 闭包与作用域链

岁酱吖の 提交于 2020-03-06 01:38:34
什么是闭包 红宝书上解释: 闭包 是指有权访问另外一个函数作用域中的变量的函数.闭包就是能够读取其他函数内部变量的函数 MDN 上解释: 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。 要理解闭包必须先理解什么是作用域以及作用域链。 作用域及作用域链 作用域分为全局作用域和函数作用域,es6 后又引入了块级作用域的概念。 作用域在代码定义的时候就产生了且不会改变,全局变量作用在全局作用域中,而函数内声明的局部变量是在函数作用域中,外部作用域无法访问内部的函数作用域中的变量。 作用域作用: 限制变量的访问权限和访问顺序,隔离变量使不同作用域下的同名变量不会产生冲突。 作用域链: 访问变量时,先查找自身函数作用域内是否有该属性,没有再向外查找父级作用域中是否含有该属性,直到最外层全局作用域,直到即可以访问,没有则报错 ReferenceError,访问变量查找作用域的这个顺序及其层级关系称为作用域链,访问变量时是在作用域链中自下而上(由内到外)查找。 看下面两个作用域的例子: 例子1: var x = 10 function fn ( ) { console . log ( x ) } function show ( f ) { var x = 20 f ( ) //即调用函数 fn(),访问变量 x

简单内存泄漏检测方法,解决Detected memory leaks!问题

∥☆過路亽.° 提交于 2020-03-05 21:23:24
简单内存泄漏检测方法,解决Detected memory leaks!问题 工作环境:WIN7,VS2010: 最近一个项目中,程序退出后,每次都出现内存泄漏,每次退出的时候泄露的内存块都是1654,1650。 Detected memory leaks! Dumping objects -> {1654} normal block at 0x01CC1B28, 40 bytes long. Data: 54 00 69 00 63 00 6B 00 65 00 74 00 20 00 69 00 {1650} normal block at 0x01CC1BF0, 16 bytes long. Data: 64 6B E8 95 68 79 0D 4E FD 80 7F 4F 28 75 00 00 Object dump complete. 解决方法 1、在程序开始的地方,加上代码:_CrtSetBreakAlloc(1654); //1654为上面内存泄漏的块号。 2、用Debug模式运行,程序自动断点在“内存块1654”分配的位置。 3、这个时候一直利用“调试”-“退出”,或快捷键“SHIFT+F11”跳转,直到看到了自己的代码。 4、检查自己在该代码中分配的内存块,是否进行了合理的释放。 来源: oschina 链接: https://my.oschina.net/u

Java 内存溢出和Java泄露的几种情况

牧云@^-^@ 提交于 2020-03-04 19:30:19
内存泄漏定义(memory leak): 一个不再被程序使用的对象或变量还在内存中占有存储空间。 一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 内存溢出 (out of memory) : 指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。 二者的关系: 内存泄漏的堆积最终会导致内存溢出 内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误。 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。就相当于你租了个带钥匙的柜子,你存完东西之后把柜子锁上之后,把钥匙丢了或者没有将钥匙还回去,那么结果就是这个柜子将无法供给任何人使用,也无法被垃圾回收器回收,因为找不到他的任何信息。 内存溢出:一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出。比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出

JVM性能优化

给你一囗甜甜゛ 提交于 2020-03-03 16:46:59
内存溢出 内存溢出的原因:程序在申请内存时,没有足够的内存空间。 内存溢出的几种方式 : 1,栈溢出:方法死循环递归(StackOverflowError),不断创立线程(OutOfMemoryError) 2,堆溢出:不断创建对象,分配对象大于最大堆的大小(OutOfMemoryError) 3,直接内存:分配的本地内存大小大于JVM的限制。 4,方法区溢出:在经常动态生产大量Class的应用中,CGLib字节码增强,动态语言,大量JSP文件,大量基于OSGi的应用 内存泄漏 程序在申请内存后,无法释放已申请的内存空间。 内存泄漏的集中原因 : 1,长生命周期的对象持有短生命周期对象的引用:例如将ArrayList设置为静态常量,则容器中的对象在程序结束之前是不能被释放的,从而造成内存泄漏。 2,链接未关闭:如数据库连接池、网络链接和IO链接等,只有链接被关闭后,才会回收对应的对象 3,变量作用域不合理:例如 1.一个变量的定义的作用范围大于其使用范围。2.没有及时把对象设置为null 4,内部类持有外部类:内部类的生命周期长于外部类,程序很容易产生内存泄漏。解决办法,使用软引用或弱引用,通过构造方法传递 5,Hash值得变化:在集合中,如果修改参与计算哈希值字段,会导致无法从集合中单独删除当前对象,造成内存泄漏 内存溢出和内存泄漏的区别 内存溢出:实实在在的内存空间不足导致

tomcat默认reload引起宕机

放肆的年华 提交于 2020-02-29 09:21:14
项目使用文件来保存修改,为了方便直接把文件放在src目录下;部署后发现过了一阵tomcat就会宕机; 日志为: Oct 18, 2013 5:20:11 PM org.apache.catalina.core.StandardContext reload INFO: Reloading this Context has started Oct 18, 2013 5:20:11 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE: The web application [/a7list] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@13c4a657]) and a value of type [com.caucho.services.server.ServiceContext] (value [com.caucho.services.server.ServiceContext@5384a3e4]) but failed to remove it when the web application was stopped. This is very

java程序员--小心你代码中的内存泄漏

时间秒杀一切 提交于 2020-02-28 15:48:42
当你从c&c++转到一门具有垃圾回收功能的语言时,程序员的工作就会变得更加容易,因为你用完对象,他们会被自动回收,但是,java程序员真的不需要考虑内存泄露吗? 其实不然 1.举个例子-看你能否找出内存泄漏 import java.util.Arrays; public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; } private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1)

b+树的原理

橙三吉。 提交于 2020-02-28 10:27:38
Java 内存区域 <ignore_js_op> Heap 线程公有 存放实例对象 是GC主要管理区域,因此可以更细致的划分为:新生代、老年代 再细致一点划分:Eden区、From Survivor区、To Survivor区 内存空间:可以物理上不连续、逻辑上连续即可。 Method Area 线程公有 主要存储:类信息、常量、静态变量、编译后的代码 运行时常量池 主要存储:编译期的字面量以及符号引用 具有动态性,即可以在运行时将常量放入池中。 VM Stack 线程私有 主要包括: 局部变量表:存放编译期的各种基本数据类型、对象引用、returnAddress类型 操作数栈:每一个元素可以为任意的java类型,32位数据类型所占容量为1,64位数据类型所占容量为2 动态连接:class文件的常量池中有大量的符号引用,这些符号引用有一部分是在类加载阶段或者在第一次使用的时候就转换为直接引用,这部分成为静态解析。另一部分是每一次运行的时候转化为直接引用,这部分即为动态连接。 方法出口:例如A方法中调用了B方法,B方法的返回值压入A方法的栈帧中。 Native Method Stack 线程私有 与VM Stack相似,唯一区别在于该栈为Native方法服务。 Hot Spot 将VM Stack 与 Native Method Stack 合而为一。 Program Counter

检查进程内存泄漏

懵懂的女人 提交于 2020-02-24 08:42:24
有时经常要检查一个服务是否有内存泄漏,于是我们可以用数据收集器集来检查。 1、打开计算机管理--系统工具--性能--数据收集器集--用户定义。 2、选用户定义,右键--新建--数据收集器集。 3、创建新的数据收集器集,选“手动创建” 。 4、勾选“性能计数器”。 5、点击“添加”按钮。 6、性能泄漏测试,主要关心以下指标。 (1)Process/% Processor Time (2)Process/Handle Count (3)Process/Private Bytes (4)Process/Thread Count 在“选定对象的实例”里,添加自己要进行测试的程序服务。 7、 以下是本次添加了的所有性能计数器。 8、保存位置默认即可。 9、点击“完成”。 10、 在刚才创建完成的“数据收集器集”的项里,右键--属性。 11、将日志格式改为“制表符分隔” ,间隔时间为“10秒”。 12、启动数据收集器集。 13、然后等待一段时间,起码是6小时以上。在对应的路径,用excel打开tsv格式的文件。 14、用excel打开后,选择时间和其中一列的数据,插入二维折线图。就可以以比较直观的方式查看到是否有内存泄漏了。 15、当查到内存时,此处可见有内存泄漏。 参考文章: https://blog.csdn.net/invisible_sky/article/details

jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

不问归期 提交于 2020-02-16 11:39:58
转载: http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/article/details/8623530 通过jstat、jmap对java程序进行性能调优 2013年01月16日 12:54:12 jerry在魔都 阅读数 1207 第一次写技术博客,本文记录了我对服务器cpu占用率100%问题的排查过程和最终结果,算是一篇学习日志。 本人属于学习中的菜鸟码农,如有什么理解上的偏差的,还请各路大神指正。 关键词: jstat , jmap, heap, GC, smartupload, 内存泄漏 1. 背景 硬件供应商多次反映,在tomcat启动一段时间后,经常出现cpu占用率100%,且重启前一直保持在100%的情况。在重启后cpu占用率回落,但是一段时间后再次出现问题。 下图为cpu占用率100%时使用top命令的截图,可以看到java进程的cpu占用率几经几乎达到了400%(服务器为4核cpu) <1> 2.问题定位 2.1问题猜测 对于cpu占用率100%的情况,产生以下两种猜测: a. 程序长时间占用系统IO,导致CPU占用率100% b.程序存在严重内存泄露,导致jvm频繁执行full GC,从而使cpu占用率提高,造成服务器假死