2011-12-19 13 views
5

私はElastic Beanstalkを使用してAmazon AWSにデプロイする予定のJavaサーブレットを作成しています。私のテストでは、Beanstalkが使用する在庫Tomcat AMIを使用してSmall EC2インスタンスを使用するとうまくいくことがわかりました。EC2インスタンス上でTomcatのJavaヒープを割り当てる

私はこの設定に適切にJavaヒープスペースを割り当てる方法を理解しようとしています。 Smallインスタンスは1.7GBのメモリを持っているので、1024MBのヒープがうまくいくと思っています。私は、このインスタンスの唯一の "本当の"目的がTomcatを実行することであっても、他のものにはメモリが必要であることを認識しています。また、標準的なSun/Oracle JVMが実際には機能しない大きなヒープのある点があることも知っています。

これはメモリを割り当てるうえで妥当な方法ですか?私は多かれ少なかれ使うべきですか?どのようなツールを使って最適な構成を決定できますか?

答えて

2

108 1024は大丈夫ですか、少し多分かもしれません。

あなたのサーブレットが何をしているのか正確には分かりませんが、アイデアを伝えるために、私は2つの小さなec2インスタンスで約1000人の日常的なユーザーを実行するeコマースアプリケーションを持っています。 Tomcatの負荷はmod_jk経由で配布されます。

私はJVMをまったく調整せず、デフォルト設定を維持しました。私はまた、テラコッタの分散オブジェクトキャッシングを使用しており、そのプロセスはメモリの大部分を消費しているようです。

LinuxベースのOSまたはWindowsにデプロイされていますか? IMO、linuxは利用可能なメモリを管理する上でより良い仕事をします。

ツールに関しては、アプリケーションを小さなEC2インスタンスとして展開し、JMeterのようなツールを使用してアプリケーションをストレステストすることをお勧めします。ストレステスト中に、トップユーティリティを開くことができます(あなたのアプリがLinux上で、トップがインストールされていることを前提とします)。

処理できる負荷を確認してアプリケーションを中断させてください。それはec2の美しさです。テスト環境を数分でセットアップし、すぐに破棄することができます。

+0

入力いただきありがとうございます。 私のアプリについて詳しくは触れません。これにより、ユーザーはさまざまなトピックに関する情報を表示し、可能であれば情報を追加することができます。トピックに関する情報の一部はデータベースから動的に生成されますが、その大部分は起動時にファイルから読み込み、ヒープ上の独自のデータ構造で保持される静的データです。すべて一緒に、それは約250から300 MB相当のデータです。私たちが本当に走ったら、1日に数万人のユーザーがいるだろうと推測しています。 –

+0

私の以前のAWSプロジェクトでは、すべてを制御しようとしました。このプロジェクトでは、「本物の」アプリケーションにもっと時間を費やす必要があると判断し、単純なITジョブではなくそれを販売する方法を決めたので、在庫Beanstalkを使用しています。これは、Linuxの在庫AMIとElastic Load Balancerを使用することを意味します。 ELBの代わりにmod_jkを使って負荷を分散させる理由がありますか? これを考えれば、なぜ1024はあまりにも多すぎると思いますか?実際には標準のオペレーティングシステムのタスク以外は何もありません。これを正しく見ていますか? –

+0

@SanderSmith私はまだELBを使用していますが、私はこれを使って2つの小さなapache Webサーバーインスタンスのバランスをとっています。次にmod_jkは私のApache Webサーバーインスタンスから、Tomcatインスタンスに負荷を分散するために使用されます。 Apacheは静的なリソースを提供する上で優れており、SSLをより良く扱うことができます。あなたができる最良のことはテスト負荷であり、そこからあなたの決定を下すことだと思います。あなたのアプリケーションが1日に10kユーザーを受け取ることを期待している場合、JVMをどのようにチューニングしても、小さなEC2インスタンスでは十分ではないと思います –

0

java用のnewrelicをチェックして、ヒープ使用パターンを判断してください。

関連する問題