2
  1. JAVA_OPTS="-server -Xms128M -Xmx256M -Xss256K -XX:PermSize=32M -XX:MaxPermSize=32M -XX:MaxDirectMemorySize=128M -XX: を使用して Linux (centos 6.3 x64) で Java(1.6 u25) プロセスを実行しています。 +UseAdaptiveSizePolicy -XX:MaxDirectMemorySize=128M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log"、thrift 0.8.0 を使用した Java アプリライブラリ;

  2. TOP コマンドを毎日実行すると、Java プロセスの RES 値は増加し続けます (80MB から 1.2GB (アプリを開始してから 1 か月後)) が、jvm ヒープ サイズは約 100 から 200MB のままであり、GC ログは約 1 ~ です。 PSyoungGC は 1 分あたり 2 回、PSOld GC は 1 日あたり 1 ~ 2 回、メモリ リークはありません。

では、mem を使用する Java プロセスが増加し続け、JVM 設定を大幅に超えるのはなぜでしょうか? Java プロセスが実際に使用するメモリは、Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM 自己使用メモリ = 約 416MB になると思いますか?

関連情報: Linux での Java からの仮想メモリ使用量、メモリ使用量が多すぎる

4

1 に答える 1

2

プロセスについては pmap を参照することをお勧めします。これにより、ネイティブ メモリの使用状況の内訳がわかります。あなたがあまりコントロールできない記憶は

  • スレッドが使用するスタック領域の合計。
  • メモリ マップ ファイルのサイズ
  • 共有ライブラリのサイズ。
  • ネイティブ ライブラリのメモリ使用量。例: ソケット バッファ (十分なソケットがある場合)

これらのいくつかの組み合わせは、違いを利用しています。

于 2013-08-27T07:56:33.807 に答える