데비안 서버에서 실행 중이던 프로세스가 발생하기 시작했습니다.소켓: 열려 있는 파일이 너무 많습니다.실수. 그런 다음 오류 디버깅을 시작했습니다. 나는 다음 시나리오를 겪었습니다.
실행하면 lsof | grep 4300
다음과 같이 출력됩니다.
내가 실행하면 lsof -i TCP:4300
출력은 다음과 같습니다.
이제 질문은 다음과 같습니다.
둘 사이의 차이점은 무엇입니까? (제가 관찰한 바에 따르면 첫 번째에는 스레드 ID가 있고 후자에는 스레드 ID가 없습니다.)
첫 번째 연결에서 동일한 연결에 대해 여러 회선이 있는 이유는 무엇입니까? (SS는 4줄만 제공합니다.)
얼마나 많은 파일 설명자가 열려 있습니까?
이 시나리오를 디버깅하는 방법은 무엇입니까?
답변1
나는 언급하고있다lsof 맨페이지내 대답을 위해.
lsof | grep 4300
옵션이 없으면 lsof는 모든 활성 프로세스에 속하는 모든 열린 파일을 나열합니다.
grep
따라서 이 명령은 모든 프로세스에 속하는 열려 있는 모든 파일을 나열하며, 검색 피연산자 "4300"과 일치하는 파일만 검색 하도록 파이프한 출력입니다 .
lsof -i TCP:4300
이 옵션은 인터넷 주소가 i에 지정된 주소와 일치하는 파일 목록을 선택합니다. 주소가 지정되지 않은 경우 이 옵션은 모든 인터넷 및 x.25(HP-UX) 네트워크 파일 목록을 선택합니다.
이 명령을 사용하면 인터넷 주소나 네트워크 위치가 있는 파일만 나열하도록 지정하고 포트 4300에서 tcp 프로토콜과 일치하는 파일만 나열하도록 지정했습니다.
당신의 질문에 대답
이 두 명령의 결과는 다릅니다. 첫 번째 명령은 열려 있는 모든 파일을 나열하지만 출력은 grep에 의해 "4300"이 포함된 모든 행으로 필터링됩니다. 두 번째 명령은 포트 4300에서 TCP 프로토콜을 사용하여 인터넷 또는 네트워크 파일만 열도록 지정합니다.
~에 따르면이 게시물프로세스에서는 파일을 여러 번 열 수 있습니다. 이는 예상치 못한 동작이 아닙니다
lsof
. 이것은 분명히 귀하의 문제입니다. 각 프로세스가 수행하는 작업과 이러한 파일의 여러 복사본을 열어야 하는 이유를 조사하겠습니다.명령의 모든 출력을 포함했다면 첫 번째 명령에 비해 각 파일을 5번 여는 3개의 프로세스가 있을 것입니다. 두 번째 명령에는 포트 4300에서 TCP 프로토콜을 사용하여 네트워크 파일을 여는 3개의 프로세스가 있으며, 한 프로세스는 해당 프로토콜과 포트에서 수신 대기합니다.
나는 pid를 기반으로 각 프로세스를 조사할 것입니다. 참고자료이 게시물다음 명령을 사용하여 pid로 프로세스를 찾을 수 있습니다
ps -p <PID> -o comm=
. 또는ps aux | grep <PID>
프로세스를 파악하는 데 많은 성공을 거두었습니다.
결론적으로
여기에서 이것이 프로세스의 예상되는 동작인지 확인하고 초기 오류의 원인인 경우 이를 해결하는 방법을 찾아야 합니다. 오류 및 프로세스와 관련될 수 있는 로그를 참조하는 것을 잊지 마세요.
이 답변에 대해 오해나 질문이 있는 경우 댓글을 남겨주세요. 답변을 개선하기 위해 필요에 따라 이 게시물을 편집하겠습니다.
행운을 빌어요!