Tag: out of memory

java.lang.OutOfMemoryError:将13k .png图像拼接在一起时的Java堆空间

我有13255个图像,每个240 x 240像素宽,最大的15,412字节大小和最小的839字节。 我试图循环文件夹将每个文件添加到File []。 一旦我有一个每个图像的数组,然后我将它们放在BufferedImage []中,准备好循环并绘制到由每个图像组成的更大的单个图像上。 每个图像都以。的forms命名 Image xy.png 但是,我一直以java.lang.OutOfMemoryError:Java堆空间错误结束。 我不知道为什么。 我已经尝试通过向Eclipse的目标末尾添加参数来更改JVM可用内存的大小。 以下是我用过的内容: IDE’s\eclipse-jee-juno-SR2-win32-x86_64\eclipse\eclipse.exe -vmargs -Xms64m -Xmx1024m 和 IDE’s\eclipse-jee-juno-SR2-win32-x86_64\eclipse\eclipse.exe -vmargs -Xms64m -Xmx4096m 两者都没有效果。 我也进入了控制面板 – >程序 – > Java,并改变了那里可用的内存量。 这是我写的方法: public static void merge_images() throws IOException { int rows = 115; int cols = 115; int chunks = rows * cols; System.out.println(chunks); int chunkWidth, […]

从java中的xml解码大型base64:OutOfMemory

我需要将xml文件的base64编码元素写入单独的文件中。 问题:文件很容易达到100 MB的大小。 我尝试的每个解决方案都以“java.lang.OutOfMemoryError:Java堆空间”结束。 问题不是一般读取xml或解码过程,而是读取base64块的大小。 我使用jdom,dom4j和XMLStreamReader来访问xml文件。 但是,只要我想访问相应元素的base64内容,我就会得到上述错误。 我也尝试使用saxon的base64Binary-to-octets函数的xslt,但当然也有相同的结果。 有没有办法将这个base64编码的部分流式传输到一个文件而不需要将整个块放在一个单件中? 谢谢你的提示, 安德烈亚斯

从数据库加载26MB文本数据消耗了258MB的JVM堆

在启动时本地运行的应用程序(Spring,JPA Hibernate,Sybase 12,Webapp)消耗基于VisualVM的40MB 256MB堆空间。 当我触发返回70,000多行(文本数据没有blob)的搜索时,堆空间图最多可以拍摄256MB并且会丢失内存。 我已经通过使用setMaxResults(limit)解决了这个问题。 但是,当我查询相同的数据,复制粘贴到文本文件并保存到文件系统时,我可以看到大小只有26MB的文本。 因此,实际上,从数据库中加载26MB的文本消耗了216MB(从256-40),这些数据在内存不足时消耗190MB ? 也许这将是框架,但我不知道它如何比正在加载的实际数据消耗更多…… * *再次注意我用setMaxResults(限制)解决了这个问题,我的问题不是为了教育目的而是为了做什么而是为什么。

Solr Filter Cache(FastLRUCache)占用太多内存并导致内存不足?

我有一个Solr设置。 一个主服务器和两个从服务器用于复制。 我们在索引中有大约7000万份文件。 从站有16 GB的RAM。 操作系统和高清10GB,Solr 6GB。 但是,奴隶们不时会记忆犹新。 当我们在内存不足之前下载转储文件时,我们可以看到该类: org.apache.solr.util.ConcurrentLRUCache$Stats @ 0x6eac8fb88 正在使用高达5Gb的内存。 我们广泛使用过滤缓存,它的命中率为93%。 这是solrconfig.xml中filter缓存的xml 查询结果具有相同的设置,但使用LRUCache并且它仅使用大约35mb的内存。 配置是否有问题需要修复,或者我只需要更多内存用于过滤缓存?

什么时候JVM抛出OutOfMemoryError

我们正在运行一个有时“冻结”的Java应用程序,因为某些线程几乎使用了所有堆。 尽管JVM执行Full GC持续时间超过60秒,但应用程序永远不会因OutOfMemoryError而死亡。 我从Java文档中读到: 如果花费太多时间进行垃圾收集,吞吐量收集器将抛出内存不足的exception。 例如,如果JVM花费超过总时间的98%进行垃圾收集并且正在恢复少于2%的堆,那么它将导致内存不足。 我想了解更多关于这98%的时间意味着什么(时间框架是什么?)的信息,以及是否可以降低此值,即如果应用程序在GC中花费90%的时间并且无法释放,则抛出OOME超过10%的堆。 目标是确保应用程序将在OOME中死亡(而不是仅运行GC),因此我们可以在OOME上生成转储。 以下是我们使用的内存和GC设置(操作系统是Solaris): -Xms2048m -Xmx2048m \ -Xmn512m \ -XX:PermSize=256m -XX:MaxPermSize=256m \ -XX:+UseParNewGC -XX:ParallelGCThreads=16 \ -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled \ -XX:+DisableExplicitGC \ -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps \ -XX:+PrintClassHistogram \ -Xloggc:/gcmonitor.log \ -XX:+HandlePromotionFailure \ -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=10 \ -XX:+UseTLAB -XX:TLABSize=32k -XX:+ResizeTLAB \ -XX:+UseMPSS \

Jasper在导出时报告OutOfMemoryError

我编写了一个用于管理和运行Jasper报告的Web应用程序。 最近我一直在处理一些生成极大(1500页以上)输出的报告,并尝试解决由此产生的内存问题。 我发现了JRFileVirtualizer ,它允许我以非常有限的内存占用成功运行报表。 但是,我的应用程序的一个function是它存储以前运行的报告中的输出文件,并允许它们导出为各种格式(PDF,CSV等)。 因此,我发现自己处于500 + MB .jrprint文件的状态,并希望将其导出为例如CSV按需。 这是一些简化的示例代码: JRCsvExporter exporter = new JRCsvExporter(); exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME, jrprintPath); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream); exporter.exportReport(); 不幸的是,当我在我提到的大文件上尝试这个时,我得到一个OutOfMemoryError : Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.io.ObjectInputStream$HandleTable.grow(ObjectInputStream.java:3421) at java.io.ObjectInputStream$HandleTable.assign(ObjectInputStream.java:3227) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1744) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at java.util.ArrayList.readObject(ArrayList.java:593) at sun.reflect.GeneratedMethodAccessor184.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at […]

