snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FC4 で Tomcat が停止できない

Fedora Core 4 にインストールした Tomcat 5.0.28 を catalina.sh stop で停止しようとしたら出来ず、ログを見ると以下の例外が発生していた。

Catalina.stop: java.net.SocketException: Invalid argument or cannot assign requested address
java.net.SocketException: Invalid argument or cannot assign requested address
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
        at java.net.Socket.connect(Socket.java:452)
        at java.net.Socket.connect(Socket.java:402)
        at java.net.Socket.<init>(Socket.java:309)
        at java.net.Socket.<init>(Socket.java:124)
        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:410)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:336)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
とりあえず telnet で 8005 番ポートにつないで停止。

127.0.0.1:8005 に接続できるか出来ないかの問題っぽいが、 iptables で DROP している訳でもなく、そういえば SELinux が関係しているのかと 考えて無効にしてみたら catalina.sh stop できた。 しかし Tomcat を利用する時は SELinux を無効にするというのでは問題なので 別の手を考える。

Tomcat の LISTEN 状態は netstat -a --inet しても表示されず、 --inet6 だと表示される事から IPv6 が有効になっている事がわかる。 そういえば Java の IPv6 周りはヤヤコシイと聞くので、 JVM に IPv4 を優先するオプションを付けてみる。

JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
この状態で Tomcat を起動すると netstat -a --inet で LISTEN 状態が確認でき、 catalina.sh stop で正常に停止する事が確認できた。 SELinux の設定については勉強不足でよく解らないし、IPv6 を使う予定は無いので、 とりあえずこの方法で良しとする。

java.net.preferIPv4Stack システム・プロパティを true にすると、 IPv6 アドレスより IPv4 アドレスを優先する。 Java は標準で IPv6 が有効なシステムでは IPv6 で繋ごうとするらしいが、 繋げなかった場合 IPv4 なら繋がるかを試してくれないらしい。本当か ?

FC4 の lo インターフェースには IPv6 アドレスが割り当てられている。 これが無ければ java.net.preferIPv4Stack=false でも bind 出来るのだろうか。

  • Fedora Core 4
  • j2sdk 1.4.2_08
  • Tomcat 5.0.28

2006/01/02 更新
いつの間にか、java.net.preferIPv4Stack=true にしなくても Tomcat を正常に 停止できるようになっていた。よく解らないが SELinux のルールをアップデートした からかもしれない。

スポンサーサイト

Top

HOME

snbhsmt

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。