java内存泄露和OutOfMemory-创新互联

1.内存泄露:

在中站等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都网站制作 网站设计制作按需求定制设计,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销推广,成都外贸网站制作,中站网站建设费用合理。

Java的内存泄漏是指某些对象不再被应用程序使用,而垃圾收集器(Garbage Collector)却没能识别它们是“不再使用的”,所以没有对这些对象进行回收,或者由于某些原因无法回收或者回收不彻底!

举例:

  • 各种连接,比如数据库连接(dataSourse.getConnection()),网络连接(socket)和io连接,除非其显式的调用了其close()方法将其连接关闭,否则是不会自动被GC 回收的。

  • 静态集合类没有被释放-对象没有被释放

  • 递归调用层次太多

如果那些不使用的对象占用堆(heap)空间足够大,使得应用程序无法满足下一次内存分配需求,就会导致OutOfMemoryError错误。

内存泄漏和系统超负荷两者是有区别的,虽然可能导致的最终结果是一样的。

内存泄漏是用完的资源没有回收引起错误,而系统超负荷则是系统确实没有那么多资源可以分配了(其他的资源都在使用)。

内存泄漏可以通过软件调优来解决,系统超负荷则只能通过更新硬件来解决。

2.内存泄漏的表现

---内存快被占满,但还没被占满,处于临界点,这时候不会有报错,但会影响性能

---日志里明确产生OOM等错误。比如,下图,回落点连起来基本水平则表示正常回收,反之回收不彻底。

java内存泄露和OutOfMemory

3.内存泄露的排查思路:

-----JVM和GC的关键参数设置(比如,-Xms -Xmx等都没有设置,那么可能会出现内存泄露)

-----排查代码

4.OutOfMemory常见类型

----堆空间被占满:https://blog.51cto.com/11009785/2382260

----永久代/元空间被占满:https://blog.51cto.com/11009785/2379670

----栈溢出:java.lang.stackoverflowerror;fatal:stack size too small

排查:先看参数-Xss:每个线程的栈大小,用于保存函数调用、返回地址等,默认1M,如果报错,改为2M,如果还不行,捕获快照,去排查代码,有可能是递归调用的层次太多了。

----系统内存被占满:java.lang.outofmemoryerror:unable to create new native thread

解决:升级硬件

5.java.lang.OutOfMemoryError错误的可能原因,及排查思路:

---空间不足

---首先排查是不是硬件方面的问题

---如果硬件不错,再排查参数,是不是设置的小了

---内存泄漏

---如果硬件和参数都没问题,那么怀疑是内存泄露,需要排查JVM和GC的参数设置,如果还不行,需要排查代码

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:java内存泄露和OutOfMemory-创新互联
本文链接:http://myzitong.com/article/jdojs.html