- PR -

Redhat9 で LinuxThreads を採用するには

1
投稿者投稿内容
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-01 17:03
いつもお世話になっております。

別スレッドからお邪魔させていただきます。

現在、Redhat9(カーネル:2.4.20-8) にてスレッド方式 LinuxThreads を使用する設定を行っております。

あるサイトで LD_ASSUME_KERNEL=2.4.19 を環境変数に指定することで
NPTL -> LinuxThreads を使用するようになるという記載があり試してみましたが
LinuxThreads になっておりません。

確認方法としては Tomcat(5.0.28) を起動して、
スレッド(ps -aux | grep java で確認)が複数見えるか、
単一スレッドで見えるか判断しました。
(別に確認方法はございますでしょうか?)

なお、RedhatES3(カーネル:2.4.21-4.ELsmp)にて同じ設定をしたところ 、スレッドが複数立ち上がり LinuxThreads にて動作していることが確認できました。

OSの違いなのか、カーネルの違いなのか、はたまた別も問題なのかわかりません。

[テスト環境1] RedhatES3 : 2.4.21-4.ELsmp -> OK
[テスト環境2] Redhat9 : 2.4.20-8 -> NG

何か御存知の方お教えください。

[ メッセージ編集済み 編集者: ひじき 編集日時 2007-02-01 17:06 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-01 17:29
こんにちは。
NPTL か LinuxThreads かは、ライブラリ libc.so や libpthread.so の実体によって変わります。
前者は /lib/tls 以下の soファイルが、後者は /lib/i686 以下の so ファイルが司ります。

動作している Tomcat がどちらのファイルを使っているか、/proc/(javaのPID)/maps ファイルを見れば見当がつきますので、確認してみては如何でしょう。
後、動作中のプロセスの環境変数 /proc/(PID)/environ も確認すると良いでしょう。
 tr '\0' '\n' < /proc/(PID)/environ | grep LD_ASSUME_KERNEL
あたりで。

pthreads(7)によれば、getconfを使うことで、どちらのスレッドモデルになるかが分かるそうで…。

[ メッセージ編集済み 編集者: angel 編集日時 2007-02-01 17:32 ]
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-01 18:26
御返答ありがとうございます。勉強になります。
早速確認してみようと思います!
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-01 20:03
以下コマンドの実行結果です。
引用:

angelさんの書き込み (2007-02-01 17:29) より:
動作している Tomcat がどちらのファイルを使っているか、/proc/(javaのPID)/maps ファイルを見れば見当がつきますので、確認してみては如何でしょう。


[webadmin@xxxxx webadmin]$ view /proc/25424/maps
1 08048000-08053000 r-xp 00000000 03:02 1379379 /usr/local/j2sdk1.4.2_13/bin/java
2 08053000-08055000 rw-p 0000a000 03:02 1379379 /usr/local/j2sdk1.4.2_13/bin/java
3 08055000-0943e000 rwxp 00000000 00:00 0
4 40000000-40015000 r-xp 00000000 03:07 523266 /lib/ld-2.3.2.so
5 40015000-40016000 rw-p 00014000 03:07 523266 /lib/ld-2.3.2.so
6 40016000-40017000 rw-p 00000000 00:00 0
7 40017000-4001d000 r-xp 00000000 03:02 2003085 /usr/local/j2sdk1.4.2_13/jre/lib/i386/native_threads/libhpi.so
8 4001d000-4001f000 rw-p 00005000 03:02 2003085 /usr/local/j2sdk1.4.2_13/jre/lib/i386/native_threads/libhpi.so
9 4001f000-40023000 rw-s 00000000 03:05 160002 /tmp/hsperfdata_webadmin/25424
10 40023000-40026000 r--s 00000000 03:02 493094 /usr/local/j2sdk1.4.2_13/jre/lib/ext/dnsns.jar
11 40026000-40033000 r-xp 00000000 03:07 605030 /lib/i686/libpthread-0.10.so
12 40033000-40036000 rw-p 0000d000 03:07 605030 /lib/i686/libpthread-0.10.so
13 40036000-40076000 rw-p 00000000 00:00 0
14 40076000-40078000 r-xp 00000000 03:07 523277 /lib/libdl-2.3.2.so
15 40078000-40079000 rw-p 00002000 03:07 523277 /lib/libdl-2.3.2.so
16 40079000-401aa000 r-xp 00000000 03:07 605026 /lib/i686/libc-2.3.2.so
17 401aa000-401ad000 rw-p 00130000 03:07 605026 /lib/i686/libc-2.3.2.so
18 401ad000-401b0000 rw-p 00000000 00:00 0
19 401b0000-40780000 r-xp 00000000 03:02 558548 /usr/local/j2sdk1.4.2_13/jre/lib/i386/server/libjvm.so
20 40780000-407db000 rw-p 005cf000 03:02 558548 /usr/local/j2sdk1.4.2_13/jre/lib/i386/server/libjvm.so
21 407db000-407f0000 rw-p 00000000 00:00 0
22 407f0000-40802000 r-xp 00000000 03:07 523281 /lib/libnsl-2.3.2.so
23 40802000-40803000 rw-p 00011000 03:07 523281 /lib/libnsl-2.3.2.so
24 40803000-40805000 rw-p 00000000 00:00 0
25 40805000-40826000 r-xp 00000000 03:07 605028 /lib/i686/libm-2.3.2.so
26 40826000-40827000 rw-p 00020000 03:07 605028 /lib/i686/libm-2.3.2.so
27 40827000-40834000 r-xp 00000000 03:02 1839200 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libverify.so
28 40834000-40836000 rw-p 0000c000 03:02 1839200 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libverify.so
29 40836000-40841000 r-xp 00000000 03:07 523287 /lib/libnss_files-2.3.2.so
30 40841000-40842000 rw-p 0000a000 03:07 523287 /lib/libnss_files-2.3.2.so
31 40842000-4085e000 r-xp 00000000 03:02 1839201 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libjava.so
32 4085e000-40860000 rw-p 0001b000 03:02 1839201 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libjava.so
33 40860000-4086e000 r-xp 00000000 03:02 1839203 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libzip.so
34 4086e000-40870000 rw-p 0000d000 03:02 1839203 /usr/local/j2sdk1.4.2_13/jre/lib/i386/libzip.so
35 40870000-40967000 r--s 00000000 03:02 591601 /usr/local/jakarta-tomcat-5.0.28/common/endorsed/xercesImpl.jar
36 40967000-40986000 r--s 00000000 03:02 591602 /usr/local/jakarta-tomcat-5.0.28/common/endorsed/xml-apis.jar
37 40986000-42334000 r--s 00000000 03:02 558601 /usr/local/j2sdk1.4.2_13/jre/lib/rt.jar
引用:

後、動作中のプロセスの環境変数 /proc/(PID)/environ も確認すると良いでしょう。
 tr '\0' '\n' < /proc/(PID)/environ | grep LD_ASSUME_KERNEL
あたりで。


[webadmin@xxxxx webadmin]$ tr '\0' '\n' < /proc/25424/environ | grep LD_ASSUME_KERNEL
LD_ASSUME_KERNEL=2.4.19

/proc/(javaのPID)/maps を見る限りでは /lib/i686/ があるため LinuxThreads にて動作しているように見えます。


引用:

※pthreads(7)によれば、getconfを使うことで、どちらのスレッドモデルになるかが分かるそうで…。



ですが、次のコマンドを実行したら NPTL 0.29 と返ってきました。

[webadmin@xxxxx webadmin]$ getconf GNU_LIBPTHREAD_VERSION
NPTL 0.29

ちなみに、RedhatES3でも同じことをやってみたら LinuxThreadsが返ってきました。
* getconf GNU_LIBPTHREAD_VERSION
[テスト環境1] RedhatES3 : 2.4.21-4.ELsmp -> linuxthreads-0.10
[テスト環境2] Redhat9 : 2.4.20-8     -> NPTL 0.29

この結果をもとにどう判断してよいのか困っております。御教授ください。


[ メッセージ編集済み 編集者: ひじき 編集日時 2007-02-01 20:15 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-03 15:50
ひじきさんの直前の書き込みにあるコマンド結果からは、Linux Threadsで動作していると判断できると思います。
なお、getconf に関しては、同じ環境変数条件で試す必要があります。
RedHat9 では NPTL がデフォルトですから、単に実行した場合には NPTL の表示があって然るべし、です。
“LD_ASSUME_KERNEL=2.4.19 getconf GNU_LIBPTHREAD_VERSION”のように環境変数をセットして実行した結果を見ましょう。( 恐らく linuxthreads の表示になるでしょう )

で、1プロセスしか見えない原因については…、なんとも思いつきません。
grep で引っかかっていない可能性も一応考えて、grep を通さずに全プロセス分の情報を見てみるか、親子関係の分かる pstree を使ってみるか、位しか。
お役に立てず申し訳ないですが。
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-05 19:45
引用:

angelさんの書き込み (2007-02-03 15:50) より:
ひじきさんの直前の書き込みにあるコマンド結果からは、Linux Threadsで動作していると判断できると思います。


了解致しました。御教授いただきありがとうございます。

引用:

なお、getconf に関しては、同じ環境変数条件で試す必要があります。
RedHat9 では NPTL がデフォルトですから、単に実行した場合には NPTL の表示があって然るべし、です。
“LD_ASSUME_KERNEL=2.4.19 getconf GNU_LIBPTHREAD_VERSION”のように環境変数をセットして実行した結果を見ましょう。( 恐らく linuxthreads の表示になるでしょう )


[webadmin@xxxxx webadmin]$ LD_ASSUME_KERNEL=2.4.19 getconf GNU_LIBPTHREAD_VERSION
NPTL 0.29
と表示されました。何故でしょう。。。。

引用:

で、1プロセスしか見えない原因については…、なんとも思いつきません。
grep で引っかかっていない可能性も一応考えて、grep を通さずに全プロセス分の情報を見てみるか、親子関係の分かる pstree を使ってみるか、位しか。
お役に立てず申し訳ないですが。


pstree -p で確認。

* LD_ASSUME_KERNEL 設定前
[webadmin@xxxxx webadmin]$ ps -aux | grep java
webadmin 4525 87.6 6.9 723944 71212 pts/0 R 19:36 0:05 /usr/local/java/bin/java -server -Xms512m -Xmx512m -XX
:NewRatio=1 -XX:SurvivorRatio=1 -verbose:gc -Djava.endorsed.d
irs=/usr/local/tomcat/common/endorsed -classpath /usr/local/java/lib/tools.jar:/usr/lo
webadmin 4537 0.0 0.0 4576 664 pts/0 S 19:36 0:00 grep java
[webadmin@xxxxx webadmin]$ pstree -p 4525
java(4525)

* LD_ASSUME_KERNEL 設定後
[webadmin@xxxxx webadmin]$ ps -aux | grep java
webadmin 4597 96.0 5.7 721684 59336 pts/0 R 19:40 0:03 /usr/local/java/bin/java -server -Xms512m -Xmx512m -XX
:NewRatio=1 -XX:SurvivorRatio=1 -verbose:gc -Djava.endorsed.d
irs=/usr/local/tomcat/common/endorsed -classpath /usr/local/java/lib/tools.jar:/usr/lo

[webadmin@xxxxx webadmin]$ pstree -p 4597
java(4597)---java(4598)-+-java(4599)
|-java(4600)

中略

|-java(4641)
`-java(4642)

設定後は子プロセスまで表示されました。
ps では何故見えないのでしょう...(なぞ)
とりあえずLinuxThreadsになっているようですのであまり深追いしないでおきます...

ありがとうございました。

1

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