2012-01-25 3 views
1

이것은 Linux 시스템 (Red Hat 배포판)입니다.인터럽트가 발생하지 않는 프로세스를 디버깅하려면 어떻게합니까?

나는 Perl로 구현 된 데몬을 가지고있다. 작업 테이블을 모니터하고 새 테이블을 찾으면 아이를 포크하여 작업을 실행합니다.

나는 아이들이 무정전 상태에서 프로세스 테이블에 주위를 어슬렁 것을 찾는거야 :

682 16658 100 dumpdeco dumpdeco ?   0:27.62 0.0 1.8 D perl /root/runObjectBrowserJobs.pl 
1453 16658 100 dumpdeco dumpdeco ?   0:13.34 0.0 1.5 D perl /root/runObjectBrowserJobs.pl 
1458 16658 100 dumpdeco dumpdeco ?   0:12.42 0.0 1.5 D perl /root/runObjectBrowserJobs.pl 
1467 16658 100 dumpdeco dumpdeco ?   0:13.35 2.9 1.8 D perl /root/runObjectBrowserJobs.pl 
1474 16658 100 dumpdeco dumpdeco ?   0:14.31 0.0 2.1 D perl /root/runObjectBrowserJobs.pl 
1479 16658 100 dumpdeco dumpdeco ?   0:13.73 0.0 2.1 D perl /root/runObjectBrowserJobs.pl 
1496 16658 100 dumpdeco dumpdeco ?   0:13.97 0.0 2.0 D perl /root/runObjectBrowserJobs.pl 
1499 16658 100 dumpdeco dumpdeco ?   0:13.93 0.0 2.2 D perl /root/runObjectBrowserJobs.pl 
1501 16658 100 dumpdeco dumpdeco ?   0:14.47 0.0 1.4 D perl /root/runObjectBrowserJobs.pl 
1503 16658 100 dumpdeco dumpdeco ?   0:14.86 2.0 2.2 D perl /root/runObjectBrowserJobs.pl 
1505 16658 100 dumpdeco dumpdeco ?   0:13.88 1.0 2.0 D perl /root/runObjectBrowserJobs.pl 
1520 16658 100 dumpdeco dumpdeco ?   0:14.39 0.0 1.5 D perl /root/runObjectBrowserJobs.pl 
1522 16658 100 dumpdeco dumpdeco ?   0:14.12 1.0 1.8 D perl /root/runObjectBrowserJobs.pl 
1531 16658 100 dumpdeco dumpdeco ?   0:16.45 0.0 1.7 D perl /root/runObjectBrowserJobs.pl 
3619 16658 100 dumpdeco dumpdeco ?   2:03.59 0.0 4.5 D perl /root/runObjectBrowserJobs.pl 

나는 아이들이 그들에게 할당 된 작업을 완료 한 나의 기록에서 알고있다. 그들은 이것을 기록하고 보류중인 대기열에서 작업이 제거되었습니다. 그래서, 코드 검사에서, 그들은 할 일을 남기고 떠나지 않았습니다.

이것은 새로운 현상 인 것으로 보입니다. 이것은 오래된 코드 조각이며 나는 좀비 프로세스의 춤을 다뤘습니다. 그래서 이것이 잘못된 reaping에 대한 문제가 아니라고 확신합니다.

내가 알아 내려고하는 것은 이러한 프로세스가 무엇에 매달려 있는지 알아내는 것입니다. strace을 시도했지만 아무 것도 반환하지 않습니다. 솔직히 말하면, 놀랍지는 않습니다. (내 추측에 의한) 프로세스가 이 아니기 때문에 실제로는은 잠을자는 것과는 다른 일을하고, 일부 시스템 콜이 돌아 오기를 기다리고 있기 때문입니다.

그래서, 나는 생각 해요 : 실행중인 프로세스의 현재 호출 스택을 인쇄 할 수있는 방법이

  • 있습니까?
  • 덤프시 프로세스를 덤프하고 호출 스택을 볼 수있는 방법이 있습니까?
  • 내가 무엇을 찾고 있어야하는지에 대한 제안이 있으십니까? 나는 깨진 스토리지 드라이버 (우리 스토리지에 최근에 다른 문제가 있었음)를 생각하고 있지만 비난하는 드라이버는 항상 나에게 게으른 옵션처럼 보입니다.
+0

어떤 운영 체제입니까? – Nemo

+0

나는 스토리지 물건을 보았습니다. 상태 D가있는 프로세스는 대개 IO를 기다리고 있음을 나타냅니다. IO (커널 토지) 프로세스 자체에서 아무 일도 일어나지 않기 때문에 strace는 아무 것도 표시하지 않습니다. – Friek

답변

0

나는 그것을 알지 못했을 까? 나는 그 답을 발견했다. 명령은 pstack입니다. 여기에 대한 자세한 정보 : http://linux.die.net/man/1/pstack

+4

pstack이 gdb로 구현되었으며, 무정전 프로세스에 연결하려고 할 때 둘 다 중단됩니다. – nhed

관련 문제