背景:Javaのメモリ使用量に影響を与えるLinux構成ですか?
私は、私は私のWebアプリケーションの一部として開始Javaの背景労働者のセットを持っています。私はUbuntu 10.10でローカルに開発し、Ubuntu 10.04LTSサーバー(メディアテンプル(ve)インスタンス)に展開します。
彼らは両方とも同じJVMを実行しています:Sun JVM 1.6.0_22-b04
。初期化スクリプトの一部として、各ワーカーは明示的にXmx
,Xms
、およびXX:MaxPermGen
の設定で開始されます。
しかし、10人の従業員全員が250MBを使用していますが、サーバでは2.7GB以上を使用しています。
これを追跡する方法はわかりません。私はUbuntu(とカーネル)バージョンが違いを生むかもしれないと思ったが、古い10.04 VMを試してみたところ、期待通りに動作していた。
私は、マシンが(htop
による)バッファやキャッシュにメモリを使用していないように見えました。 (編集済み)
いくつかの情報:
(server)
[email protected]:/app/axir/target# uname -a
Linux devel 2.6.18-028stab069.5 #1 SMP Tue May 18 17:26:16 MSD 2010 x86_64 GNU/Linux
(local)
[email protected]:~$ uname -a
Linux beastie 2.6.35-25-generiC#44-Ubuntu SMP Fri Jan 21 17:40:44 UTC 2011 x86_64 GNU/Linux
(編集済み) 比較PS出力:(ps -eo "ppid,pid,cmd,rss,sz,vsz"
)
PPID PID CMD RSS SZ VSZ
(local)
1588 1615 java -cp axir-distribution. 25484 234382 937528
1615 1631 java -cp /home/wiktor/Code/ 83472 163059 652236
1615 1657 java -cp /home/wiktor/Code/ 70624 89135 356540
1615 1658 java -cp /home/wiktor/Code/ 37652 77625 310500
1615 1669 java -cp /home/wiktor/Code/ 38096 77733 310932
1615 1675 java -cp /home/wiktor/Code/ 37420 61395 245580
1615 1684 java -cp /home/wiktor/Code/ 38000 77736 310944
1615 1703 java -cp /home/wiktor/Code/ 39180 78060 312240
1615 1712 java -cp /home/wiktor/Code/ 38488 93882 375528
1615 1719 java -cp /home/wiktor/Code/ 38312 77874 311496
1615 1726 java -cp /home/wiktor/Code/ 38656 77958 311832
1615 1727 java -cp /home/wiktor/Code/ 78016 89429 357716
(server)
22522 23560 java -cp axir-distribution. 24860 285196 1140784
23560 23585 java -cp /app/axir/target/a 100764 161629 646516
23560 23667 java -cp /app/axir/target/a 72408 92682 370728
23560 23670 java -cp /app/axir/target/a 39948 97671 390684
23560 23674 java -cp /app/axir/target/a 40140 81586 326344
23560 23739 java -cp /app/axir/target/a 39688 81542 326168
は、彼らは非常によく似ています。実際、問題は、サーバ上の仮想メモリ使用量(3.2GB)を加算すると、使用されるメモリが2.4GBに近づきます(free
による)が、ローカルに使用される仮想メモリははるかに本格的な4.7GBだが実際には〜250MBしか使わない。たぶん記憶は積極的に共有されていないようです。オプションは、デフォルトで「-server Javaの私は、サーバー上で知っているように(それはも可能です場合)
は
Wiktor第
はサーバー64ビットですか? –
はい、ローカルクライアントもそうです。 – wmacura
は両方の環境で動作するJavaクラスのデータ共有ですか? java -Xshare:onを実行して、それが正しいことを確認してください。また、あなたのjvmsに対してjmapを実行して、メモリがどのようにマップされているかを確認してください。おそらく、何らかの理由でジャンボ・サイズの動的libがサーバー上に存在する可能性があります。 – Ron