1

Linux および jdk1.6.0_32 で JVM メモリが Xmx3072m に自動拡張できないのはなぜですか?

Tenured 世代は 99% 使用され、FullGC を頻繁に使用します。の出力に見られるように、Java プロセスは 1G メモリしか使用していませんtop

JVM パラメータを に変更すると、正常に動作します-Xms3072m -Xmx3072m。しかし、 を使用する-Xms256m -Xmx3072mと、問題が発生し、FullGC が非常に頻繁に発生します。

これらの 2 つのパラメーターもデフォルトです。

MinHeapFreeRatio    40
MaxHeapFreeRatio    70 

環境は次のとおりです。

OS: 

Linux linux-wgvb 2.6.16.60-0.54.5-smp #1 SMP Fri Sep 4 01:28:03 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux 

JDK version: 

java version "1.6.0_32" 
Java(TM) SE Runtime Environment (build 1.6.0_32-b05) 
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode) 

JVM params: 

-Xms256m -Xmx3072m  -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=1000
-XX:ParallelGCThreads=5 -Xrs -XX:PermSize=64m -XX:MaxPermSize=512m
-XX:+HeapDumpOnOutOfMemoryError 

FullGC は頻繁に実行されます。

@linux> ./jstat -gcutil 18261 1000 500 

   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
 0.00  64.67   7.04  99.53  71.89  18293  510.574  1167 1616.594 2127.168 
91.78   7.91 100.00  99.53  72.00  18299  510.821  1167 1616.594 2127.415 
77.49   0.00   0.00  99.99  72.00  18300  510.947  1168 1616.594 2127.541 
 0.00  99.83  25.71  99.49  71.72  18305  511.178  1168 1617.915 2129.093 
24.27   0.00  21.74  99.67  71.73  18310  511.342  1168 1617.915 2129.256 
28.57   0.00   0.00  99.83  71.73  18314  511.427  1169 1617.915 2129.342 
 0.00  29.29   0.00  99.56  71.82  18317  511.465  1169 1618.919 2130.384 
 0.00  78.85  54.96  99.56  72.05  18326  511.777  1169 1618.919 2130.696 
64.52   0.00   0.00  99.99  72.05  18328  511.920  1170 1618.919 2130.839 
 0.00  99.26   0.00  99.88  71.71  18333  512.079  1171 1620.014 2132.093 
 4.86   0.00   0.00  99.95  71.76  18338  512.255  1172 1620.957 2133.211 
80.98   0.00   0.00  99.69  71.83  18350  512.453  1172 1621.906 2134.359 
 0.00  64.48   0.00  99.85  71.83  18355  512.677  1173 1621.906 2134.583 
 0.00  99.80   0.00  99.93  71.71  18359  512.876  1174 1623.264 2136.139 
 0.06   0.04 100.00  99.55  71.71  18360  512.876  1174 1624.193 2137.069 
60.35   0.00   0.00  99.90  71.77  18376  513.429  1175 1624.193 2137.622 
60.35   0.00   0.00  99.90  71.77  18376  513.429  1175 1624.193 2137.622
89.86   0.00   0.00  99.83  71.78  18384  513.839  1176 1625.476 2139.315 
89.86   0.00   0.00  99.83  71.78  18384  513.839  1176 1625.476 2139.315 
 0.00  39.17  64.41  99.60  71.78  18394  514.202  1176 1626.880 2141.082 
99.93   0.00   0.00  99.82  71.78  18396  514.326  1177 1626.880 2141.206 
 0.00  64.68   0.00  99.61  71.72  18401  514.409  1177 1627.945 2142.354 

Java プロセスは 1G メモリしか使用しませんでした:

   PID USER     PR  NI    VIRT  RES  SHR  S  %CPU  %MEM     TIME+  COMMAND
 18261 ouser    15   0   4353m 1.0g  52m  S   325  3.2  271:25.52  java
