場合によっては、すべての空きシステム メモリ (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サーバーでは発生します。
- なぜこれが起こっているのか分かりますか?
- BufferedImage に代わるものはありますか?
- 問題のあるマシンは仮想サーバーです。それはその構成によって引き起こされる可能性がありますか?
ありがとう
編集:
- 画像例: http://cl.ly/1P430l0V1g133r0C291J
- これは、これを生成する最初で唯一のインスタンスです。
- 私はそれが次の場合にも起こることを確認しました
image = ImageIO.read(file);
:
EDIT2:
したがって、問題は FileSystem にあります。ここには、何千もの画像が含まれる 7 GB のディレクトリがあります。ファイルを読み取ろうとすると、すべてのメモリが消費されます。これは、ある種のファイルシステムの問題だと思います。