실행 중인 스레드의 eventpoll에 대해 어떤 정보를 찾을 수 있나요?

실행 중인 스레드의 eventpoll에 대해 어떤 정보를 찾을 수 있나요?

다음 "ps 출력에 없는 프로세스에 strace를 어떻게 연결합니까?"

반 정지 프로세스를 디버깅하려고 합니다.

strace -f상위 프로세스를 사용하여 여러 스레드가 표시되는지 확인할 수 있었습니다.

# strace -p 26334
Process 26334 attached - interrupt to quit
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, {}, 4096, 500)          = 0
epoll_wait(607, ^C <unfinished ...>
Process 26334 detached

추가 조사:

# readlink /proc/26334/fd/607
anon_inode:[eventpoll]

내 직감으로는 일부 스레드를 교착 상태에 빠뜨릴 수 있었지만 epoll앞으로 나아갈 만큼 충분한 지식이 없다고 말합니다. 이러한 스레드가 무엇을 폴링하는지 또는 이 epoll 설명자가 어떤 파일 설명자에 매핑되는지에 대한 통찰력을 제공할 수 있는 명령이 있습니까?

답변1

이 줄을 실행하면 strace시스템 기능이 반환됩니다. 명확하지 않은 경우 epoll_wait()다음을 수행할 수 있습니다.man epoll_wait다음과 같이 구현 세부정보를 알아보세요.

   epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor

설명 epoll:

epoll API는 poll(2)과 유사한 작업을 수행합니다. 즉, 여러 파일 설명자를 모니터링하여 I/O에 사용할 수 있는 파일이 있는지 확인합니다. epoll API는 에지 트리거 또는 레벨 트리거 인터페이스로 사용할 수 있으며 모니터링되는 많은 수의 파일 설명자로 확장됩니다.

따라서 프로세스가 파일 설명자를 차단하고 그 중 하나에서 I/O가 수행될 수 있는지 기다리는 것 같습니다.

나는 전략을 약간 변경하여 lsof -p <pid>이러한 파일의 실제 범위를 좁힐 수 있는지 알아보겠습니다.

관련 정보