혼란스러워요. DBA 중 한 명이 LDAP 연결 오류 문제를 보고했습니다. 나는 그것이 정확히 무엇과 연결되어 있는지 알아보기 위해 트러스에서 그것을 추적하기 시작할 것이라고 생각했지만, 내가 본 것은 나에게 이해가 되지 않았습니다.
다음은 파일 설명자 35에 대한 트러스 출력의 전체 발췌입니다.
# 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
Healy의 의견은 현재 일어나고 있는 상황에 대한 정확합니다. 그러나 나는 그것에 대해 조금 확장할 것입니다.
파일 설명자는 zsched에서 상속됩니다. while true 루프 내에서 "date;pfiles"를 실행하면 파일 설명자가 표시되지만 truss는 동시에 동일한 프로세스를 추적할 수 없습니다. 그러나 오류가 발생했을 때 어떤 클라이언트가 연결되어 있었는지 표시됩니다.
로컬 영역 내의 네트워크 어댑터에서 수신 대기할 수 없습니다. 전역 영역으로 이동하면 해당 네트워크 어댑터의 특정 포트로 이동하는 트래픽을 들을 수 있었습니다. 이를 통해 Wireshark를 사용하여 문제를 추적하고 식별할 수 있었습니다.