jsvc を使って daemon として起動した Tomcat のプロセス数が2つなのは正しい

公開日: : 最終更新日:2014/01/26 Tomcat ,

Tomcat7 を jsvc で起動する手順 で Tomcat7 を jsvc を使って daemon として起動する手順を書きました。
そこまではいいのですが、Tomcat 起動後に ps コマンドでプロセスを確認すると Tomcat のものが2つあって、とても気になっていたので調べました。

結論から書くと、これが正常のようです。

icatch-tomcat-2process_mini

目次

1. jsvc で Tomcat を起動した後の状態

jsvc で Tomcat を起動した後の状態は以下の通りです。

ちなみに次のコマンドで起動しています。

$ sudo /etc/init.d/tomcat7 start

ファイル tomcat7 の内容は Tomcat7 を jsvc で起動する手順 を参照してください。

1-1. ps コマンドでプロセスを確認する

ps コマンドでプロセスを確認した結果は次の通りになっていました。

$ sudo ps -ef | grep catalina
root     16292     1  0 Jan22 ?        00:00:00 jsvc.exec -user tomcat7 -home /usr/java/default -Dcatalina.home=/opt/tomcat/apache-tomcat-7.0.42 -Dcatalina.base=/opt/tomcat/apache-tomcat-7.0.42 -Djava.io.tmpdir=/tmp -wait 10 -pidfile /var/run/tomcat7.pid -outfile /opt/tomcat/apache-tomcat-7.0.42/logs/catalina.out -errfile &1 -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -cp /usr/java/default/lib/tools.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/tomcat-juli.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/commons-daemon.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap
tomcat7  16293 16292  0 Jan22 ?        00:01:35 jsvc.exec -user tomcat7 -home /usr/java/default -Dcatalina.home=/opt/tomcat/apache-tomcat-7.0.42 -Dcatalina.base=/opt/tomcat/apache-tomcat-7.0.42 -Djava.io.tmpdir=/tmp -wait 10 -pidfile /var/run/tomcat7.pid -outfile /opt/tomcat/apache-tomcat-7.0.42/logs/catalina.out -errfile &1 -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -cp /usr/java/default/lib/tools.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/tomcat-juli.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/commons-daemon.jar:/opt/tomcat/apache-tomcat-7.0.42/bin/bootstrap.jar org.apache.catalina.startup.Bootstrap

1-2. netstat コマンドで jsvc に関するネットワーク状態を確認する

次に netstat コマンドで jsvc に関するネットワークの状態を確認しました。
結果は次の通りです。

$ sudo netstat -pan --tcp | grep jsvc
tcp    0    0 :::8080    :::*    LISTEN    16293/jsvc.exec     
tcp    0    0 :::8009    :::*    LISTEN    16293/jsvc.exec

2. 2つのプロセスは親子関係にある

プロセスが2つ立ち上がるのは jsvc のデフォルトで、次のような役割分担があるようです。

  • 一方のプロセスは「コントロールする側」のプロセス → 親プロセス → 上記だと 16292 のプロセス
  • 他方のプロセスは「コントロールされる側」のプロセス → 子プロセス → 上記だと 16293 のプロセス

3. リクエストを捌いているのは子プロセス

netstat の結果を見ると 8080,8009 ポートに送られたリクエストを処理しているのは、16293 のプロセスであることが分かります。
「親が子どもを管理し、頑張って働くのは子ども」という図式になっています。

4. まとめ

jsvc についてよく分かっていないのでとんでもない勘違いをしてしまいました。
もうちょっとその技術の背景を理解していないと、今回のように時間をムダにしてしまうと教訓になりました。。。

5. その他の Tomcat に関する記事

Tomcat に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-journey_1427015543_mini-thumbnail

Tomcatの再起動はworkディレクトリも削除しておいた方が無難

Tomcat を再起動するときは work ディレクトリに作成される「プロジェクト名のディレクトリ」

記事を読む

java-tomcat

Tomcat7 を jsvc で起動する手順

Tomcat7 を jsvc で起動するようにした手順をメモしておきます。 正直あんまり分かっていな

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


四 + = 11

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