私のUbuntuサーバーで次のコマンドを実行しています
root@slot13:~# lxc-stop --name pavan --logfile=test1.txt --logpriority=trace
無期限にぶら下がっているようです。 AIXでこれが起こるたびに、私は問題のプロセスのPIDを取得し、次のように言います。
$ procstack <pid_of_stuck_process>
プロセスのフルコールスタックを表示するために使用されます。procstack
Linux/ubuntuにも似ていますか?
答え1
最初のステップは、プロセスでstraceを実行することです。なるべく
strace -s 99 -ffp 12345
プロセスIDが12345の場合。これにより、プログラムが実行されているすべてのシステムコールが表示されます。進捗状況を追跡する方法もっと教えてください。
スタックトレースが必要な場合、Googleはpstackに対応するものを教えてくれます。しかし、私はインストールしていないので、gdbを使用します。
tweedleburg:~ # sleep 3600 &
[2] 2621
tweedleburg:~ # gdb
(gdb) attach 2621
(gdb) bt
#0 0x00007feda374e6b0 in __nanosleep_nocancel () from /lib64/libc.so.6
#1 0x0000000000403ee7 in ?? ()
#2 0x0000000000403d70 in ?? ()
#3 0x000000000040185d in ?? ()
#4 0x00007feda36b8b05 in __libc_start_main () from /lib64/libc.so.6
#5 0x0000000000401969 in ?? ()
(gdb)
答え2
プログラムのスタックトレースを見つけるために2つの答えがありました(最初にデバッグシンボルをインストールすることを忘れないでください!)。システムコールが中断された場所を見つけるには、/proc/PID/stack
それをリストするカーネルスタックを確認してください。例:
$ cat /proc/self/stack
[<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40
[<ffffffff81213abe>] proc_pid_stack+0x8e/0xe0
[<ffffffff81214960>] proc_single_show+0x50/0x90
[<ffffffff811cd970>] seq_read+0xe0/0x3e0
[<ffffffff811a6a84>] vfs_read+0x94/0x180
[<ffffffff811a7729>] SyS_read+0x49/0xb0
[<ffffffff81623ad2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
答え3
答え4
pstack
実行中のプロセスのスタックトレースが印刷されます。デプロイ/アーキテクチャで利用できないかサポートされていない場合は、一般的にgstack
同等のものがあります。pstack