Я запускаю веб-приложение на BEA Weblogic 9.2. До недавнего времени мы использовали JDK 1.5.0_04, с JAI 1.1.2_01 и Image IO 1.1. В некоторых случаях (мы никогда не выяснили, почему именно), когда мы обрабатывали большие изображения (но не такие большие - несколько МБ), JVM вылетает без каких-либо сообщений об ошибках или трассировки стека или чего-то еще. Это было не так много в производстве, но достаточно, чтобы быть неприятностью, и в конечном итоге мы смогли воспроизвести его.java.lang.Error: «Недостаточно памяти для обработки этой команды» при создании изображений
Мы решили переключиться на 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)
Кто-нибудь видел что-то подобное раньше? Есть ли смысл в том, что может произойти?
Также см. Http://stackoverflow.com/questions/507853/system-error-code-8-not-enough-storage-is-available-to-process-this-command и http://stackoverflow.com/questions/548971/win32exception-not-enough-storage-is-available-to-process-this-command –
Интересно. Он работает на 32-разрядной версии Windows Server 2003 R2 (Standard). Аппарат имеет 3,83 ГБ или оперативную память. Глядя на параметр реестра для \ System \ CurrentControlSet \ Control \ Session Manager \ SubSystem и нашел это: SharedSection = 1024,3072,512. В вопросе, который вы указали, предлагается изменить среднее число. Правильно ли это изменить для безголового приложения, работающего как служба? – jhericks
Мы все еще не можем найти проблему, но мы собираемся настроить третье число (512) на 1024 и посмотреть, помогает ли это ситуации. – jhericks