QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

スレッド数の上限の設定について

環境は
redhat ES ver3
jdk1.4.2
tomcat5.0.28
apache1.3です。

javaサーブレットを動かしていると、
javaが以下のエラーをはきます。
java.lang.OutOfMemoryError: unable to create new native thread

新しいスレッドが作れないという理由だと思いますが、
これを回避するためには何処の設定を変えればよいでしょうか?
/proc/sys/kernel/threads-maxでよいでしょうか?
(/proc/sys/kernel/threads-maxは14336です)

プログラムを改修するには時間がかかるため、
redhatの設定で対処できればと考えています。

ご教授の程、宜しくお願いします。

質問者:たかすぃ

回答

Javaはぜんぜん知りませんが...

たかすぃさんの書き込み (2005-05-13 19:24) より:

java.lang.OutOfMemoryError: unable to create new native thread

というのはJVMのメモリ不足でわ?
システム側のリソース不足とか制限とかじゃなさそうに見えるです。

投稿者:ぽんす

編集 履歴 (0)

ぽんす様 返信ありがとうございます。

HP-UXの場合だと、
java.lang.OutOfMemoryErrorだけであればjava側のメモリ不足なのですが
java.lang.OutOfMemoryError: unable to create new native threadとなると
カーネルパラメータのmax_thread_proc の値が必要量より小さい場合にでるそうです。

参考:
http://h50146.www5.hp.com/products/software/development/java/tips/tune/p24.html

topで見た限りでは、javaの-Xmxまでは余裕がありました。
メモリーは2G積んでまして、javaで512mを使用しています。

ですので、カーネルパラメータの設定ではと思った次第です。

投稿者:たかすぃ

編集 履歴 (0)

にゃるほど。

/proc/sys/kernel/threads-max はシステムで動作させられる
最大のプロセス数ですが、Linux のスレッドは1:1モデルなので
これはそのまま最大のスレッド数に一致します。

512MBで1万4千個ものプロセスが動いてるのか?と考えると
イマイチしっくりきませんが...
# 無理とはいいませんし、プログラムによってはそれでも
# たっぷり余裕があるくらいですが

あと、そこのページにも書いてありますがスレッドが起動できない
というのはメモリを使い切ってる場合にも起こります。
# 「メモリ」というと正確さに欠けるかな

投稿者:ぽんす

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。