如何检测OutofMemoryError的原因?

我抱怨我的服务器应用程序在高负载时崩溃。 它是在Tomcat 5运行的Web应用程序。 我看到线程转储,我发现有一个OutOfMemory错误 1TISIGINFO转储事件“systhrow”(00040000)详情 “java / lang / OutOfMemoryError”“无法创建线程:retVal -1073741830,errno 12”>收到1TIDATETIME日期:2012/07/17 at 20:03:17 1TIFILENAME> Javacore文件名:C:\ ServerApplication \ Tomcat5 \ bin \ javacore.34545719.4646464.4172.0003.txt 堆信息如下: Maximum Java heap size : 1500m Initial Java heap size : 256m 这是初始和最大堆大小的配置(32位java) 我也看到有可用的堆空间 1STHEAPFREE Bytes of Heap Space Free: 2D19F3C0 1STHEAPALLOC Bytes of Heap Space Allocated: 5DC00000 这是750MB的免费空间,对吧? 从线程方法分析我看到Threads的数量是695 ,其中49%是java/lang/Object.wait(Native […]

如何重现Java OutOfMemoryError – 超出了GC开销限制

我的方法是创建十万个本地集合并用随机字符串填充它们,如下所示: SecureRandom random = new SecureRandom(); for(int i = 0 ; i < 100000 ; i++){ HashMap map = new HashMap(); for(int j = 0 ; j < 30 ; j++){ map.put(new BigInteger(130, random).toString(32), new BigInteger(130, random).toString(32)); } } 我也提供了-XX:+ UseGCOverheadLimit jvm参数,但无法获取错误。 是否有任何简单可靠的方法/黑客来获取此错误?

为什么在将50,000个对象插入HashMap时会出现OutOfMemoryError?

我试图将大约50,000个对象(因此50,000个键)插入到java.util.HashMap 。 但是,我一直得到一个OutOfMemoryexception。 ( Segment是我自己的类 – 非常轻的重量 – 一个String字段和3个int字段)。 线程“main”中的exceptionjava.lang.OutOfMemoryError:Java堆空间 在java.util.HashMap.resize(HashMap.java:508) 在java.util.HashMap.addEntry(HashMap.java:799) 在java.util.HashMap.put(HashMap.java:431) at bus.tools.UpdateMap.putSegment(UpdateMap.java:168) 这看起来非常荒谬,因为我发现机器上有足够的内存 – 无论是在免费RAM还是用于虚拟内存的高清空间。 是否有可能Java运行时有一些严格的内存要求? 我能增加这些吗? HashMap有一些奇怪的限制吗? 我是否必须实施自己的? 还有其他值得关注的课程吗? (我在具有2GB RAM的Intel机器上运行OS X 10.5下的Java 5。)

生产服务器上的Tomcat,PermGen并重新部署

看起来像 MemoryError: PermGen space java.lang.OutOfMemoryError: PermGen space 是一个常见的问题。 您可以增加烫发空间的大小,但在100或200次重新部署后,它将是满的。 跟踪ClassLoader内存泄漏几乎是不可能的。 你在生产服务器上使用Tomcat(或另一个简单的servlet容器 – Jetty?)的方法是什么? 每次部署解决方案后服务器是否重启? 您是否在许多应用程序中使用一个Tomcat? 也许我应该在不同的端口(或嵌入式Jetty)上使用许多Jetty服务器,并且每次都取消部署/重启/部署?