神秘的な理由から、Hadoopクラスタを構築するマシンはSIGHUP
の波を経験しているようです。すべてのボックスはcentos 6.7/8とCloudera(CM + CDH)5.9を実行しています。python、bash、straceを使ってSIGHUP送信者を検出する方法
なSIGHUP
波が一台のマシンで発生した場合、私はプロセスが(Hadoopの、ntpd
などのOSにはいくつかのネイティブからいくつかを)立ち往生、とSIGHUP
の痕跡がいくつかのファイルに記録されて参照してください。 VAR/log/messagesに/からの一例は、問題をさらに理解するために
Jan 30 10:19:43 hadoop21 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2451" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Jan 30 10:19:43 hadoop21 ntpd[135740]: ntpd exiting on signal 1
Jan 30 10:19:43 hadoop21 init: tty (/dev/tty5) main process (134662) killed by HUP signal
...
のように見える、私は(私はこれが究極の情報私は本当にわからないSIGHUP
を送信するプロセスのPIDを取得しようとすることを決めました必要だが、調査はどこかから始める必要がある)。
strace
が収集した最後の行には興味深い情報が含まれているという前提の下で、簡単なPythonスクリプト、
sighup_victim.py
を開始し、それに
strace
を取り付ける考えました。
22:04:42.791561 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=69035, si_uid=0} ---
22:04:42.791910 +++ killed by SIGHUP +++
私は成功として解釈:私は端末からorchestrator.py
を実行して、手動で信号をトリガした場合$kill -SIGHUP <p.pid>
に私はトレースログでこれを取得するように私は、それゆえ
orchestrator.py
import subprocess
p=subprocess.Popen(["python","sighup_victim.py"])
q=subprocess.Popen(["strace","-tt","-o","tracelog","-p",str(p.pid)])
、orchestrator.py
経由でプログラム的にそれを行います - strace
実際にはSIGHUP
が犠牲者とその作者に送られたと報告することができます。
orchestrator.py
とrun_orchestrator.sh
の両方のマシンにpython orchestrator.py > /dev/null
という文字列をデプロイし、run_orchestrator.sh
をssh
でトリガーします。
これまでのところ、私はSIGHUP
波が来るのを見るする4 4のうちの機会に、私は(予想通り)死んsighup_victim.py
を得るが、tracelog
の最後のエントリはstrace
かのよう
22:11:46.145040 select(0, NULL, NULL, NULL, {60, 0} <detached ...>
ですプロセスは常にsighup_victim.py
の前に殺されました。私にとっては、この偶然のことは単に問題を完全に理解していないと言っているだけです。
私はこのアイデア(具体的にはaudit
を使用しています)を実装する別の方法を見ていますが、何が起こっているのかをよりよく理解するのを手伝ってもらえますか?
ありがとうございます!
問題の説明(さらに長い)はat Cloudera community forumです。
モデムが接続されている電話機が電話を切る(「HUP」)ときには、「SIGHUP」が送信されます。現代的に言えば、SSHが終了するとバックグラウンドで実行されているプログラムはSIGHUPを受け取るでしょう。 –
も参照してください:https://linux.die.net/man/1/nohup –
フィードバックいただきありがとうございます! i)私が理解できる限り、これはSIGHUP [リンク](http://stackoverflow.com/questions/19052354/sighup-for-reloading-configuration)のほんの一例です。 ii) 'ssh'は、' orchestrator.py'を実行するのに必要な時間だけセッションを開いたままにしておき、両方が完了します。しかし、 'popen'は' sighup_victim.py'が[link](https://docs.python.org/2/library/subprocess.html)に残っていることを保証しています。実際に見ることができます。 iii) 'strace'を' sighup'しようとしましたが、 'shell = False'で' Popen'を呼び出していましたが、代わりに 'shell = True'を試してみます。 – fdeltedesco