代码之家  ›  专栏  ›  技术社区  ›  Felipe Gutierrez

带有CompletionService的Java堆空间

  •  0
  • Felipe Gutierrez  · 技术社区  · 10 年前

    如何修复此OutOfMemoryError:Java堆空间:

    17:29:23 ERROR pool-10-thread-2 storage.JCloudsStorageModule - Error on writing bucketIndex: 4167 and bucketOffset: 1044480
    java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:188)
        at org.jscsi.target.storage.JCloudsStorageModule.getAndprefetchBuckets(JCloudsStorageModule.java:275)
        at org.jscsi.target.storage.JCloudsStorageModule.write(JCloudsStorageModule.java:318)
        at org.jscsi.target.connection.stage.fullfeature.WriteStage.execute(WriteStage.java:223)
        at org.jscsi.target.connection.phase.TargetFullFeaturePhase.execute(TargetFullFeaturePhase.java:197)
        at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:252)
        at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:77)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.OutOfMemoryError: Java heap space
        at org.jscsi.target.storage.JCloudsStorageModule$ReadTask.call(JCloudsStorageModule.java:401)
        at org.jscsi.target.storage.JCloudsStorageModule$ReadTask.call(JCloudsStorageModule.java:371)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        ... 4 more
    java.io.IOException: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
        at org.jscsi.target.storage.JCloudsStorageModule.write(JCloudsStorageModule.java:328)
        at org.jscsi.target.connection.stage.fullfeature.WriteStage.execute(WriteStage.java:223)
        at org.jscsi.target.connection.phase.TargetFullFeaturePhase.execute(TargetFullFeaturePhase.java:197)
        at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:252)
        at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:77)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:188)
        at org.jscsi.target.storage.JCloudsStorageModule.getAndprefetchBuckets(JCloudsStorageModule.java:275)
        at org.jscsi.target.storage.JCloudsStorageModule.write(JCloudsStorageModule.java:318)
        ... 8 more
    Caused by: java.lang.OutOfMemoryError: Java heap space
        at org.jscsi.target.storage.JCloudsStorageModule$ReadTask.call(JCloudsStorageModule.java:401)
        at org.jscsi.target.storage.JCloudsStorageModule$ReadTask.call(JCloudsStorageModule.java:371)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        ... 4 more
    

    我的代码使用CompletionService和ConcurrentHashMap。我正在使用ext3在linux上使用jSCSI.org格式化iscsi驱动程序。奇怪的是,当我用ext4格式化时,它进行得很好,而且时间很快。引发错误的行是:byte[]returnval=startTask.get().getValue();

    事先谢谢,费利佩

    2 回复  |  直到 10 年前
        1
  •  1
  •   royhowie    10 年前

    这个 java.lang.OutOfMemoryError:Java heap space 每当泄漏的内存填满堆区域中的所有可用内存并且垃圾收集无法清理时,就会引发错误。

    尝试增加此类资源的可用性。当应用程序没有足够的Java堆空间内存来正常运行时,修复它就像更改JVM启动配置并添加(或增加(如果存在)以下内容一样简单: -Xmx1024m

    或者你可以继续尝试 Plumbr 免费。当我们找到原因 java.lang.OutOfMemoryError 您将看到问题的确切位置以及解决方案指南。

        2
  •  0
  •   Felipe Gutierrez    10 年前

    我使用wait()和notify()解决了问题:

    https://sites.google.com/site/lipe82/Home/diaadia/executorservicewait

    谢谢