0

JBoss7.1.1で実行されるJavaEEアプリケーションがあり、VirtualMachines(VMWare ESXIなど)で実行する必要があります。

問題は、VMでアプリを実行すると、パフォーマンスが約50%低下することです。

GCがおかしくなったようです...私が知る限り、GCが実行されると、「終了」してアプリケーションをブロックするのに通常よりもはるかに長い時間がかかります。

他の誰かがそのような経験をしたことがありますか?私が従うことができるヒント、チューニング、またはライトはありますか?

前もって感謝します。


編集

  • JVMにはXmxとXms=1Gbがあります
  • VMには4GbRAMが搭載されています
  • Ubuntu Server 64
  • oracle JVM 64
4

1 に答える 1

0

投稿した構成でアプリをVMに移動する前は、32ビットシステムと32ビットjvmで実行されており、同じjvmパラメーターを使用していたと言えます。

秘訣は、64ビットJavaで64ビットに移行したものの、アプリケーションに同じ量のヒープサイズが割り当てられていることです。実際に起こったことは、アプリのメモリが以前の半分になったことです。64ビットjvm上のすべてのオブジェクトは、32ビットjvmのオブジェクトの2倍のサイズです。

あなたが持っている構成を考えると、私はいくつかの解決策を提案します:

アプリケーションに1.3Gを超えて割り当てられていないことを考えると、32ビットjvmをインストールし、-Xms1300m-Xmx1300mで実行することで最高のパフォーマンスが達成されると考えられます。

さらに一歩進んで、32ビットLinuxをインストールした32ビットVMを使用することもできます。64ビットjvmは、1.3Gを超えるヒープが必要な場合にのみ役立ちます。それ以外の場合は、オーバーヘッドが大きくなりすぎます。

また、jvmを実行することもできます

-verbose:gc -XX:+PrintGCDetails

これにより、GCで何が起こっているかがわかります。これは、jvmの調整にさらに役立ちます。

于 2013-03-29T00:45:34.957 に答える