weblogic问题排查思路
内存溢出
存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
原因
内存泄露的原因有很多:
- 数据量过于庞大;
- 死循环;
- 静态变量和静态方法过多;
- 递归;
- 无法确定对象是否被引用;
- 虚拟机不回收内存等。
说白了,也就是程序运行所需的内存大于虚拟机能够提供的最大内存就发生了内存溢出(OOM),内存是否溢出取决于业务和系统的大小。(对于某些系统可能内存溢出不常见,但是对于某些其他系统,可能就常见了)
尽量避免内存溢出(解决办法)
- 优化代码:如果业务庞大,逻辑复杂,应当尽量减少全局变量的引用,使程序使用完变量后能够及时释放该引用,让GC回收,释放资源。
- 物理块:增大物理内存,然后通过JVM参数(-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m)调整虚拟机的大小(增大)。
内存溢出常见类型
java.lang.OutOfMemoryError: PermGen

本文介绍了Java中内存溢出和内存泄露的区别及其原因,提供了避免内存溢出的优化策略,如优化代码、调整JVM参数。同时,分析了Java进程CPU占用过高的常见原因和定位方法,包括使用jstack和jmap等工具进行线程和堆内存分析。最后,讨论了heapdump和threaddump在性能分析中的作用,以及JDK提供的相关命令行工具如jps、jstat、jinfo等在故障排查中的应用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



