スイッチで接続された 2 台のマシンがあります。マシン A に「SXC_SERVER」と呼ばれる一般的なサーバー アプリケーションがあり、「SXC_CLIENT」と呼ぶマシン B の対応するアプリケーションで「SXC_SERVER」を調べます。私がやろうとしていることは2つあります:
- まず、 tcpdumpを介して SXC_SERVER と SXC_CLIENT の相互作用のトラフィック フローを取得します。この 2 つのやり取りは単純な GET と RESPONSE ですが、トラフィック トレースが必要です。
- 次に、各対話/反復中に SXC_SERVER プロセスの Resident Set Size (RSS) の使用状況をログに記録したいと考えています。
さらに、通信のトラフィック トレースと SXC_SERVER プロセスのメモリ使用ログが 1 つだけ必要なわけではありません。非常に多くのことをする!しかし、簡単にするために、ここで 10 を実行したいとしましょう。
SCX_CLIENT から SXC_SERVER への問い合わせ、 tcpdumpトラフィック キャプチャ、および SXC_SERVER ロギングの RSS メモリ使用量のすべてを停止および開始するために両方のマシンにいる必要があるため、これは非常に労力がかかるため、自動化スクリプトを作成したい.
しかし!私はプログラマーでもなければ、ソフトウェアの専門家でもありません...(くそー)
ただし、この自動化を監視する別のクライアント/サーバー プログラムをイメージすることはできます。これを AUTO_SERVER および AUTO_CLIENT と呼ぶことができます。私の考えでは、マシン B は AUTO_CLIENT を実行し、マシン A は AUTO_SERVER を実行します。両方の目的は、自動化、つまりtcpdumpの停止と開始、およびマシン B が SXC_CLIENT を使用して SXC_SERVER にクエリを実行する前のマシン A での SXC_SERVER プロセスのメモリ ロギングを容易にすることです (私に従っている場合)。
事実上、SXC_SERVER から SXC_CLIENT GET/RESPONSE へのインタラクションを 1 回実行すると、次のようになります。
- n1.pcapという 1 つのトラフィック キャプチャ *.pcap ファイル
- n1.csvと呼ばれる (プロセスに関連付けられた RSS の) 1 つのメモリ ログ ダンプ。
私はプログラマーでもソフトウェアの専門家でもありませんが、次のように、これを達成するための大まかな方法を (私の能力の範囲内で) 見ることができます。
マシン A: AUTO_SERVER
BEGIN:
msgRecieved = open socket(listen on port *n*)
DO
1. wait for machine A to tell me when to start watch (as in the program) to log RSS memory usage of the SXC_SERVER process using hardcoded command:
watch -n 0.1 'ps -p $(pgrep -d"," -x snmpd) -o rss= | awk '\''{ i += $1 } END { print i }'\'' >> ~/Desktop/mem_logs/mem_i.csv
UNTIL (messageRecieved == "FINISH")
quit
END.
マシン B: AUTO_CLIENT
BEGIN:
open socket(new)
for i in 10, do
1. locally start tcpdump with hardcoded hardcoded tcpdump command with relevant filter to only capture the SXC_SERVER-to-SXC_CLIENT traffic and set output flag to capture all traffic to a PCAP file called n*i*.pcap where *i* is the integer of the current for loop, saving the file in folder "~/Desktop/test_captures/".
2. Send the GET request to SXC_SERVER
3. wait for RESPONSE reply from SXC_SERVER
4. after recieved reply tell machine B to stop watch command
i++
5. send string "FINISH" to machine A.
END.
ご覧のとおり、これは、両方のマシンで別の小さなクライアント/サーバーのようなプログラム (ここでは AUTO_SERVER および AUTO_CLIENT と呼びます) を使用することで実現できると思います。非常に大雑把な疑似コードの設計は、一目瞭然です。
ここにある小さなクライアント/サーバーソケットプログラムを見つけました: http://www.velvetcache.org/2010/06/14/python-unix-sockets編集すれば適切かもしれませんが、私はそうではありませんこれをどれだけ正確に達成できるかを確認してください。あなたがいくらかの援助を提供できるかもしれないところです。
Python はこの自動化を行うことができますか? 単一のbashスクリプトで実行できますか? 私はこれで正しい道を進んでいると思いますか?または、役立つ提案はありますか?
よろしく。