당신의 질문에 대답

당신의 질문에 대답

데비안 서버에서 실행 중이던 프로세스가 발생하기 시작했습니다.소켓: 열려 있는 파일이 너무 많습니다.실수. 그런 다음 오류 디버깅을 시작했습니다. 나는 다음 시나리오를 겪었습니다.

실행하면 lsof | grep 4300다음과 같이 출력됩니다.여기에 이미지 설명을 입력하세요.

내가 실행하면 lsof -i TCP:4300출력은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

이제 질문은 다음과 같습니다.

  1. 둘 사이의 차이점은 무엇입니까? (제가 관찰한 바에 따르면 첫 번째에는 스레드 ID가 있고 후자에는 스레드 ID가 없습니다.)

  2. 첫 번째 연결에서 동일한 연결에 대해 여러 회선이 있는 이유는 무엇입니까? (SS는 4줄만 제공합니다.)

  3. 얼마나 많은 파일 설명자가 열려 있습니까?

  4. 이 시나리오를 디버깅하는 방법은 무엇입니까?

답변1

나는 언급하고있다lsof 맨페이지내 대답을 위해.

lsof | grep 4300

옵션이 없으면 lsof는 모든 활성 프로세스에 속하는 모든 열린 파일을 나열합니다.

grep따라서 이 명령은 모든 프로세스에 속하는 열려 있는 모든 파일을 나열하며, 검색 피연산자 "4300"과 일치하는 파일만 검색 하도록 파이프한 출력입니다 .

lsof -i TCP:4300 

이 옵션은 인터넷 주소가 i에 지정된 주소와 일치하는 파일 목록을 선택합니다. 주소가 지정되지 않은 경우 이 옵션은 모든 인터넷 및 x.25(HP-UX) 네트워크 파일 목록을 선택합니다.

이 명령을 사용하면 인터넷 주소나 네트워크 위치가 있는 파일만 나열하도록 지정하고 포트 4300에서 tcp 프로토콜과 일치하는 파일만 나열하도록 지정했습니다.

당신의 질문에 대답

  1. 이 두 명령의 결과는 다릅니다. 첫 번째 명령은 열려 있는 모든 파일을 나열하지만 출력은 grep에 의해 "4300"이 포함된 모든 행으로 필터링됩니다. 두 번째 명령은 포트 4300에서 TCP 프로토콜을 사용하여 인터넷 또는 네트워크 파일만 열도록 지정합니다.

  2. ~에 따르면이 게시물프로세스에서는 파일을 여러 번 열 수 있습니다. 이는 예상치 못한 동작이 아닙니다 lsof. 이것은 분명히 귀하의 문제입니다. 각 프로세스가 수행하는 작업과 이러한 파일의 여러 복사본을 열어야 하는 이유를 조사하겠습니다.

  3. 명령의 모든 출력을 포함했다면 첫 번째 명령에 비해 각 파일을 5번 여는 3개의 프로세스가 있을 것입니다. 두 번째 명령에는 포트 4300에서 TCP 프로토콜을 사용하여 네트워크 파일을 여는 3개의 프로세스가 있으며, 한 프로세스는 해당 프로토콜과 포트에서 수신 대기합니다.

  4. 나는 pid를 기반으로 각 프로세스를 조사할 것입니다. 참고자료이 게시물다음 명령을 사용하여 pid로 프로세스를 찾을 수 있습니다 ps -p <PID> -o comm=. 또는 ps aux | grep <PID>프로세스를 파악하는 데 많은 성공을 거두었습니다.

결론적으로

여기에서 이것이 프로세스의 예상되는 동작인지 확인하고 초기 오류의 원인인 경우 이를 해결하는 방법을 찾아야 합니다. 오류 및 프로세스와 관련될 수 있는 로그를 참조하는 것을 잊지 마세요.

이 답변에 대해 오해나 질문이 있는 경우 댓글을 남겨주세요. 답변을 개선하기 위해 필요에 따라 이 게시물을 편집하겠습니다.

행운을 빌어요!

관련 정보