2012-01-19 12 views
3

TomcatスレッドプールをN個からN + 1個のスレッドに増やすと、どれくらいのメモリが必要になりますか?Tomcatスレッドはどのくらいのメモリを消費しますか?

もちろん、私のアプリはメモリを追加する責任があるかもしれませんが、無視してみましょう。私はちょうどTomcatがどれくらいかかっているか興味があります。

私はいくつかのテストを実行してそれを自分で測定することができたと思いますが、誰かが既にそれを行い、結果を共有したり指したりすることを望んでいます。

+0

仮想メモリ?物理メモリ? –

+0

はい:-)利用可能な情報はありません。おそらく、Javaにとってもっと興味深いのは、PermGenSpaceとHeapのどちらかです。 –

+0

仮想メモリが不足してメモリ不足を避けることができますか?または、不十分な物理メモリーに起因する懸念のパフォーマンスの問題ですか? –

答えて

1

私は主メモリの使用がスレッドごとに割り当てられたスタックスペースになると思います。これは-Xssを介してコマンドラインで制御可能です

+0

これは、主な*仮想*メモリー使用量です。 –

+0

スタック領域はヒープの外にありますが、OutOfMemoryExceptionsは引き続き発生します。デフォルトはスレッドごとに1MBとなることがあります(JVMのデフォルトを調べる必要があります)。 – rfeak

+0

1MBの* physical *メモリは使用されません。それで問題は彼がなぜ尋ねているのかにかかっています。 –

3

消費される追加の物理メモリは実質的に全くありません。スレッドが動作しない限り、オペレーティングシステムはスタックまたは関連する構造を保持する物理メモリを無駄にしません。 (それは初期スタックを作成しますので、それはおそらくは、当然のことながら、いくつかの物理メモリを消費します。しかし、それは可能であり、スレッドが実行されていない場合、パフォーマンスに害をページアウトされます。)

ただし、スレッドのスタックは仮想メモリを消費します。スレッドの最大スタックサイズを調整することができます。これは、仮想メモリの消費量を制御する最大スタックサイズです。スレッドがそこに座っていれば、それは事実上自由です。実際の限られたリソースを消費していないにもかかわらず、仮想メモリの制限を数えます。

スレッドスタックから仮想メモリが不足してエラーが発生した場合は、仮想メモリの上限を増やすことをお勧めします。仮想メモリ制限の目的は、物理メモリの使用を間接的に制限することです。物理メモリの使用は仮想メモリの使用を超えません。しかし、物理メモリをそれに対応させずに仮想メモリを消費するプログラミングパターン(スレッドのような)を使用する場合、制限はしないでください。

もちろん、32ビットプロセスは基本的に2GB、3GB、または4GBの仮想メモリ(プラットフォームによって異なる)に制限されています。したがって、最大スレッドスタックサイズを減らすこと以外に選択肢はありません。 (スレッドは、使用されなくてもアドレス空間を予約する必要があるため、最大スタックサイズの仮想メモリを即座に消費します)。

最大スレッドスタックサイズを縮小することもオプションです。しかし、これは妥協です。 の最大値がの場合、スレッドの寿命中に多くのスタックが必要になった場合にスレッドが例外を発生させないようにします。消費される唯一のリソースは通常は安いアドレス空間です。しかし、物理的なメモリが不足し、パフォーマンスが低下しないように、プログラムに課すことができる唯一の実際的な制限は、仮想メモリを制限することです。あなたが本当に望むノブは存在しません。

+0

Tomcatが要求を処理するために追加のスレッドを少なくとも1回使用した場合はどうなりますか?それはまだ「効果的に無料」ですか?どれくらいのオーバーヘッドがあるのだろうか。 –

+0

最近使用されていないメモリが常にページングに適格であるため、実際には使用されていないときに物理メモリの消費量が実質的に無料です。一度それをページして、それはあなたを再び悩ますことはありません。 –

関連する問題