Javaプロセスによって報告されたRESメモリがVIRTメモリよりも高いのはなぜですか?

Javaプロセスによって報告されたRESメモリがVIRTメモリよりも高いのはなぜですか?

私はTOPを使用してJavaプロセス(Oracle Weblogic)を監視してきました。

  • 1時間ほど経過すると、RESは通常の2,097,152KBからほぼ10GBに増加し、0に低下し、2,097,152KBに戻ります。
  • この期間中、VIRT メモリは 6,904,832 KB に維持されました。
  • %MEMはRESが増加すると増加し、RESが減少すると増加し続けます(システムには32GBのRAMがあります)。

私はRES、VIRT、および%MEMの多くの説明を読みました。男性相、そのどれにも適していません。特にRESと%MEMは完全に相関関係がなければならず、RESは決してVIRTより高くすることはできないと思います。

何が起こっているのかを説明できる人はいますか?

時間の経過とともに、動作を示す図を下に追加しました。

関連するのは、これがロードバランシングシステムの1つのノードであり、他のノードが何も起こっていないかのように続くということです。私はこれが別の日にあるノードで6回発生するのを見ました。 RESが低下すると、エンドユーザーの応答時間に小さくて短いスパイクが発生します。両方のノードは同じに非常に近いです。管理者はJavaプロセスにさまざまなメモリフラグを設定しました。 Verbose GC がオンになっており、次の期間は GC 全体が発生しません。

時間の経過とともに、異常なメモリ使用量が発生します。

関連情報