ワークフロー全体で特定のシステムコールが呼び出されることをどのように検出しますか?

ワークフロー全体で特定のシステムコールが呼び出されることをどのように検出しますか?

編集者No.1

私の仕事は、ミラーリング、つまりrsyncとrshを使用して、更新されたデータをマスターからすべてのミラーにコピーすることです。しかし、rsyncとrshの間にわずかな遅延が見られました。私の考えでは、遅延の原因がリバースDNSルックアップのためであるようです。だから、メインサーバーがミラーサーバーに接続されたときにリバースDNSルックアッププロセスに費やされた時間を記録したいと思います。

私のアプリケーションでリバースDNSルックアップシステムコールが呼び出されるかどうかを検出したいと思います。それでは、どのコマンドが役に立ちますか?

リバースDNSルックアップの場合、システムコールはgetnameinfo()です。他の人がいれば教えてください。

私のプロジェクトでこのシステムコールを追跡したいと思います。どのコマンドを使用できますか?

私はltrace / straceコマンドがスクリプトが終了するまで呼び出されるすべてのシステム呼び出しを追跡できることを知っていますが、私のプロジェクトではすべてのシステム呼び出し追跡が使用されていないため、追加のオーバーヘッドが発生します。

rsyncとrshの間にリバースDNSルックアップに費やされた時間を記録したいと思います。

私の問題を解決するのに役立ちます。

答え1

まず、getnameinfoシステムコールではなくglibc関数です。

ただし、とにかくwiresharkトラフィック監視を実行すると、DNSクエリで機能します。

編集する

アプリケーションをプロファイリングするには、gprofおそらくこのガイドを読んでください

答え2

通常、サーバーはクライアントIPのリバースDNSルックアップを実行し、クライアントがトレースを数回実行してもこれを通知しません。

あなたがする必要があるのは、サーバーの構成またはネットワーク活動を確認することです。straceそして、同様のことは、tcpdumpWiresharkまたはWiresharkを使用してネットワークアクティビティを表示することとはまったく一致しません。

関連情報