2009年5月5日火曜日

Java VisualVM と TASKKILLを使ってJettyを停止する。

我々NetBeans愛好家にとって、アプリケーションサーバーはGlassFishですが、アプリケーションによってはJettyを使用しているものが多い。
最近話題のGrailsやGoogleApplicationEngineもその例であり、Red5も使用しています。
IDEとしてNetBeansを使用して、GrailsやGoogleApplicationEngine応用の開発を試みたときにJettyに関わる困難に遭遇します。
それはNetBeans上において、JettyはGlassFishやTomcatと違って思うような操作が出来ないことです。
Jettyのステータスが確認できないことも困りますが、特に困ることはJettyが起動したままで、停止できないことです。
一度アプリケーションを試した後に、次のバリエーションを確認しようとすると「既にJettyが起動中でポートを占有しているのでこれ以上進展できません」というメッセージが出ることが度々あります。
こんなときはパソコンをリブートすれば解決するのですが、こんなことをイチイチやっていては時間がどれだけ有っても足りませんし、テンポが悪くて能率が悪くなってしまいます。
こんな時に役に立つのがタイトルに有った「Java VisualVM と TASKKILLを使ってJettyを停止する。」というアイデアでした。ふとJava VisualVMの利用を思いつき、起動中のJettyのプロセス番号を知ることが出来ることが確認できました。











このようにGAEでサンプルを起動したときに、Java VisualVMでそのときのプロセスを確認できます。
サンプルをDOSで起動したときにおいても、コントロール/CでバッチをストップできますがJettyのプロセスが残ることが多いのです。

そこで探したのがWindows上でもプロセス番号を使用してプロセスを停止するコマンドがないか探しましたら、ありました。"TASKKILL"です。
使用法:
   Tasklistで検索したプロセスID1230を終了する
   taskkill /pid 1230
そうしてやってみましたら、我社内の環境では旨くいったのに我が家ではダメでした。何故か?
これは我が家のパソコンはWindows HOME Editionでした。そこで探したのがこれ。
http://www.vector.co.jp/soft/winnt/util/se401845.html
ところが、これだけでは起動できません。
このアプリケーションはMicrosoft .NET Framework Version 2.0に依存していました。
これで万全と思いきや、このフリーウエアは不完全でした。killできないものがありました。
com.google.appengine.tools.development.DevAppServerMain
のプロセスがkillできないのです。
Windows Professionalからコピーしてくるのが最良であることが分かりました。
これで旨く行きました。

1 件のコメント:

stera さんのコメント...

自己レスです。

英語版のブログに"You can stop Jetty Server directly from VisualVM. Use 'Kill Application' VisualVM plugin, which is available on VisualVM Plugin Center."というコメントが入りました。
'Kill Application' というプラグインがあるから"taskkill"等のコマンドは不要ということです。確かめました。
この方が確かに便利ですね。