- - PR -
WeblogicとTomcatの性能差
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-08-22 11:08
ヴァンフォーレ増嶋です。
お世話になっております。 WeblogicServerで稼働中のWebアプリケーションサーバを、フリーのApache Tomcatへ移行するために、現在性能検証を行っております。 同一のサーバ上に、WeblogicとTomcatのインスタンスを、それぞれ片方だけ起動させた状態で、シミュレータを使用して、負荷テストを実施しました。 Weblogicの1/4程度の負荷で、Tomcatがハングしました。 Tomcatのチューニング不足が原因かと思いましたが、サーバログに目立ったエラーも出力されておらず、どこをチューニングするべきかがわかっておりません。Tomcatの設定に詳しい方がおりましたら、ご教授頂けないでしょうか? 【環境】 OS:Windows2000 AdvancedServer CPU:Xeon2.80GHz×1 メモリ:4GB JDK@:1.3.1.19(Weblogicで使用) JDKA:1.6.0(Tomcatで使用) 【Weblogic】 ver:WeblogicServer7.0SP2 JVM起動オプション:client(該当バージョンのWeblogic不具合により-server未設定) ヒープ設定:-XX:NewSize=384m -XX:MaxNewSize=384m -XX:SurvivorRatio=8 -Xms1408m -Xmx1408m -XX:MaxPermSize=128m 最大スレッド数:150 【Tomcat】 ver:tomcat-6.0.2 JVM起動オプション:server ヒープ設定:-XX:NewSize=384m -XX:MaxNewSize=384m -XX:SurvivorRatio=8 -Xms1408m -Xmx1408m -XX:MaxPermSize=128m 最大スレッド数:150 ※コネクタはTomcatのものを使用。アプリケーションに静的コンテンツが少ない点、専用のロードバランサを別で持っている点から、Apache等のHTTPサーバとの連動は想定しておりません。 些細なことでも構いませんので、何かお気づきの点がございましたらご指摘いただけると助かります。以上、よろしくお願い致します。 |
|
投稿日時: 2007-08-22 17:30
まず、何が原因でハングしているのか切り分けてみましょう。
GC ログやスレッドダンプから分かると思います。 GCですか?それとも特定の箇所でデッドロックしているのですか? |
|
投稿日時: 2007-08-24 08:49
ヴァンフォーレ増嶋です。
お世話になっております。 インギ様 ありがとうございます。 現象を再現させて、GCログとスレッドダンプを取得しました。 『侍』(初めて知りました)を使って、スレッドダンプを解析したところ、 java.lang.Thread.State: BLOCKED (on object monitor) at org apache.log4j.Category.addAppender(Category.java:158) - waiting to lock <0x1aa000b0> (a org.apache.log4j.Logger) という状態のスレッドが多数存在しておりました。Log4jの設定?が悪いのか、ロック状態になっているようでした。設定を行っているものに展開し、修正したもらったところ、体感でも速くなり、Weblogicと同等(以上)の性能が出ました。 まずスレッドダンプやGCログから調査をするという癖をつけます。 (詳細な調査もせずにミドルウェアのせいにしてしまい、失礼しました) 余談ですが、Windowsサービスに登録している場合のスレッドダンプのとり方をご存知の方っていますか?今回はコマンドプロンプトから起動させて「Ctrl+break」で取得しました。 <a href="http://yusuke.homeip.net/diary/2006/09/24/1159032652540.html">ココ</a> に載っていたSendSignal.exeを使ってみたんですが、「このコマンドを実行するのに十分な記憶域がありません」というエラーが出て実行できませんでした。。。 |
|
投稿日時: 2007-08-24 12:54
>に載っていたSendSignal.exeを使ってみたんですが、「このコマンドを実行するのに十分な記憶域がありま
>せん」というエラーが出て実行できませんでした。。。 SendSignalを使うときはなんかエラーメッセージ表示されますが、ちゃんとスレッドダンプとれた気がします。 StackTraceはどうでしょう? |
|
投稿日時: 2007-08-27 13:37
ヴァンフォーレ増嶋です。
お世話になっております。 >SendSignalを使うときはなんかエラーメッセージ表示されますが、ちゃんとスレッドダンプとれた気がします 再度標準出力ログを確認してみましたが、出力されておりませんでした。「侍ツール」のサイトに、同様のエラーで使用不可という意見があり、インギ様がおっしゃるように、「エラーメッセージが出力されていてもとれる」という話がでておりました。ただ、Tomcatのバージョンに依存する(?)ようなので、現在の環境(Tomcat6.0)ではとれないのかもしれません。 >StackTraceはどうでしょう? スタンドアローン環境の場合(これに該当します)は会員登録を行っても有償のようだったので導入は見合わせております。(英語を翻訳しつつなので、ひょっとしたら無償で使用できるのかもしれませんが) jstackというコマンドが使用可能という情報を得たので、実行してみましたが、やはり「十分な記憶域がありません」というエラーが出力され、スレッドダンプを取得できませんでした。 スレッドのタイトルからは脱線してしまいましたが、どなたかご存知の方がおりましたらご教授頂きたいと思います。 |
|
投稿日時: 2007-08-27 15:53
>スタンドアローン環境の場合(これに該当します)は会員登録を行っても有償のようだったので導入は見合わせ
>ております。(英語を翻訳しつつなので、ひょっとしたら無 "There is no charge to use any of the software published as a Java Web Start application on the Web site at home or at work, so long as each user installs the product directly from http://www.adaptj.com" とありますので、JavaWebStart でインストール、起動する場合は仕事で利用する場合も無償で利用できますよ 私はそういう状況に陥ったことがないのですが、jstack で取得できないような状況ですと、StackTraceでもとれないかもしれませんね。 [ メッセージ編集済み 編集者: インギ 編集日時 2007-08-27 15:55 ] |
|
投稿日時: 2007-08-27 16:30
ヴァンフォーレ増嶋です。
お世話になっております。 インギ様、さっそくのご回答ありがとうございます。 >JavaWebStart でインストール、起動する場合は仕事で利用する場合も無償で利用できますよ 私の書き方に問題がありました。インターネットに接続できない環境(=スタンドアローン環境)という意味で使っていました。JavaWebStartでの起動はできない状態です。 環境的にはjstackが使用できるはずなので、もう少し原因を調査してみます。 色々とご教授とありがとうございました。 |
|
投稿日時: 2007-08-27 21:18
%CATALINA_HOME%\\bin\\tomcat6w.exeを起動してみて下さい。
ダブルクリックでだめならコマンドラインからこんな感じで。 > tomcat6w //MS//<ServiceName> <ServiceName>はTomcatのWindowsサービス名に置き換えます。 するとタスクトレイにTomcatアイコンが出てくるはずです。 それを右クリックすると"Thread Dump"というオプションがあります。 これで%CATALINA_HOME%\\logsのどっかのファイルにダンプが落ちないでしょうか。 |