Nutch がインストールされていると Tomcat がシャットダウンできない件について


Nutchをインストールするとボクの環境では $CATALINA_HOME/bin/shutdown.sh を実行しても Tomcat が停止されないという問題が出ています。
$CATALINA_HOME/catalina.out に停止メッセージがちゃんと表示されているにもかかわらずです。(正確に言うと「停止します」なので、これから停止処理をするという意味なのでしょうが... )

情報: Coyote HTTP/1.1を http-8080 で停止します


スレッドダンプをとってみたところ Nutch のあるスレッドが 非 daemon スレッドとしてとして実装されていることがわかりました。ここがあやしそうです。Tomcat は停止時に daemon スレッドは自動的に停止させるのですが、非 daemon スレッドの場合にはその停止を待ちます。
なので下の例の"Thread-4"が停止するのを待っていることが考えられます。

$ kill -3 Tomcat のプロセス番号

以下は、$CATALINA_HOME/catalina.out に出力されたログ
2009-06-08 18:50:50
Full thread dump Java HotSpot(TM) Server VM (14.0-b16 mixed mode):

"DestroyJavaVM" prio=10 tid=0x8f84e400 nid=0x35cf waiting on condition [0x000000
00]
   java.lang.Thread.State: RUNNABLE

"TimeLimitedCollector timer thread" daemon prio=10 tid=0x8f86c400 nid=0x361b wai
ting on condition [0x8fb9b000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.lucene.search.TimeLimitingCollector$TimerThread.run(TimeLi
mitingCollector.java:78)

"TP-Processor4" daemon prio=10 tid=0x8f444400 nid=0x3604 in Object.wait() [0x8e2
df000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0xb39db6e8> (a org.apache.jk.common.ChannelSocket)
        at java.lang.Object.wait(Object.java:485)
        at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:306)
        - locked <0xb39db6e8> (a org.apache.jk.common.ChannelSocket)
        at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.ja
va:666)
        at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket
.java:876)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:689)
        at java.lang.Thread.run(Thread.java:619)

"http-8080-Processor24" daemon prio=10 tid=0x8f8e0000 nid=0x35fe waiting on cond
ition [0x8e4bf000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:62)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:689)
        at java.lang.Thread.run(Thread.java:619)

"Thread-4" prio=10 tid=0x085ae400 nid=0x35e5 waiting on condition [0x8f3ff000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.apache.nutch.searcher.FetchedSegments$SegmentUpdater.run(FetchedS
egments.java:104)

"Low Memory Detector" daemon prio=10 tid=0x9002a000 nid=0x35d8 runnable [0x00000
000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread1" daemon prio=10 tid=0x90027c00 nid=0x35d7 waiting on condition
[0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x90026400 nid=0x35d6 waiting on condition
[0x00000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x90024c00 nid=0x35d5 waiting on conditio
n [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x90000800 nid=0x35d4 in Object.wait() [0x901d700
0]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x94886a38> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
        - locked <0x94886a38> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x080d9400 nid=0x35d3 in Object.wait() [0
x90227000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x94893f08> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x94893f08> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x080d5400 nid=0x35d2 runnable

"GC task thread#0 (ParallelGC)" prio=10 tid=0x0805fc00 nid=0x35d0 runnable

"GC task thread#1 (ParallelGC)" prio=10 tid=0x08061000 nid=0x35d1 runnable

"VM Periodic Task Thread" prio=10 tid=0x9002c000 nid=0x35d9 waiting on condition


JNI global references: 623

Heap
 PSYoungGen      total 50944K, used 7953K [0xb0960000, 0xb4190000, 0xb4190000)
  eden space 49024K, 12% used [0xb0960000,0xb0f48128,0xb3940000)
  from space 1920K, 99% used [0xb3940000,0xb3b1c588,0xb3b20000)
  to   space 2432K, 0% used [0xb3f30000,0xb3f30000,0xb4190000)
 PSOldGen        total 28736K, used 3447K [0x94790000, 0x963a0000, 0xb0960000)
  object space 28736K, 11% used [0x94790000,0x94aedd88,0x963a0000)
 PSPermGen       total 16384K, used 16087K [0x90790000, 0x91790000, 0x94790000)
  object space 16384K, 98% used [0x90790000,0x91745d68,0x91790000)


原因らしきものはわかったのですが、対応方法がわかりません。ここまで読んでくれた方すいません...。
しばらくは $CATALINA_HOME/bin/shutdown.sh -froce で停止させる状態が続きそうです。


Nutch インストール方法については以下をみてください。
[Nutch][インストール] Apache プロジェクトのクローラ Nutch を軽く試してみた


ではでは



合コンで出すと女子に意外とウケがイイ。オンライン・ショッピングでも安心のカード。アメリカン・エキスプレス・ゴールド・カード

アメリカン・エキスプレス