- PR -

JavaスレッドとLinuxプロセス

1
投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-12-13 21:23
こんにちは、カーニーです。
LinuxのスレッドとJavaに関して教えて下さい。

-- 環境 --
Red Hat Enterprise Linux 3.0 ES
J2SE 1.4.2
----------

Linux(カーネル2.4)ではスレッドはプロセスと同様に扱われるので、psコマンドで各スレッドが見える、と聞いています。
そこで次のようなコードを書いてみました。

ManyThreads.java
コード:

public class ManyThreads extends Thread {
private int cnt;

// コンストラクタ
public ManyThreads(String name, int cnt) {
super(name);
this.cnt = cnt;
}

public static void main(String[] args) {
int numThreads = Integer.parseInt(args[0]);
int cnt = Integer.parseInt(args[1]);
ManyThreads[] threads = new ManyThreads[numThreads];

// スレッド生成
for (int i = 0; i < numThreads; i ++)
threads[i] = new ManyThreads("スレッド番号(" + i + ")", cnt);

// スレッドを開始
for (int i = 0; i < numThreads; i ++)
threads[i].start();
}

public void run() {
for (int i=0;i<cnt;i++) {
System.out.println(this.getName() + " : " + i);
try {
sleep(1000);
} catch (InterruptedException e) {
}
}
}
}



java ManyThreads <起動スレッド数> <ループ回数>

で実行するんですが、実行中にpsで見ても、javaプロセスが1つしか見えないのですよ。
何か勘違いしておりますかね?

実は問題にしたいのはTomcatアプリなんですが、Red Hat Enterprise Linux 3.0 WS環境でjavaプロセスがたくさん起動しているという問題が報告されてまして、ところが自分のところのESでは全然それが再現しなくて困っています。

何かご存知の方がいれば、教えてくださいませ。
よろしくお願いします。

[修正]
AS -> ES

[ メッセージ編集済み 編集者: カーニー 編集日時 2004-12-14 16:15 ]
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-12-14 15:36
引用:
カーニーさんの書き込み (2004-12-13 21:23) より:
java ManyThreads <起動スレッド数> <ループ回数>

で実行するんですが、実行中にpsで見ても、javaプロセスが1つしか見えないのですよ。
何か勘違いしておりますかね?



ps に -T とか H オプションを付けてますか ?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-12-14 15:54
NTPL が有効(デフォルト)になっていると一つのプロセスしか見えないかもしれません。RHEL では独自にカーネル2.4系に NTPL を移植していますので。

LinuxThreads を使うようにすれば ps で見えるかと思います。
マルチプロセッサのマシンであれば積極的に LinuxThreads を使うメリットはあまりありませんが。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-12-14 15:57 ]
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-12-14 16:10
はしもとさん、インギさん、ご返答どうもありがとうございます。

手元に、

Red Hat Enterprise Linux 3.0 ES
Red Hat Enterprise Linux 3.0 WS

の両方を用意できたので実験したところ、WSのほうではちゃんと(?)各スレッドがpsコマンドで見えました!
インギさんのおっしゃるNTPLってやつの差ですかね?

いずれにしてもプログラムに問題があるわけではないようなので一安心です。
どうもありがとうございました。

[修正]
うちにあるのは"AS"ではなく、"ES"でした。初回質問もまとめて訂正。

[ メッセージ編集済み 編集者: カーニー 編集日時 2004-12-14 16:14 ]

[ メッセージ編集済み 編集者: カーニー 編集日時 2004-12-14 16:17 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-12-14 16:32
なるほど。おそらく ES ではマルチプロセッサ環境でスループットが向上するように NTPL がデフォルトで有効になっているんでしょうね。
1

スキルアップ/キャリアアップ(JOB@IT)