2

BEAWeblogic9.2でWebアプリケーションを実行しています。最近まで、JDK 1.5.0_04、JAI1.1.2_01およびImageIO1.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)

誰かが以前にこのようなものを見たことがありますか?何が起こっているのか手がかりはありますか?

4

3 に答える 3

4

マーカス・アダムスはこれの功績を認めるべきですが、彼のちょっとしたアドバイスは答えではなくコメントの形であったので、私はそれをチェックすることはできません。彼は別の答えからこの例を私に指摘しました、そしてそれはトリックをしました。

\ System \ CurrentControlSet \ Control \ Session Manager \ SubSystemのレジストリ設定を確認すると、SharedSection=1024,3072,512であることがわかりました。これはサービス(ヘッドレス)だったので、3番目の番号を変更しました。新しい値はSharedSection=1024,3072,1024でした。数週間前にこの変更を行って以来、問題は再発していません。

于 2010-06-07T04:35:57.960 に答える
0

ほとんどの場合、エラーメッセージは真実を伝えています。上記のストレージはハードディスクスペースを指しますか?ディスクがいっぱいになっていないことを確認してください。そうでなければ、他の回答の1つで述べたような何らかのメモリが不足している可能性があります。weblogicやjrockitについてはよくわかりませんが、Sun Oracleのjdkには、実行中のアプリケーションで何が起こっているかを確認できるjconsoleという優れたツールがあります。メモリ消費量などについて通知できるはずです(ツールはjmsを使用するため、他のjdkでも機能する可能性があります)

于 2010-04-14T20:24:53.823 に答える
0

これは、スレッドのスタックスペースが不足していることに関連している可能性があるようです。この投稿http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765019を参照してください。JVMにはスタックサイズを制御するための-Xss引数がありますが、それを超えている場合は、一度に大量のスレッドを作成しているように見えます...

于 2010-04-14T19:05:15.907 に答える