java.lang.错误: "Not enough storage is available to process this command" when generating images

标签 java memory awt jrockit chartfx

我正在 BEA Weblogic 9.2 上运行 Web 应用程序。直到最近,我们还在使用 JDK 1.5.0_04、JAI 1.1.2_01 和 Image IO 1.1。在某些情况下(我们从未弄清楚具体原因),当我们处理大图像(但不是那么大 - 几 MB)时,JVM 会崩溃,没有任何错误消息或堆栈跟踪或任何东西。这种情况在生产中并没有发生太多,但足以造成麻烦,最终我们能够重现它。

我们决定切换到 JRockit90 1.5.0_04,并且我们无法再在测试环境中重现该问题,因此我们认为已经解决了。然而现在,在应用程序服务器启动一段时间后,我们在图像操作期间开始收到错误消息“没有足够的存储空间来处理此命令”。例如:

java.lang.Error: Error starting thread: Not enough storage is available to process this command.
at java.lang.Thread.start()V(Unknown Source)
at sun.awt.image.ImageFetcher$1.run(ImageFetcher.java:279)
at sun.awt.image.ImageFetcher.createFetchers(ImageFetcher.java:272)
at sun.awt.image.ImageFetcher.add(ImageFetcher.java:55)
at sun.awt.image.InputStreamImageSource.startProduction(InputStreamImageSource.java:149)
at sun.awt.image.InputStreamImageSource.addConsumer(InputStreamImageSource.java:106)
at sun.awt.image.InputStreamImageSource.startProduction(InputStreamImageSource.java:144)
at sun.awt.image.ImageRepresentation.startProduction(ImageRepresentation.java:647)
at sun.awt.image.ImageRepresentation.prepare(ImageRepresentation.java:684)
at sun.awt.SunToolkit.prepareImage(SunToolkit.java:734)
at java.awt.Component.prepareImage(Component.java:3073)
at java.awt.ImageMediaEntry.startLoad(MediaTracker.java:906)
at java.awt.MediaEntry.getStatus(MediaTracker.java:851)
at java.awt.ImageMediaEntry.getStatus(MediaTracker.java:902)
at java.awt.MediaTracker.statusAll(MediaTracker.java:454)
at java.awt.MediaTracker.waitForAll(MediaTracker.java:405)
at java.awt.MediaTracker.waitForAll(MediaTracker.java:375)
at SfxNET.System.Drawing.ImageLoader.loadImage(Ljava.awt.Image;)Ljava.awt.image.BufferedImage;(Unknown Source)
at SfxNET.System.Drawing.ImageLoader.loadImage(Ljava.net.URL;)Ljava.awt.image.BufferedImage;(Unknown Source)
at Resources.Tools.Commands.W$zw(Ljava.lang.ClassLoader;)V(Unknown Source)
at Resources.Tools.Commands.getContents()[[Ljava.lang.Object;(Unknown Source)
at SfxNET.sfxUtils.SfxResourceBundle.handleGetObject(Ljava.lang.String;)Ljava.lang.Object;(Unknown Source)
at java.util.ResourceBundle.getObject(ResourceBundle.java:320)
at SoftwareFX.internal.ChartFX.wxvw.yxWW(Ljava.lang.String;Z)Ljava.lang.Object;(Unknown Source)
at SoftwareFX.internal.ChartFX.wxvw.vxWW(Ljava.lang.String;)Ljava.lang.Object;(Unknown Source)
at SoftwareFX.internal.ChartFX.CommandBar.YWww(LSoftwareFX.internal.ChartFX.wxvw;IIII)V(Unknown Source)
at SoftwareFX.internal.ChartFX.Internet.Server.xxvw.YzzW(LSoftwareFX.internal.ChartFX.Internet.Server.ChartCore;Z)LSoftwareFX.internal.ChartFX.CommandBar;(Unknown Source)
at SoftwareFX.internal.ChartFX.Internet.Server.xxvw.XzzW(LSoftwareFX.internal.ChartFX.Internet.Server.ChartCore;)V(Unknown Source)
at SoftwareFX.internal.ChartFX.Internet.Server.ChartCore.OnDeserialization(Ljava.lang.Object;)V(Unknown Source)
at SoftwareFX.internal.ChartFX.Internet.Server.ChartCore.Zvvz(LSoftwareFX.internal.ChartFX.Base.wzzy;)V(Unknown Source)

有人见过这样的事情吗?知道可能发生什么吗?

最佳答案

马库斯·亚当斯(Marcus Adams)应该为此获得荣誉,但他的小建议是以评论的形式而不是答案的形式,所以我不能只是检查它。他给我指了this example from another answer这样就成功了。

查看\System\CurrentControlSet\Control\Session Manager\SubSystem 的注册表设置,发现:SharedSection=1024,3072,512。由于这是一项服务( headless ),我们更改了第三个数字。新值是 SharedSection=1024,3072,1024。自从几周前进行此更改以来,该问题没有再次出现。

关于java.lang.错误: "Not enough storage is available to process this command" when generating images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640239/

相关文章:

javascript - 如何获取 JavaScript 对象的大小?

asp.net mvc 内存泄漏

Java pong 游戏 Graphics 或 geom 2D

java - 为 JPanel 添加圆角背景图片

java - EventQueue 工作缓慢

java - 改变 constraint.Group 中元素的可见性

java - 用菱形形式的数字填充二维数组

java - 启动后更改Spring Cloud Config服务器uri

c++ - 整数必须存储在连续的内存地址中吗?

java - jlink 选项 compress 有什么作用?