./jstat -gcapacity 18261 1000 500
 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
 87360.0 1048576.0 136256.0 65984.0 68096.0 64.0 174784.0 2097152.0 785664.0 785664.0 65536.0 524288.0 65792.0 657902.0 1416012 81
 87360.0 1048576.0 122816.0 61376.0 12992.0 64.0 174784.0 2097152.0 791360.0 791360.0 65536.0 524288.0 65792.0 657902.0 1416016 81
 87360.0 1048576.0 115264.0 57600.0 7872.0 64.0 174784.0 2097152.0 791936.0 791936.0 65536.0 524288.0 65792.0 657902.0 141617 81
 87360.0 1048576.0 112576.0 54912.0 56256.0 64.0 174784.0 2097152.0 797952.0 797952.0 65536.0 524288.0 65792.0 657902.0 1416218 81
 87360.0 1048576.0 112576.0 54912.0 56256.0 64.0 174784.0 2097152.0 797952.0 797952.0 65536.0 524288.0 65792.0 657902.0 1416218 81
 87360.0 1048576.0 105408.0 52672.0 192.0 64.0 174784.0 2097152.0 804096.0 804096.0 65536.0 524288.0 65792.0 65792.0 1416321 810
 87360.0 1048576.0 87360.0 35584.0 38464.0 8064.0 174784.0 2097152.0 805568.0 805568.0 65536.0 524288.0 65792.0 65792.0 141629
 87360.0 1048576.0 111168.0 39488.0 46080.0 12416.0 174784.0 2097152.0 805568.0 805568.0 65536.0 524288.0 65792.0 65792.0 14133
 87360.0 1048576.0 142848.0 69440.0 70592.0 1664.0 174784.0 2097152.0 805568.0 805568.0 65536.0 524288.0 65792.0 65792.0 81444
 87360.0 1048576.0 142848.0 69440.0 70592.0 1664.0 174784.0 2097152.0 805568.0 805568.0 65536.0 524288.0 65792.0 65792.0 81444
 87360.0 1048576.0 87360.0 35136.0 37376.0 10304.0 174784.0 2097152.0 769280.0 769280.0 65536.0 524288.0 65792.0 65792.0 141616
4

3 に答える 3

1

RES値は、プロセスが使用しているメモリの量ではなく、実際に使用されている RAM の量です。これには、スワップされたページと、割り当てられているがマップされていないページは含まれません。システム自体に十分な空きメモリがあることを確認してください。実行できるfreetop、使用中のメモリ量を超えて出力する必要があります。の出力はtop、プロセスに 4G のメモリがマップされているが、現在 RAM (VIRT値) にないことを示しています。

于 2012-12-22T02:58:01.733 に答える
0

設定されていることを確認していただけます-XX:+UseAdaptiveSizePolicyか?デフォルトではオンになっているはずです。

Xmsまた、 GC が短時間でヒープ領域を回復してサイズ変更できないように、小さすぎる値を指定している可能性もあります。-Xms1024m -Xmx3072m例えば​​とを試していただけます-Xms2048m -Xmx3072mか?これらの場合、GC はサイズを適切に調整できますか? jstat -gccapacity(オンザフライでの監視は、おそらくここで役立つでしょう。)

一般的に、UseAdaptiveSizePolicy便利で、アルゴリズムはヒープのエルゴノミクスを調整できます。ただし、アプリケーションのメモリ割り当ての動作を監視し、GC パラメータを最適な状態に設定する主な責任は常にユーザーにあります。-Xms256m -Xmx3072m割り当て率やライブ データ セットのサイズに追いつくには、それだけでは十分ではない可能性があります。

ところで。最初から十分なメモリを与えると GC が適切に動作するため、システム メモリに問題があるとは思いません (例: -Xms3072m -Xmx3072m)。

于 2012-12-22T12:38:21.200 に答える
-1

JVMコマンドラインオプションは正しいと思います。JVN ヒープの監視方法が間違っている可能性があります。

VIRT進行状況によって要求されたスペース全体です。スペースが十分でない場合は、スワップが使用される可能性があります。

jstat -gccapacity 18261 1000 500おそらく、世代の容量とそれに対応するスペースの統計を見ることができます。

gc     Garbage-collected heap statistics
+-------+-------------------------------------------+
|Column |                Description                |
+-------+-------------------------------------------+
|SOC    | Current survivor space 0 capacity (KB).   |
|S1C    | Current survivor space 1 capacity (KB).   |
|S0U    | Survivor space 0 utilization (KB).        |
|S1U    | Survivor space 1 utilization (KB).        |
|EC     | Current eden space capacity (KB).         |
|EU     | Eden space utilization (KB).              |
|OC     | Current old space capacity (KB).          |
|OU     | Old space utilization (KB).               |
|PC     | Current permanent space capacity (KB).    |
|PU     | Permanent space utilization (KB).         |
|YGC    | Number of young generation GC Events.     |
|YGCT   | Young generation garbage collection time. |
|FGC    | Number of full GC events.                 |
|FGCT   | Full garbage collection time.             |
|GCT    | Total garbage collection time.            |
+-------+-------------------------------------------+
于 2012-12-22T05:09:40.413 に答える