問題がある64ビットJavaアプリケーションをプロファイリングする過程で、Profiler自体(YourKit)が本当に莫大な量のメモリを使用していることがわかりました。私はYourKitの起動スクリプトに持っていることは次のとおりです。64ビットJavaで最大安全なJVMヒープサイズを推定する
JAVA_HEAP_LIMIT="-Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m"
単純に、いくつかのオーバーヘッドを想定し、これはYourKitが4ギガバイトを超える多分ビット何かの最大を使用しようとしていることを推測するために私につながります。しかし、私が実際にPSで見るものは次のとおりです。ほぼ14ギガバイトの仮想サイズとほぼ8ギガバイトの常駐サイズ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dmoles 31379 4.4 68.2 14440032 8321396 ? Sl 11:47 10:42 java -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dyjp.probe.table.length.limit=20000 -Xbootclasspath/a:/home/dmoles/Applications/yjp-9.5.6/bin/../lib/tools.jar -jar /home/dmoles/Applications/yjp-9.5.6/bin/../lib/yjp.jar
だこと - ほとんどのJavaヒープ3倍。
これを実行するには十分なメモリがありますが、私が診断しようとしている元のメモリの問題に戻ります。
明らかに、お客様が16GBの物理RAMを持っている場合は、-Xmx
を16GBに設定するように教えてもらえません。
なのではですか? 12 GB? 8 GB?
それはどのように見積もりますか?顧客は、たとえば、16ギガバイトの物理RAMを持っているなら、私は16ギガバイトに-Xmxを設定するためにそれらを伝えるためにため
+1アプリケーションが必要とするヒープ量を推定しそこから行くことをお勧めします。 「私はそれをどのように見積もるのか」という質問は、スレッドの幸福の悲劇に関するエリック・リッパートの記事を思い起こさせる(http://blogs.msdn.com/b/ericlippert/archive/2004/02/15/the-tragedy- of-thread-happiness-disease.aspx)。 –
@AdamMihalcin Ouch。 :) –
@AdamMihalcinそれは良いアドバイスですが、コインには2つの側面があります。ヘッド(アプリケーションがどれだけ必要とするかを見積もる)は、「ここにユーザー数はどれくらいあり、購入するサーバーはいくらですか? Tailsは、「ここにサーバーがどれくらいあるのか、メモリが足りなくなる前に処理できるユーザーの数はいくらですか? –