現在、Jetty で Grails アプリケーションを実行しています。正常に動作していますが、必要以上にメモリを消費しています。
htop
Jetty が次のように実行されていることを示しています。java -server -Xmx256m -Xms256m -Xmn96m -XX:MaxPermSize=64m -Djetty.home=/home/...
したがって、Jetty が使用できる可能性のある最大メモリは約 256 + 64 = 320 MB
. 代わりに、次のようになります。
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ コマンド 6256 桟橋 20 0 2747M 623M 13732 S 0.0 31.3 1:28.06 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -server -Xmx256m -Xms256m -Xmn96m -XX:MaxPermSize=64m -Djetty.ホーム=...
明らかに、メモリ使用量が正確に 320 MB になるとは思いませんが、近いはずではありませんか? 予想されるメモリの 2 倍になるのはなぜですか? どちらかといえば、ヒープがいっぱいになったときに Java がより多くのスペースを割り当てることを拒否すべきではないでしょうか?
で何が起こっているのかを正確に確認しようとしましたjmap
が、すべてが正しいように見えます:
# jmap -ヒープ 6256 プロセス ID 6256 にアタッチしています。お待ちください... デバッガーが正常に接続されました。 サーバー コンパイラが検出されました。 JVM のバージョンは 23.7-b01 です スレッド ローカル オブジェクト割り当てを使用します。 4 スレッドの並列 GC ヒープ構成: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 268435456 (256.0MB) NewSize = 100663296 (96.0MB) MaxNewSize = 100663296 (96.0MB) 旧サイズ = 5439488 (5.1875MB) 新しい比率 = 2 生存率 = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 67108864 (64.0MB) G1HeapRegionSize = 0 (0.0MB) ヒープ使用量: PSヤングジェネレーション エデン スペース: 容量 = 65208320 (62.1875MB) 使用済み = 33343488 (31.798828125MB) 無料 = 31864832 (30.388671875MB) 51.13379396984924% 使用済み 宇宙から: 容量 = 17170432 (16.375MB) 使用済み = 0 (0.0MB) 無料 = 17170432 (16.375MB) 0.0%使用 スペースへ: 容量 = 18284544 (17.4375MB) 使用済み = 0 (0.0MB) 無料 = 18284544 (17.4375MB) 0.0%使用 PSオールドジェネレーション 容量 = 167772160 (160.0MB) 使用済み = 132604224 (126.46124267578125MB) 無料 = 35167936 (33.53875732421875MB) 79.03827667236328% 使用済み PSパーマジェネレーション 容量 = 67108864 (64.0MB) 使用済み = 55899320 (53.30974578857422MB) 無料 = 11209544 (10.690254211425781MB) 83.29647779464722% 使用済み 2932096 バイトを占める 26872 個のインターン文字列。
私が知る限り、perm gen スペースもヒープ スペースもいっぱいではありません。では、約 400 MB のメモリが何に使用されているのでしょうか? Grails アプリケーションまたは Jetty で変更して削減できるものはありますか?
過去にJettyでメモリ使用量の少ないGrailsアプリを実行しました。ちょうど今 1 つをチェックしたところ、220 MB のメモリが使用されているので、何が間違っているのかよくわかりません。