문제가 있는 프로세스 조사

문제가 있는 프로세스 조사

명령이나 프로세스가 중단되거나 정지되거나 충돌하는 것처럼 보일 때 현재 뒤에서 무엇을 하고 있는지 조사할 수 있는 방법이 있습니까?

충돌이 발생하는지 아니면 시간이 오래 걸리는 작업을 수행하는 것인지 확인하는 데 특히 유용합니다. 예상대로 작동하지 않는 경우 문제를 해결하는 데 도움이 될 수 있습니다. 감사해요.

답변1

이를 수행하기 위해 2개의 하위 수준 도구를 사용할 수 있습니다: stracegdb. 가용성은 straceLinux 또는 Linux가 실행되는 운영 체제를 사용하고 있다고 가정합니다. 다른 운영 체제의 경우 truss, 또는 이 있을 수 있지만 dtrace기술은 비슷합니다.

스트레스

따라서 strace에 비해 사용하기가 더 쉽고 gdb일반적으로 "이 앱의 기능은 무엇인가요?"라는 질문에 잘 대답합니다. (저에게) 일반적인 사용법은 다음과 같습니다.

strace -f -tt -s 200 -p $PID

필요한 유일한 실제 옵션은 입니다 -p $PID. 다른 옵션은 출력 줄에 더 많은 정보를 추가할 뿐 실제로는 필요하지 않습니다.

그것이 하는 일은 애플리케이션이 만드는 모든 시스템 호출을 보여주는 것입니다. 애플리케이션이 표시 이외의 작업을 수행할 수 있는 유일한 방법은 strace순전히 계산적인 경우입니다. 숫자 등을 처리하는 것을 의미합니다. 파일 읽기/쓰기, 패킷 보내기, 현재 시간 가져오기 등과 같은 작업에는 모두 시스템 호출이 필요하며 표시됩니다.

데이터 베이스

gdb아래 수준에는 strace애플리케이션 gdb이 실제로 실행되는 코드 줄이 표시됩니다. 그러나 여기에는 몇 가지 문제가 있습니다. 가장 중요한 것은 애플리케이션에 디버깅 기호가 필요하다는 것입니다. 이는 일반적으로 배포판에서 제공하는 패키지에서 제거됩니다. 그러나 RedHat 파생물과 같은 배포판에서는 일반적으로 pkgfoo-debuginfo-1.2.3.rpm. 또 다른 점은 strace시간이 지남에 따라 애플리케이션이 수행하는 작업을 어디에서 표시할 것인지, gdb검사하는 동안 프로세스를 정지시키기 때문에 해당 애플리케이션이 현재 수행 중인 작업을 표시할 수 있다는 것입니다.

어쨌든 사용법은 다음과 같습니다.

gdb -p $PID

...이렇게 하면 다음 명령을 실행할 수 있는 대화형 셸로 이동됩니다.

where

또는

info threads

gdb응용 프로그램의 복잡성에 따라 복잡해질 수 있고 인터넷에 많은 가이드가 있으므로 사용 방법에 대해 자세히 설명하지 않겠습니다 .

프로세스 탐색을 마치고 다시 시작하려면 quit또는 CTRL+ 를 사용하세요 D.

답변2

추가 플래그를 통해 자세한 출력을 사용하여 터미널 창에서 대부분의 프로세스를 시작할 수 있습니다 -v. 이렇게 하면 터미널 창이 정지된 것처럼 보일 때 터미널 창에서 무슨 일이 일어나고 있는지 확인할 수 있습니다.

top또한 htop메모리 및 CPU 사용량에 대한 업데이트된 정보와 매우 유용한 요약 정보를 포함하여 실행 중인 프로세스에 대한 유용한 정보를 제공합니다.

ps명령 문서를 볼 수도 있습니다 man ps.

관련 정보