- PR -

Tomcat アプリケーションハングについて

投稿者投稿内容
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-01-12 15:29
少し脱線するのですが

NPTLの件ですが、環境変数を設定するだけなのですからJAVA VMのバージョンアップする
より、簡単に試せるので実施されてはいかがでしょう。
影響を受けるのは、環境変数を設定したプロセスから起動されたプロセス群に限られる
ので、設定したシェルから起動したTomcatだけに限定してテストできるのではない
でしょうか?
参照のURLは読んだのですが、一般の環境変数を引き継ぐ範囲への影響とおもえるの
ですが、システム全体や他のサービスに影響を与えるのでしょうか?
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-01-12 15:54
引用:

progmanさんの書き込み (2007-01-12 15:29) より:
NPTLの件ですが、環境変数を設定するだけなのですからJAVA VMのバージョンアップする
より、簡単に試せるので実施されてはいかがでしょう。
影響を受けるのは、環境変数を設定したプロセスから起動されたプロセス群に限られる
ので、設定したシェルから起動したTomcatだけに限定してテストできるのではないでしょうか?
参照のURLは読んだのですが、一般の環境変数を引き継ぐ範囲への影響とおもえるの
ですが、システム全体や他のサービスに影響を与えるのでしょうか?


勉強不足ですみません。よくよく考えれば起動するユーザの環境変数に設定してあげれば、他のサービスへの影響等関係ありませんね。

先ほど、開発環境にて export LD_ASSUME_KERNEL=2.4.19 を設定し、Tomcat を起動してみましたところ、正常に起動致しました。軽くテストしましたが動作上問題なさそうです。

1つ設定前と異なる点といえば ps で Tomcat プロセスをみるところ
以前はプロセスが1つでしたが、複数のプロセスが起動しているようです。
これは NPTL -> LinuxThreads 変更したことによるものと考えてよいでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-12 16:05
>以前はプロセスが1つでしたが、複数のプロセスが起動しているようです。
>これは NPTL -> LinuxThreads 変更したことによるものと考えてよいでしょうか。
はい、そういうことです。
http://yusuke.homeip.net/diary/2006/09/24/1159030365101.html
#スレッド数の設定も簡単なので直すことを強くオススメしますが・・・

トラブルが解消されると良いですね。
様子を見て是非経過をおしえてください。

[ メッセージ編集済み 編集者: インギ 編集日時 2007-01-12 16:06 ]
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-01-12 16:19
引用:

インギさんの書き込み (2007-01-12 16:05) より:
>以前はプロセスが1つでしたが、複数のプロセスが起動しているようです。
>これは NPTL -> LinuxThreads 変更したことによるものと考えてよいでしょうか。
はい、そういうことです。
http://yusuke.homeip.net/diary/2006/09/24/1159030365101.html
#スレッド数の設定も簡単なので直すことを強くオススメしますが・・・

トラブルが解消されると良いですね。
様子を見て是非経過をおしえてください。


御教授いただきありがとうございます。
試してみて結果を御報告させていただきます。

スレッド数につきましてはエンドユーザに交渉後、実施してみます。
これで直ることを強く望みます!!
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-01 14:58
テスト環境 RedhatES3(カーネル:2.4.21-4.ELsmp)にて環境変数に LD_ASSUME_KERNEL=2.4.19 を設定し、Tomcatを起動したところ、スレッドが複数立ち上がり LinuxThread にて動作していることが確認できた(前書き込み参照)のですが、
Redhat9(カーネル:2.4.20-8)環境にて同様の設定をしたところ、スレッドが複数立ち上がることを確認できませんでした。

何か制限があるのでしょうか。

本番環境はRedhat9(カーネル:2.4.20-9smp)なのですが
テスト環境のRedhat9(カーネル:2.4.20-8)にて検証がとれないことには
本番に設定できません。

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

何か御存知の方お教えください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-02-01 16:22
Java というよりは Linux そのものの問題のようですので、こちらへ質問されてはいかがでしょう。
ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-02-01 16:30
ご回答ありがとうございます。確かにそうですね。
早速書き込んでみます。

ひじき
常連さん
会議室デビュー日: 2006/12/04
投稿数: 22
投稿日時: 2007-04-17 19:17
報告させていただきます。
NPTL -> LinuxThreads へ変更し、2ヶ月間問題なく動作しておりましたが
先日レスポンスが低下するという現象が発生致しました。

一度は解決したと思ったのですが。。。

top にてプロセスを見ると java の CPU 使用率が 99.9% になっておりました。
プログラム的に重い処理は特に走っておりません。

問題なのは gc のログを確認するところ full gc が頻発しているということです。
-----
54512.824: [GC 246940K->201117K(436928K), 36.4871340 secs]
54551.533: [Full GC 288541K->153693K(436928K), 6.5452110 secs]
54559.952: [GC 241117K->187101K(436928K), 0.2990880 secs]
54561.730: [Full GC 274525K->201461K(436928K), 1.9945010 secs]
54565.006: [Full GC 288885K->225094K(436928K), 2.2233510 secs]
中略
54900.143: [Full GC 436927K->424246K(436928K), 2.9855000 secs]
54906.256: [Full GC 436923K->425334K(436928K), 2.3728340 secs]
-----

jvmstat で確認してみましたが
Old、New 領域共に FULL になっており GC 後もメモリが開放されていない
ような感じに見えます。

現在、設定されている JAVA の起動オプションは以下の通りです。
export CATALINA_OPTS="-server -Xms512m -Xmx512m -XX:NewRatio=1 -XX:SurvivorRatio=1 -verbose:gc -XX:+PrintGCTimeStamps -Xloggc:/var/log/gc/gc.log"

なお、catalina.out には OutOfMemory が出力されております。
-----
[Unloading class sun.reflect.GeneratedMethodAccessor789]
[Unloading class sun.reflect.GeneratedMethodAccessor790]
[Unloading class sun.reflect.GeneratedMethodAccessor791]
org.apache.commons.dbcp.SQLNestedException: Connect failed, cause:
java.lang.OutOfMemoryError
org.apache.commons.dbcp.SQLNestedException: Connect failed, cause:
java.lang.OutOfMemoryError
org.apache.commons.dbcp.SQLNestedException: Connect failed, cause:
java.lang.OutOfMemoryError
java.lang.OutOfMemoryError
org.apache.commons.dbcp.SQLNestedException: Connect failed, cause:
java.lang.OutOfMemoryError
java.lang.OutOfMemoryError
java.lang.OutOfMemoryError
2007/04/17 16:54:32 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
致命的: org.apache.jk.common.SocketConnection@1c4bcda を実行中に例外 (java.lang.OutOfMemoryError) をキャッチしたので、スレッドを終了します
-----

私的な見解は jk2 モジュールの辺か、javaの起動オプションの辺を
探れば何かわかるかもしれないと踏んでいるのですが。。。

今回の現象といままでの現象で違うところは、
CPU使用率が 100% であるということと、
GCが頻発しているというところです。

何かわかる方、ご教授いただければ幸いです。
宜しくお願い致します。

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