我有 perl 多线程脚本(“assp 反垃圾邮件代理”),它使用多个 perl 库。大约 2 小时后,在我的一台服务器上,脚本开始生成大量 futexed,这会消耗大量 cpu 功率。在其他服务器上,这种情况不会发生,因此它可能是在服务器资源出现某种竞争条件后开始发生的。向开发人员询问如何调试此问题的任何信息都没有得到回应。
使用 strace 或 sysdig 我发现这个 perl 脚本开始发出大量的 futex 请求。我如何调试它并找出所有这些内核 futex 是在哪个文件中生成的?我尝试过 sysdig 和 oprofile 但没有找到任何方法来检查它。
10 秒运行 strace:
# strace -f -p 6130 -c
Process 6130 attached with 8 threads - interrupt to quit
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
57.44 3.265528 16493 198 nanosleep
28.53 1.622291 19313 84 poll
8.54 0.485535 1 787123 169255 futex
5.28 0.300018 75005 4 restart_syscall
0.21 …Run Code Online (Sandbox Code Playgroud) kernel ×1