2

場合によっては、すべての空きシステム メモリ (3 GB、空き 1.5 GB) を消費する BufferedImage に奇妙な問題があります。

シンプルなラッパーを作成し、次のように使用します。

public ImageWrapper(final byte[] bytes) throws ImageWrapperException {
    this(new ByteArrayInputStream(bytes));
}



public ImageWrapper(final ByteArrayInputStream bis) throws ImageWrapperException {
    try {
        image = ImageIO.read(bis);
        bis.close();
    } catch (IOException e) {
        throw new ImageWrapperException(e);
    }
}

(私はjsutでもそれが起こることを確認しましたimage = ImageIO.read(file);

最初の「メモリを割り当てられません」まで例外は発生しません。

何らかの理由で、特定の種類のイメージを読み込むと、イメージの読み込みでシステム メモリがすべて消費されてしまいます。私はヒープについて話しているのではなく、実際にはシステムメモリについて話しています。

特定の環境でのみ発生します。OSXでは発生しませんが、Debianサーバーでは発生します。

  1. なぜこれが起こっているのか分かりますか?
  2. BufferedImage に代わるものはありますか?
  3. 問題のあるマシンは仮想サーバーです。それはその構成によって引き起こされる可能性がありますか?

ありがとう

編集:

  1. 画像例: http://cl.ly/1P430l0V1g133r0C291J
  2. これは、これを生成する最初で唯一のインスタンスです。
  3. 私はそれが次の場合にも起こることを確認しましたimage = ImageIO.read(file);:

EDIT2:

したがって、問題は FileSystem にあります。ここには、何千もの画像が含まれる 7 GB のディレクトリがあります。ファイルを読み取ろうとすると、すべてのメモリが消費されます。これは、ある種のファイルシステムの問題だと思います。

4

3 に答える 3

3

ImageIO.read() および BufferedImage に関連する既知のバグがいくつかあります。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7166379

http://bugs.sun.com/view_bug.do?bug_id=6716560

于 2012-07-02T21:35:44.920 に答える
1

BufferedImageには間違いなく何か問題があります.2台のサーバーでテストしましたが、同じ結果でリークしていました.システムは完全にメモリ不足です.

最後に、PHP で簡単なラッパーを作成し、現在は画像操作に GD を使用しています。今は正常に動作します。すべての提案をありがとう!

于 2012-06-08T22:46:13.223 に答える
0

コードをに移動してjava.nioアクセスmemory mapped fileしてみてください。それらはヒープの外に格納されます。

このSOは興味深いです。

于 2012-06-08T07:54:38.807 に答える