1

私はオブジェクトのキャッシングをいじっており (最初に独自のキャッシュを作成して、安定した実装になったものの非常に非効率的でした)、次に Memcached を使用してみました。

memcached は問題なく動作しますが、問題が発生しました。

オブジェクトの使用方法は次のとおりです。

  • データベースからオブジェクトにデータを読み取り、そのオブジェクトを memcached に保存します。
  • 数分ごとに memcached からオブジェクトを取得し、データベースまたは memcached 内の他のオブジェクトから追加データを取得し、新しいデータまたは関連データでオブジェクトを更新してから、オブジェクトを memcached に戻します。
  • 表示する必要のあるオブジェクトは、memcached から取得され、パッケージ化されて、クライアント側のアプリケーションに送信されて表示されます。

memcached で作成、保存、更新、表示しているオブジェクトの数が多くなった場合を除いて、これは非常にうまく機能します。Java/Tomcat-jvm は、memcached から取り出したオブジェクトのガベージ コレクションを「十分に速く」実行していないようで、vm がメモリ不足になります。

私は 8GB のメモリに制限されています (memcached を使用して、できれば 4 に減らしたいと考えています)。ガベージコレクター)?

(PS Google の Guava キャッシュの使用を検討しましたが、これにより同時実行のオプションが制限されます。たとえば、Tomcat を再起動する必要があり、Guava と memcached の両方を使用すると、回避したい種類の重複のように思えます)

――ハイン。

4

1 に答える 1

0

ガベージ コレクタが「遅すぎ」てメモリ不足になることはありません。OutOfMemoryError をスローする前に、ガベージ コレクターの実行が保証されます。十分なメモリを解放できない場合にのみ、エラーがスローされます。

プロファイラーを使用して、メモリ リークがあるかどうか、またはあまりにも多くのオブジェクトに依存しているかどうかを確認する必要があります。

その後、GC を調整してパフォーマンスを向上させたい場合があります。たとえば、GC の調整を参照してください。

于 2013-07-31T08:53:22.680 に答える