1

私は Java を使用しており、ログには sl4j/log4j を使用しています。好奇心から、ログを書きすぎるとJava OutOfMemoryエラーが発生する可能性があるかどうかを知りたいですか?

ここで多すぎるのは何ですか?うーん、過剰な db 操作を行っている間に 10 分間で 100 mb のログがあるとします (この情報はピンポイントの回答には不十分であることはわかっていますが、ピンポイントの回答を探しているわけではありません。状況が来る)。

また、ロギング プロセスは非同期ではありません。

4

2 に答える 2

2

ヒープが使い果たされているというエラーが表示されますよね? PermGen エラーではありませんか?

明らかにログ ライブラリはリークしていませんが、非常に短い時間で大量の文字列を作成するコードを記述した場合、メモリが使い果たされる可能性があることに疑いの余地はありません。ロギング オブジェクトがヒープをサックするのに十分であるとは考えにくいため、permgen エラーが発生すると考えるでしょう。

過剰な db 操作は典型的な OOME の原因です。特に大きな結果セットを返します。私はそれをメモリリークとは呼びません。リークは通常、長時間実行した後に障害を引き起こします。100 万件のレコードと 20 列のテーブルがあり、それをクエリで返そうとすると、ヒープがなくなってクラッシュするまで実行されますが、最初はリークや参照の問題はありません。

巨大なテーブルからすべてのレコードを取得するときに OOM (メモリ不足) エラーを回避するには?

于 2013-04-01T03:51:06.793 に答える
1

ログを書きすぎると、Java OutOfMemory エラーが発生する可能性があるかどうかを知りたいですか?

私はそれを非常に疑っています。

OOME に問題がある場合、最も可能性の高い原因はメモリ リークです。考えられる原因を (基本的に) 推測するのではなく、これを系統的に調査する必要があります。

(メモリ リークがロギング ライブラリの 1 つにあった場合、それはライブラリのバグです。これは不可能ではありませんが、そのようなバグはかなり前に発見され、修正されている可能性があります。)

参照: Java メモリ リークを解決するための一般的な戦略は?

于 2013-04-01T03:32:19.700 に答える