JVM内存溢出问题:freeMemory还很大,为什么出现了OOM?

问题描述

我使用java编写的一个应用程序,用于产生数据插入到HBase数据库中,但是程序在运行一段时间后就会产生OOM异常:Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native threadat java.lang.Thread.start0(Native Method)at java.lang.Thread.start(Thread.java:640)at java.util.concurrent.ThreadPoolExecutor.addIfUnderCorePoolSize(ThreadPoolExecutor.java:703)at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:652)at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1401)at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchOfPuts(HConnectionManager.java:1499)at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:859)at org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:715)at org.apache.hadoop.hbase.client.HTable.put(HTable.java:693)at storm.monitor.hbase.BasicOperation.addRecord(BasicOperation.java:135)at storm.monitor.util.HBase_Operation.insertIntoHBase(HBase_Operation.java:75)at storm.monitor.util.Data_Generator.insertIntoHBase(Data_Generator.java:215)at storm.monitor.util.Data_Generator.run(Data_Generator.java:394)at storm.monitor.util.Data_Generator.init(Data_Generator.java:68)at storm.monitor.util.Data_Generator.<init>(Data_Generator.java:41)at storm.monitor.util.Main_Generator.main(Main_Generator.java:22)可是我在类中获得Runtime,输出freeMemory,totalMemory如下free 505328288 total 528154624 max 1037959168,明显的可用内存还有很多,怎么会出现上述异常呢?在我的类中,方法多是静态方法,不过全局变量很少使用,一般都是创建的临时变量,并且是方法结束前都设为null。并且只有一个LinkedList全局对象和几个多维数组。在eclipse中设置了(x)arguments -Xms512m -Xmx1024m。到底是什么原因导致了OOM呢,整个应用程序中并没有创建线程的地方。求解惑! 问题补充:自身程序中没有显示创建过线程,除了main函数所在的线程外。

解决方案

创建线程所用内存不是在jvm内存里的,jvm内存给的越大可创建线程数反而越小。所以优先看是不是程序问题,然后是在不行调大线程数量。。搜了一下相关: http://sesame.iteye.com/blog/622670
解决方案二:
你用的线程池没有及时回收吧,导致线程过多,占用太多的内存了
解决方案三:
线程创建的内存空间占用的是本地文件栈,通过-Xss参数加大本地方法栈大小。
解决方案四:
是你的线程创建太多,导致可以分配的内存减少。

时间: 2024-11-03 21:55:19

JVM内存溢出问题:freeMemory还很大,为什么出现了OOM?的相关文章

Tomcat中JVM内存溢出及合理配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆.按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap

内存溢出怎么办?新手求教大神

问题描述 内存溢出怎么办?新手求教大神 一个ssh的项目,洲和国家的二级联动,洲可以顺利的下拉,但是一到国家下拉时, 半天出不来,然后eclipse就报错,产生了内存溢出. java.lang.OutOfMemoryError: Java heap space 解决方案 如果我没猜错的话 你应该是哪里不小心递归了, 比如在一个方法里又调用了它自己.... 解决方案二: 这个调试吧. 死循环这样的就会出现溢出

帝思普创始人吴洪声:DNS行业安全隐患还很大

帝思普创始人吴洪声 5月29日下午消息,2010年中国站长年会今日召开,帝思普创始人吴洪声在接受新浪科技专访时表示,根据我们得回来的数据,目前来说,所有DNS的安全隐患还是很大的.

jvm内存溢出解决方法(jvm内存溢出怎么解决)_java

java.lang.OutOfMemoryError: PermGen space 发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 .然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat.还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类. 但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原

乾通互连要用2.5亿元打造嗖嗖云,小微企业的人力资源市场或许还很大

近日,HR云服务提供商乾通互连宣布完成2.5亿元B轮融资,领投方为北京长安投资集团有限公司,乾通互连合作人团队跟投.同时,乾通互连宣布发布一站式人力资源管理SaaS平台嗖嗖云,本轮资金主要用于嗖嗖云平台开发与运营. 简单来说,嗖嗖云是一个入口,连接了乾通互连不同的产品线,将绩效管理.代缴社保.健康管理等功能集合到一个平台,企业可以按需求显示不同的功能模块. 嗖嗖云主要服务于6-10人的小微公司,据统计数据,2015年中国平均每天都有1万家企业注册成立,全国有4000万家中小微企业,但小微企业中经

请问为何硬盘剩余空间还很大,但是程序检测硬盘空间不足?

问题描述 现在遇到一个很棘手的问题:硬盘可用空间非常大,为什么我的程序仍检测到硬盘空间不足?如果重启程序检测又正常.请大家帮我一下,非常感激!程序如下:publicboolNewFile(){try{if(m_CheckPath!=1)returnfalse;if(m_ValidFileName==false)returnfalse;stringpath;DateTimecurTime=DateTime.Now;path=string.Format(m_LogPath+"\"+SUB_

微软股价3月份来增长50%:提升空间还很大

6月22日消息,据国外媒体报道,美国知名财经杂志<巴伦周刊>周末刊文指出,微软股价当前被严重低估,未来有较大提升空间. 文章指出,经过3月份的低迷后,微软股价现已增长50%以上.尽管如此,未来仍有较大提升空间. 首先,Windows 7将于今年10月上市.从早期市场反馈判断,Windows 7上市后的需求一定很旺盛.其次,新版搜索引擎必应的表现也可圈可点,微软搜索市场份额明显增加. 此外,华尔街分析师也一致认为,大规模削减成本.被低估的股价,以及庞大的资金流,这些都将导致微软股价进一步上扬.

Android studio运行时报错,方法,类找不到,或者JVM内存溢出解决方案

  Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished wit

centos中修改tomcat中JVM非堆内存默认配置解决内存溢出

系统CentOS6.4下yum安装了tomcat6和jdk1.6,安装配置过程如下: http://www.111cn.net/sys/CentOS/72007.htm tomcat中部署两个项目A.B,同时部署时报内存溢出错误,系统CPU负载飙升,而单独部署A.B 和 只部署多个A或者只部署多个B项目系统运行正常. 查看日志报错:OutOfMemoryError: PermGen space-.   查询资料得知:是非堆溢出(永久保存区域溢出) 这种错误常见在web服务器对JSP进行pre c