如何检测整个工作流程中是否调用了特定的系统调用?

如何检测整个工作流程中是否调用了特定的系统调用?

编辑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。

相关内容