-1

重複の可能性:
JVM の最大メモリ使用量を設定するには?

Java プログラムを実行していますが、メモリ使用量が 26.1% に達すると、それ以上増加せず、プログラムが非常に遅くなります。

何が問題なのですか?Javaにはメモリ使用量の制限がありますか? または、Linux のアプリごとにメモリの制限がありますか?

Java バージョン "1.7.0_11" Java(TM) SE ランタイム環境 (ビルド 1.7.0_11-b21) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 23.6-b04、混合モード)


Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie
Cpu(s): 97.5%us,  0.4%sy,  0.0%ni,  2.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  33018800k total,  9522548k used, 23496252k free,    12100k buffers
Swap: 32764528k total,        0k used, 32764528k free,   391812k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3463 wonn24    20   0 8769m 8.2g 9.8m S 391.3 26.1 257:09.24 java
 3725 hong8e    20   0 14876 1148  872 R  0.3  0.0   0:01.81 top
    1 root      20   0  4088  972  720 S  0.0  0.0   0:00.71 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.17 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      RT  -5     0    0    0 S  0.0  0.0   0:00.15 migration/1
    7 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
4

2 に答える 2

3

デフォルトでは、サーバー バージョンの Java の最大ヒープ サイズはメイン メモリの 1/4 です。ライブラリとスレッド スタックのオーバーヘッドが少しあると、これは簡単にメイン メモリの 26% または 27% になる可能性があります。

JVM がいっぱいになり始めると、GC の実行にかかる時間が短くなり、空きメモリが少ないということは、GC がより頻繁に発生することも意味します (非常に悪いことです) 理想的には、実際の使用量は最大サイズの 40% まで低くなる可能性があります。あなたの場合、実際の使用量は少なくとも 7 GB になる可能性があります。

最大ヒープ サイズを少なくとも 16 GB、メモリに余裕がある場合は 24 GB に増やしてみることをお勧めします。つまり-Xmx16g、または-Xmx24g

于 2013-01-18T09:22:24.283 に答える
1

デフォルトでは、Java には 64Mb のヒープ サイズ制限があります (メモリ サーバーの場合...)。コマンド ライン引数で増やすことができますが、その前に、余分なメモリが必要であり、リークがないことを確認してください。

于 2013-01-18T09:18:15.263 に答える