2017-01-30 10 views
1

神秘的な理由から、Hadoopクラスタを構築するマシンはSIGHUPの波を経験しているようです。すべてのボックスはcentos 6.7/8とC​​loudera(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.pyrun_orchestrator.shの両方のマシンにpython orchestrator.py > /dev/nullという文字列をデプロイし、run_orchestrator.shsshでトリガーします。

これまでのところ、私は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です。

+0

モデムが接続されている電話機が電話を切る(「HUP」)ときには、「SIGHUP」が送信されます。現代的に言えば、SSHが終了するとバックグラウンドで実行されているプログラムはSIGHUPを受け取るでしょう。 –

+1

も参照してください:https://linux.die.net/man/1/nohup –

+0

フィードバックいただきありがとうございます! 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

答えて

0

/var/log/kern.logまたはdmesgには何かがありますか?それは単一のマシン上で起こりますか?

Robが言うように、SIGHUPは、SIGKILLとなるOOMカーネルのkillとは大きく異なります。

関連する問題