2011-06-15 5 views
0

우리는 차량 추적 시스템을 개발 중입니다. 모든 VTS와 마찬가지로 GPS 장치가 차량에 장착되어 있으며 해당 장치는 차량 위치 정보를 서버에 보냅니다. 특정 포트에서 연결 요청이 있는지 확인하고 실행을 계속하는 TCP 통신기를 개발했습니다. 어떤 것이 있으면 해당 장치에 대한 스레드를 만들고 그 스레드는 모든 장치 위치 세부 정보를 저장합니다. TCP 통신은 12 ~ 16 시간 동안 예상대로 실행됩니다. 그러나 12-16 시간 후에 응답을 멈 춥니 다. 로그에 오류 또는 예외가 없습니다. 또한 pid 파일도 존재하므로 프로세스가 종료되지 않았습니다. 가능한 문제는 무엇이 될 수 있으며 문제를 디버깅하는 방법은 무엇입니까?TCP 통신기가 잠시 후 작동을 멈 춥니 다.

미리 감사드립니다.

+2

장치, 네트워크 연결 또는 응용 프로그램이 작동하지 않는지 확인해야합니다. 네트워크를 통해 하트 비트를 사용하고 응용 프로그램 로그를 정기적으로 (심지어 몇 분이라도) 살아야한다고 제안합니다. –

+0

"응답하지 않음"이란 의미에 대해 더 자세히 설명해 주시겠습니까? 포트에 연결하면 "연결 거부 됨"오류가 발생합니까? 아니면 연결되지만 입력에 응답하지 않습니까? telnet과 같은 것을 사용하여 포트에 연결을 시도 했습니까? –

+1

또한 메모리/CPU 사용률을 추적합니다. 아마도 서버 응용 프로그램은 실행 완료 후에 스레드를 올바르게 정리하지 못했을 것입니다. 로그 데이터가 많을수록 좋습니다. –

답변

0

저는 연결, 스트림 또는 이와 유사한 것을 닫지 않을 것이라고 생각합니다. PID 파일에 대해 언급 했으므로 Linux에서 실행 중입니다. Linux는 네트워크 연결을하거나 파일을 열거 나 프로세스를 만들 때마다 처리기를 만듭니다. 핸들러의 수는 제한되어 있습니다. 불행하게도 쉘 명령을 마음에 기억하지는 않지만 모든 핸들러를 보여줄 수있는 명령이 있다는 것을 기억합니다.

그럼 다음을 수행하는 것이 좋습니다. 귀하의 시스템이 세부 사항을 주기적으로 업데이트한다고 저는 믿습니다. 매분마다라고 가정 해 봅시다. 따라서 매 초마다이 작업을 수행하십시오 (또는 원하는 경우 초당 100 번). 나는 그것이 더 빨리 붙을 것이라고 믿는다. 이제 기간을 줄이고 언급 한 16 시간 후에도 계속 작동하는지 확인하십시오. 이것이 행동이된다면 핸들러에 대한 나의 가정은 정확합니다. 따라서 코드를 검토하여 입력/출력 스트림을 열 때마다 ,으로 올바르게 닫아야합니다. 스트림을 만들고 닫은 후에 로깅을 추가 할 수 있습니다.

행운을 빈다.

관련 문제