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 を超えると大きすぎるように思えます。では、その理由は何でしょうか?それとも普通のやり方ですか?