8

1 台のサーバーでメモリの問題が発生しました。これは amazon マイクロ インスタンスであるため、そのメモリは非常に限られています (free -m は 603 MB と表示されます)。それが私がTomcatを始めた理由です

-server -Xmx290m -Xms290m -XX:MaxPermSize=65m

ただし、「java」プロセスは合計メモリの約 86%、つまり 518M を使用します。518-355 = 163 MB のオーバーヘッド。それは多くのように見え、特に次のことを考えると疑わしいです:

  • 別のマイクロ インスタンスの別の jvm バージョンで実行された同様のアプリケーションには、これほど大きなオーバーヘッドはありません。
  • 同じアプリケーションをローカルで実行しても、オーバーヘッドはわずか 40 MB です。ローカルでは、Windows 7、64 ビットで実行されます。

問題のあるサーバーの Java バージョンは次のとおりです。

java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (amzn-2.3.3.13.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

ローカル ランタイムとサーバー上のランタイムとの間の大きな不一致により、アプリケーションに高価なオフヒープ オブジェクト (バイト バッファーなど) が存在するというオプションを除外することになります (いずれにせよ、私はそれを使用していません)。JVM のオーバーヘッドがさまざまであることはわかっていますが、オーバーヘッドとしてヒープの 1/2 を超えると大きすぎるように思えます。では、その理由は何でしょうか?それとも普通のやり方ですか?

4

1 に答える 1

2

各 GC スキームはヒープを管理するためにメモリを確保する必要があるため、GC の選択はヒープ サイズのオーバーヘッドに影響を与える可能性があります。また、このような小さな VM では、64 ビットに移行してもあまりメリットがない可能性があります。デフォルトで有効になっている CompressOOPS を使用している場合でも、32 ビット jvm はより少ないヒープを占有します。したがって、お気に入りのガベージ コレクターを試して、オーバーヘッドとレイテンシーの最適な組み合わせを提供するものを選択してください。

于 2013-01-03T16:28:35.710 に答える