2010-06-14 4 views
4

구성 관리를하는 데몬 프로세스가 있습니다. 다른 모든 프로세스는 기능을 수행하기 위해이 데몬과 상호 작용해야합니다. 그러나 대규모 작업을 실행할 때 몇 시간이 지나면 데몬 프로세스가 2 ~ 3 시간 동안 응답하지 않습니다. 2 시간에서 3 시간 후에는 정상적으로 작동합니다.Linux 용 디버깅 유틸리티 프로세스가 중단됩니까?

Linux 용 디버깅 유틸리티 프로세스가 중단됩니까?

어떻게하면 리눅스 프로세스가 멈추는 지 알 수 있을까요?

답변

1

하나의 옵션은 gdb을 사용하고 실행중인 프로세스에 연결하기 위해 attach 명령을 사용하는 것입니다. 당신은

  • lsof를 열어 파일
  • 시스템을 보여줄 수있는 마지막 시스템 호출과 그 결과를 표시 할 수 있습니다합니다 (file 명령을 사용하여) 문제의 실행의 상징

  • +1

    'gdb/path/to/executable PID' 명령 줄에서도 똑같이 할 수 있습니다. –

    9
    • strace가 포함 된 파일을로드해야합니다 로그 메시지가 진행 상황을 추적하기 위해 기록 될 때 로그가 매우 효과적 일 수 있습니다. 더 작은 영역에서 문제를 해결할 수 있습니다. 또한 로그 메시지를 다른 시스템의 다른 메시지와 연관 짓는 경우 종종 응용 프로그램이 소켓을 사용하여 와이어 채터를 볼 수있는 경우 흥미로운 결과가 나타납니다.
    • wireshark
    • ps ax + top은 앱이 통화 중이거나 IO가 차단되어 있고 CPU를 소비하고 메모리를 사용하여 항상 사용중인 경우에 표시 할 수 있습니다.

    이들 각각은 약간의 정보를 제공하여 문제의 그림을 구성 할 수 있습니다.

    gdb를 사용하는 경우 앱이 차단 될 때 코어 덤프를 트리거하는 것이 유용 할 수 있습니다. 그런 다음 사후 사후 디버깅을 사용하여 분석 할 수있는 정적 스냅 샷이 있습니다. 스크립트로 트리거 할 수 있습니다. 이론을 테스트하는 데 사용할 수있는 일련의 스냅 샷을 빠르게 작성합니다.

    +0

    'ps ax'는 busy 루프 탐지를위한 좋은 유틸리티라고 생각하지 않습니다.'top'이 더 좋을 것입니다. 이 –

    +0

    당신은 당연히 맞습니다, 나는 이것을 거의 항상 나란히 사용하는 경향이 있습니다. 그래서 그들은 내 머리 속에 섞여 있습니다. 고마워, 내가 대답을 업데이 트 –

    +0

    안녕하세요 피터, strace는 나를 끊어 문제를 해결하는 데 도움. 'flock()'을 사용하여 파일 잠금에 대한 두 프로세스간에 교착 상태 시나리오가 발생했습니다. 도움 주셔서 대단히 감사합니다. strace가 없으면 프로세스가 왜 멈추고 있는지 알아내는 것은 실제로 불가능한 작업입니다. – Niranjan

    0

    은 여러 가지 방법으로 수행 할 수 있습니다

    1. 상태 요청을 처리하는 UNIX 도메인 소켓에 듣기. 그러면 외부 응용 프로그램이 응용 프로그램이 여전히 괜찮은지 여부를 묻습니다. 일부 제한 시간 내에 아무런 응답이 없으면 쿼리되는 응용 프로그램이 교착 상태에 있거나 죽었다고 가정 할 수 있습니다.

    2. 미리 선택된 경로로 파일을 주기적으로 만지십시오. 외부 응용 프로그램은 파일에 대한 시간 소인을 볼 수 있으며 부적절한 경우 appliation이 dead 또는 deadlock으로 간주 할 수 있습니다.

    3. 신호가 프로세스를 종료하도록 (적절하게 sigaction 사용) alarm syscall을 반복적으로 사용할 수 있습니다. 프로그램이 실행 중일 때까지 계속 alarm으로 전화를 걸면 프로그램이 계속 실행됩니다. 일단 신호를 보내지 않으면 신호가 발 생합니다. in this answer 설명대로 forkwaitpid로 죽으면

    당신은 완벽하게 프로세스를 다시 시작할 수 있습니다. 운영 체제가 메모리 페이지를 공유하기 때문에 상당한 리소스가 들지 않습니다.