zoukankan      html  css  js  c++  java
  • Java问题记录——OutOfMemoryError

    Java问题记录——OutOfMemoryError

    摘要:本文主要分析了OutOfMemoryError的产生原因。

    没有分页导致占用大量内存

    查看进程

    使用 jps 命令查看当前运行的Java进程和进程号:

    1 [root@VM_40_24_centos ~]# jps
    2 25953 Bootstrap
    3 7832 Jps

    根据进程号查看实例的运行情况

    使用 jmap 命令查看当前占用内存最高的实例:

     1 [root@VM_40_24_centos ~]# jmap -histo:live 25953 | grep 'xxx.xxx' | head -10
     2    4:        784043       75268128  xxx.xxx.XxxXxxxxx
     3   19:         15435         987840  xxx.xxx.Xxxx
     4   48:          2000         208000  xxx.xxx.Xxx
     5   52:           451         180400  xxx.xxx.XxxxXxx
     6  111:           646          51680  xxx.xxx.XxxXxxxxx
     7  316:           104           9984  xxx.xxx.XxxXxxxxxXxxx
     8  476:           282           4512  xxx.xxxxxxx.XxxxxxxXxxxxxxxxx
     9  496:           267           4272  xxx.xxxxxxx.XxxxxxxXxxxxxxxxxxxxxxXxxxxxxx
    10  877:            47            752  xxx.xxxxxxx.XxxxxXxxxxxxxxxxXxxxxxxx
    11  878:            47            752  xxx.xxxxxxx.XxxxxxXxxxXxxxxxxxxXxxxxxxxXxxxxxxxx

    在日志里找到第一次出现的地方

    根据在Linux中找到的占用内存的实例,去日志查看是因为什么操作导致的:

    1 2019-06-15 10:34:35.398  INFO 10369 --- [askExecutor-818] c.i.ide.engine.task.XxxxXxxxxxXxxx   : send message is success!
    2 Exception in thread "http-nio-8080-Acceptor-0" java.lang.OutOfMemoryError: GC overhead limit exceeded
    3     at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
    4     at org.apache.tomcat.util.net.SocketBufferHandler.<init>(SocketBufferHandler.java:41)
    5     at org.apache.tomcat.util.net.NioEndpoint.setSocketOptions(NioEndpoint.java:404)
    6     at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:502)
    7     at java.lang.Thread.run(Thread.java:748)

    查看代码

    根据日志文件和实例名称,查看相关代码,发现是因为查询数据的时候没有分页,导致查询了全部数据,大概有一百万条:

    1 List<XxxXxxxxx> xxx = service.listXxx();

    结论

    以后在写代码的时候一定要注意分页操作。

  • 相关阅读:
    开发ProxyServer的时候如何在一台PC上调试
    eclipse使用replace命令替换整个project/workspace的某个字符串
    android程序获取WIFI的IP地址和MAC地址
    将web项目deploy到tomcat的方法
    Windows下搭建Android开发环境
    解决:并排的两个div底部对齐
    eclipse调试jsp中的scriptlet代码
    棋盘覆盖(递归分治问题)
    Java中sleep()和wait()的区别
    Random()方法的使用
  • 原文地址:https://www.cnblogs.com/shamao/p/11115206.html
Copyright © 2011-2022 走看看