我很困惑。我们的一位 DBA 报告了 LDAP 连接错误的问题。我想我应该开始从桁架追踪它,看看它到底连接到了什么,但我所看到的对我来说毫无意义。
这是有关文件描述符 35 的 truss 输出的完整摘录:
# grep 35 /tmp/11834.2.truss | grep -v write.33
/3: read(35, " 0", 1) = 1
/3: read(35, "\f", 1) = 1
/3: read(35, "020101 `0702010304\080\0", 12) = 12
/9: write(35, " 084\0\0\010020101 a84\0".., 22) = 22
/3: read(35, " 0", 1) = 1
/3: read(35, "81", 1) = 1
/3: read(35, "9E", 1) = 1
/3: read(35, "020102 c819804 : c n = a".., 158) = 158
/9: write(35, " 084\0\001 8020102 d84\0".., 340) = 340
/3: read(35, " 0", 1) = 1
/3: read(35, "05", 1) = 1
/3: read(35, "020103 B\0", 5) = 5
/3: close(35) = 0
/6: read(35, " 0", 1) = 1
/6: read(35, "\f", 1) = 1
/6: read(35, "020101 `0702010304\080\0", 12) = 12
/8: write(35, " 084\0\0\010020101 a84\0".., 22) = 22
/6: read(35, " 0", 1) = 1
/6: read(35, "81", 1) = 1
/6: read(35, "98", 1) = 1
/6: read(35, "020102 c819204 4 c n = M".., 152) = 152
/9: write(35, " 084\0\001 @020102 d84\0".., 348) = 348
/6: read(35, " 0", 1) = 1
/6: read(35, "05", 1) = 1
/6: read(35, "020103 B\0", 5) = 5
/6: close(35) = 0
/6: read(35, 0x7FFFEFB4FFB4B, 1) Err#131 ECONNRESET
/6: close(35) = 0
/6: read(35, " 0", 1) = 1
/6: read(35, "\f", 1) = 1
/6: read(35, "020101 `0702010304\080\0", 12) = 12
/8: write(35, " 084\0\0\010020101 a84\0".., 22) = 22
/6: read(35, " 0", 1) = 1
/6: read(35, "81", 1) = 1
/6: read(35, "A3", 1) = 1
/6: read(35, "020102 c819D04 ? c n = a".., 163) = 163
/8: write(35, " 084\0\001 B020102 d84\0".., 350) = 350
/6: read(35, " 0", 1) = 1
/6: read(35, "05", 1) = 1
/6: read(35, "020103 B\0", 5) = 5
/6: close(35) = 0
如果我在此期间在进程上运行 pfiles,则永远不会看到 FD35。从我在桁架输出中可以看出,它从未打开过,但在此跟踪期间它被读取、写入和关闭两次,并且之后继续使用。我想知道它正在与什么对话以便运行网络跟踪......
有没有人以前见过类似的行为并可以帮助解释它?必须承认,公司的“如果没有坏,就不要修补它”的政策可能会在这里发挥作用......
任何信息都非常感激。
答案1
进程不需要打开 fd 就可以使用它。
如果父进程让子进程继承打开的文件描述符,它就会起作用。
顺便说一句:我会信任truss
并检查/proc/<pid>/fd/
打开的文件描述符列表。
答案2
希利的评论对于正在发生的事情来说是准确的。不过我要稍微扩展一下。
文件描述符是从 zsched 继承的。在 while true 循环内运行“date; pfiles”显示文件描述符,尽管它不允许桁架同时跟踪同一进程。但是,它确实显示了错误发生时哪个客户端正在连接。
无法监听本地区域内的网络适配器。转到全局区域,我能够监听流向该网络适配器上特定端口的流量。这使我能够使用 Wireshark 追踪问题并识别问题。