0 0

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

我使用java编写的一个应用程序,用于产生数据插入到HBase数据库中,但是程序在运行一段时间后就会产生OOM异常:
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at 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函数所在的线程外。

问题补充:而且程序运行时好时坏,昨天运行了一次,处理了5万条记录也没有问题。
2013年1月29日 11:15

4个答案 按时间排序 按投票排序

0 0

采纳的答案

创建线程所用内存不是在jvm内存里的,jvm内存给的越大可创建线程数反而越小。

所以优先看是不是程序问题,然后是在不行调大线程数量。。

搜了一下相关: http://sesame.iteye.com/blog/622670

2013年1月29日 12:17
0 0

你用的线程池没有及时回收吧,导致线程过多,占用太多的内存了

2013年1月30日 10:45
0 0

线程创建的内存空间占用的是本地文件栈,通过-Xss参数加大本地方法栈大小。

2013年1月29日 13:18
0 0

是你的线程创建太多,导致可以分配的内存减少。

2013年1月29日 12:25

相关推荐

    JVM内存溢出问题解析

    JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...

    jvm内存溢出

    **JVM内存溢出**是一种常见的运行时错误,指的是程序在执行过程中因为无法获得足够的内存资源而导致的问题。这种问题通常发生在程序尝试分配超出系统可用内存限制的新对象时。了解JVM内存结构是理解内存溢出的关键。...

    关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论

    标题中的“关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论”涉及了两个关键的IT概念:Tomcat服务器的字符编码问题和Java虚拟机(JVM)内存管理的问题。让我们逐一深入探讨这两个主题。 首先,我们来...

    JVM内存配置优化

    - **JVM默认堆内存配置**:JVM默认情况下,最小堆内存为物理内存的1/64,最大堆内存为物理内存的1/4。对于8GB物理内存的机器,这意味着默认的最小堆内存为128MB,最大堆内存为2048MB。 2. **`java.lang....

    JVM内存溢出

    【JVM内存溢出】指的是Java虚拟机在运行过程中,由于内存分配不当或者内存使用过度导致内存无法正常管理,从而抛出错误的情况。这通常会导致应用程序崩溃或性能急剧下降。在Tomcat这样的Java应用服务器中,内存溢出...

    JVM原理及内存溢出经典案列分析.ppt

    简单的判断JVM内存溢出的方法

    深入理解JVM内存区域与内存溢出异常

    深入理解JVM内存区域与内存溢出异常

    内存溢出解决

    当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM)。这通常发生在堆内存或方法区等内存区域耗尽时。对于Java应用而言,了解如何有效识别并解决内存溢出...

    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    ### Eclipse Memory Analyzer (MAT) 分析 Tomcat 内存溢出详解 #### 一、引言 在软件开发过程中,特别是在 Java 应用程序中,内存管理是非常关键的一环。当应用程序遭遇 `OutOfMemoryError` 异常时,通常意味着...

    idea git提交内存溢出后dump文件

    内存溢出(Out Of Memory,OOM)是Java应用程序中常见的问题,它通常发生在程序请求的内存超过了JVM(Java虚拟机)分配的内存空间。 在Java世界中,JVM负责管理应用程序的内存,包括为对象分配和回收内存。当程序...

    java获得jvm内存大小

    - `freeMemory()`:返回JVM堆内存中未被使用的部分,即剩余可用内存。 示例代码如下: ```java long heapSize = Runtime.getRuntime().totalMemory(); long heapMaxSize = Runtime.getRuntime().maxMemory(); long...

    JAVA内存溢出问题总结

    JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...

    关于JVM内存溢出的原因分析及解决方案探讨.docx

    本文主要讨论了 JVM 中的内存溢出问题,包括内存溢出的定义、内存泄漏和内存溢出的区别与联系、JVM 垃圾回收机制、内存溢出的原因分析、常见的四种内存溢出情况以及解决方案。 一、内存溢出的定义 内存溢出是指...

    内存溢出配置,内存溢出配置

    - **使用工具监控**:利用如VisualVM、JConsole等工具监控JVM的运行状态,及时发现并解决潜在的内存问题。 综上所述,内存溢出配置不仅是技术上的挑战,也是对开发者和运维人员资源管理能力的考验。通过合理的配置...

    解决jetty8内存溢出版本

    内存溢出(Out of Memory,OOM)通常发生在系统无法分配足够的内存给程序运行时,这可能导致服务器崩溃或性能急剧下降。 标题中的"解决jetty8内存溢出版本"意味着我们面对的是一个针对Jetty 8的特殊构建或配置,其...

    myeclipse内存溢出问题解决方案

    内存溢出问题在Java开发中是一个常见的问题,尤其是在使用集成开发环境如MyEclipse时,由于资源消耗较大,可能会频繁出现。本文主要讨论如何解决MyEclipse中的内存溢出问题以及相关的Java内存管理知识点。 首先,...

    某应用内存溢出(暨jvm)分析分享

    标题 "某应用内存溢出(暨jvm)分析分享" 提到的是一个关于应用程序,特别是N银行消费信贷backend应用的内存溢出问题及其在Java虚拟机(JVM)层面上的分析。内存溢出是程序运行时由于分配的内存不足导致无法继续执行...

    JVM堆内存溢出后,其他线程是否可继续工作的问题解析

    通过对JVM堆内存溢出的分析,我们可以了解到当一个线程出现OOM异常时,它所占据的内存资源会全部被释放掉,从而不会影响其他线程的运行。 首先,让我们来了解一下JVM内存模型。JVM的内存模型主要分为五个部分:方法...

    Android 内存溢出问题

    然而,如果应用程序在短时间内分配大量内存,或者持有大量无法释放的对象引用,就可能导致内存溢出(Out Of Memory,OOM)。 例如,错误信息"02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte ...

Global site tag (gtag.js) - Google Analytics