web-dev-qa-db-ja.com

決して死なないプロセスを殺すには?

問題

Javaプロセスがあり、SIGTERMでもSIGKILLでも死なない。

logstash  2591     1 99 13:22 ?        00:01:46 /usr/bin/Java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -Xmx1g -Xms256m -Xss2048k -Djffi.boot.library.path=/usr/share/logstash/vendor/jruby/lib/jni -Xbootclasspath/a:/usr/share/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/usr/share/logstash/vendor/jruby -Djruby.lib=/usr/share/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.Shell=/bin/sh org.jruby.Main --1.9 /usr/share/logstash/lib/bootstrap/environment.rb logstash/runner.rb --path.settings /etc/logstash

シグナルを受信するたびにリスポーンします。

Sep 15 13:22:17 test init: logstash main process (2546) killed by KILL signal
Sep 15 13:22:17 test init: logstash main process ended, respawning

奇妙に聞こえるかもしれませんが、サーバーを再起動してもまだ死ぬことはありませんです。

以下のコマンドを使用して、initスクリプトを介してプロセスが実行されました。

NAME=logstash
LS_USER=logstash
LS_OPTS="--path.settings=/etc/logstash"
LS_PIDFILE=/var/run/$NAME/$NAME.pid
LS_STDERR="/var/log/logstash/logstash.stderr"
DAEMON="/usr/share/logstash/bin/logstash"

runuser -s /bin/sh -c "exec $DAEMON ${LS_OPTS}" ${LS_USER} &>${LS_STDERR} &

OSを再インストールする以外に、このプロセスを強制的に強制終了する方法はありますか?

環境

処理する :

logstash 5.0.0~alpha5

OS:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Javaバージョン:

openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

サーバーはMicrosoft Azureにデプロイされます。

26
Yu Watanabe

init:KILLシグナルによってkillされたlogstashメインプロセス(2546)

実際、あなたのプロセスはここで止まります。

init:logstashメインプロセスが終了し、再生成中

new logstashプロセスは、initによって開始され、置き換えられます。


これは、logstashの再起動を担当する制御プロセスも示しています:init。 (RHEL 6およびCentOSでUpstartの場合)プロセスは/etc/inittabまたは/etc/init/logstash.conf(または同様の)のドロップインファイルから開始される可能性が高く、適切なツールinitctlであり、killではありません。

initctl listを試して、logstashが存在するかどうかを確認します。

その後、initctl stop logstashが停止します。

/ etc/initのconfファイルを編集または削除すると、永続的に無効にできます。

serviceおよびchkconfigコマンドを使用してジョブを制御することもできます。

78
HBruijn

これはおそらくlogstash-relayが実行されているためです... stop logstash-relayを試してみてください

この後、psがあるかどうかを確認しますinitctl list | sort

これがお役に立てば幸いです。それは私のために問題を解決しました!

ありがとう

VR

0
vrousseu