Java问题记录——OutOfMemoryError

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

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

查看进程

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

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

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

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

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

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

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

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

查看代码

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

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

结论

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

Java问题记录——OutOfMemoryError的更多相关文章

  1. Java 日志记录规则

    Java 日志记录规则 规则一:日志是面向读者的 我们不应该让无价值的信息使日志文件变得乱糟糟,比如说完整打印所有的实体字段. 通常,实体名字和其逻辑关键字足以识别在表格中的一条记录了. 规则二:匹配 ...

  2. 补充Java面试记录

    补充Java面试记录 背景:这两天面试遇到的部分问题都分散在了前面两篇文摘中,这里再做一些其他的记录,以备不时之需! 一.谈谈你对SpringBoot的理解? SpringBoot简介:SpringB ...

  3. Java问题记录——循环里的二次判断与状态更新

    Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...

  4. Java问题记录——IllegalMonitorStateException

    Java问题记录——IllegalMonitorStateException 摘要:本文主要分析了IllegalMonitorStateException的产生原因. 部分内容来自以下博客: http ...

  5. SLF4J (The Simple Logging Facade for Java)使用记录

    SLF4J (The Simple Logging Facade for Java)使用记录 官网 http://www.slf4j.org/ 参考资料 官方文档 什么是 SLF4J? 官网: The ...

  6. Java内存溢出OutOfMemoryError的产生与排查

    在java的虚拟机异常中,有两个异常是大家比较关心的,一个是StackOverflowError,另一个是OutOfMemoryError.今天我们就来看看OutOfMemoryError是怎么产生的 ...

  7. 【Java】记录一次代码优化

    前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:)   标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到 ...

  8. 普华永道高级JAVA面试记录

    最近在考虑换个工作 原因?咱能不逗吗? 一面感觉发挥不错  二面之后累觉不爱  基本上浪费了半天的工资(好多钱啊~~~) PWD上海地址在浦东软件园  工作环境说实话没我现在工作的环境好,不过里面的人 ...

  9. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

随机推荐

  1. DOJO之gridx

    GridX简介 Gridx是IBM公司的职员对Dojo中的Grid进行进一步扩展的组件,但是它是重新开发了Grid而不是继承Grid. 虽然同样都是基于Dojo store, 但与DataGrid/E ...

  2. python从入门到放弃之协程

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  3. 学习springboot第一天~

    1. springboot是对spring的缺点进行改善和优化,它的约定大于配置,开箱即用,没有代码生成,也不需要xml文件配置,可以修改属性值来满足需求 2. springboot的入门程序 在id ...

  4. 前端基础之BOM和DOM操作

    目录 BOM和DOM定义 windows对象 windows的子对象 navigator对象 screen对象 history对象 location对象 弹出框 警告框 确认框 提示框 计时相关 se ...

  5. linux修改权限

    修改system目录(包括子目录)的所有者和组 sudo chown -R seven:seven system

  6. Python自动化运维之高级函数

    本帖最后由 陈泽 于 2018-6-20 17:31 编辑 一.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没 ...

  7. Vue的实例对象(三)

    一.创建一个 Vue 实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 当创建一个 Vue 实例时,你可以传入 ...

  8. luoguP4770 [NOI2018]你的名字

    题意 不妨先考虑\(l=1,r=|S|\)的情况: 这时我们要求的其实是\(S,T\)的本质不同的公共子串数量. 首先对\(S\)建一个后缀自动机,同时对于每个\(T\),我们也建一个自动机. 根据后 ...

  9. BootStrap、jQuery UI、bxSlider组件使用

    组件的使用 首先需要将组件下载下来放在统同级目录下 导入组件 使用组件 BootStrap 示例: <!DOCTYPE html> <html lang="en" ...

  10. appium--使用PyYAML封装Capability

    前戏 YAML 语言的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下. YAML大小写敏感: 使用缩进代表层级关系: 缩进只能使用空格,不能使用TAB,不要求空 ...