1

私は、グローバルキャッシュを持ち、データパブリッシャーも持っているアプリケーションで作業しています。問題は、メモリ不足の問題に頻繁に直面することです。いくつかの調整を行いましたが、十分ではありません。若い世代やテニュア世代対象を多数取り揃えております。ほとんどの場合、アプリは Tenured 世代に移動するため、OutOfMemoryError がスローされます。

2 つの CPU ホストがあるため、一時停止時間を回避するためにスループット コレクターを適用できますが、主に若い世代を収集するため、並行低一時停止コレクターを使用しています。

このアプリケーション用に VM を調整する最善の方法は何ですか?

マイナー GC を増やすにはどうすればよいですか。これにより、Tenured 世代が制御されます。

前もって感謝します。

4

2 に答える 2

1

私の最初のアイデアは WeakHashMap を使用することでしたが、次の記事を見つけました: WeakHashMap is not a cache。その記事のリンクを参照すると、適切なapache commonsも見つかるかもしれません。

私の意見では、特に中心的で重要なコンポーネントである場合は、独自のキャッシュを実装しないことがベスト プラクティスです。ライブラリを使用することをお勧めします。そうしないと、常に実装を「調整」する必要があり、それでも新しい問題が何度も発生します。そのため、アプリケーションにカスタム キャッシュが既にある場合でも、堅牢なライブラリに切り替える努力は報われる可能性があります。

于 2012-04-04T12:21:06.450 に答える
0

キャッシュがある場合は、古いデータを時々削除するメカニズムが必要です。それはあなたの仕事であり、vms の仕事ではありません。

http://java-source.net/open-source/cache-solutions/oscacheのような利用可能なキャッシュ ソリューションには、必要に応じて使用および拡張できるキャッシュ エントリを期限切れにするさまざまな戦略があります。

編集:(コメントでどのように示すか)アプリケーションのコードを変更できない場合は、サーバーにメモリを追加し、jvm が使用できるヒープを調整できます。これで問題が解決するわけではありませんが、表示される頻度が低くなる可能性があります。

于 2012-04-04T12:34:14.900 に答える