web-dev-qa-db-ja.com

実行中のスレッドの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記述子がどのファイル記述子にマップするのかについていくらかの洞察を与えることができるコマンドはありますか?.

6
Dancrumb

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>これらのファイルが実際に何であるかを絞り込むことができるかどうかを確認します。

5
slm