特定のディレクトリ(/var/www
)があり、ls
(一部のオプションありまたはなし)を実行すると、コマンドがハングして完了しません。 /var/www
には約10〜15個のファイルとディレクトリしかありません。ほとんどの場合、テキストファイルのみです。ここにいくつかの調査情報があります:
[me@server www]$ df .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_dev-lv_root
50G 19G 29G 40% /
[me@server www]$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_dev-lv_root
3.2M 435K 2.8M 14% /
find
は問題なく動作します。また、cd /var/www/
と入力してEnterキーを押す前にTabキーを押すと、そこにあるすべてのファイル/ディレクトリのタブ補完リストが正常に表示されます。
[me@server www]$ cd /var/www/
cgi-bin/ create_vhost.sh html/ manual/ phpMyAdmin/ scripts/ usage/
conf/ error/ icons/ mediawiki/ rackspace sqlbuddy/ vhosts/
[me@server www]$ cd /var/www/
ls
がハングしたため、ターミナルセッションを数回終了する必要がありました。
[me@server ~]$ ps | grep ls
gdm 6215 0.0 0.0 488152 2488 ? S<sl Jan18 0:00 /usr/bin/pulseaudio --start --log-target=syslog
root 23269 0.0 0.0 117724 1088 ? D 18:24 0:00 ls -Fh --color=always -l
root 23477 0.0 0.0 117724 1088 ? D 18:34 0:00 ls -Fh --color=always -l
root 23579 0.0 0.0 115592 820 ? D 18:36 0:00 ls -Fh --color=always
root 23634 0.0 0.0 115592 816 ? D 18:38 0:00 ls -Fh --color=always
root 23740 0.0 0.0 117724 1088 ? D 18:40 0:00 ls -Fh --color=always -l
me 23770 0.0 0.0 103156 816 pts/6 S+ 18:41 0:00 grep ls
kill
は、Sudoとしても、プロセスに影響を与えていないようです。
この問題を調査するには、他に何をすべきですか?それは今日ランダムに起こり始めました。
[〜#〜]更新[〜#〜]
dmesg
は、私が何度もマウントし、最大マウント数に達した外部USB HDDに関連するものの大きなリストですが、これは無関係な問題だと思います。 dmesg
の下部近くにあります。
INFO: task ls:23579 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
ls D ffff88041fc230c0 0 23579 23505 0x00000080
ffff8801688a1bb8 0000000000000086 0000000000000000 ffffffff8119d279
ffff880406d0ea20 ffff88007e2c2268 ffff880071fe80c8 00000003ae82967a
ffff880407169ad8 ffff8801688a1fd8 0000000000010518 ffff880407169ad8
Call Trace:
[<ffffffff8119d279>] ? __find_get_block+0xa9/0x200
[<ffffffff814c97ae>] __mutex_lock_slowpath+0x13e/0x180
[<ffffffff814c964b>] mutex_lock+0x2b/0x50
[<ffffffff8117a4d3>] do_lookup+0xd3/0x220
[<ffffffff8117b145>] __link_path_walk+0x6f5/0x1040
[<ffffffff8117a47d>] ? do_lookup+0x7d/0x220
[<ffffffff8117bd1a>] path_walk+0x6a/0xe0
[<ffffffff8117beeb>] do_path_lookup+0x5b/0xa0
[<ffffffff8117cb57>] user_path_at+0x57/0xa0
[<ffffffff81178986>] ? generic_readlink+0x76/0xc0
[<ffffffff8117cb62>] ? user_path_at+0x62/0xa0
[<ffffffff81171d3c>] vfs_fstatat+0x3c/0x80
[<ffffffff81258ae5>] ? _atomic_dec_and_lock+0x55/0x80
[<ffffffff81171eab>] vfs_stat+0x1b/0x20
[<ffffffff81171ed4>] sys_newstat+0x24/0x50
[<ffffffff810d40a2>] ? audit_syscall_entry+0x272/0x2a0
[<ffffffff81013172>] system_call_fastpath+0x16/0x1b
また、strace ls /var/www/
はBUNCH情報全体を出力します。ここで何が役に立つかわかりません...最後の一握りの行:
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=68, ws_col=145, ws_xpixel=0, ws_ypixel=0}) = 0
stat("/var/www/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/var/www/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
getdents(3, /* 16 entries */, 32768) = 488
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 9), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3093b18000
write(1, "cgi-bin conf create_vhost.sh\te"..., 125cgi-bin conf create_vhost.sh error html icons manual mediawiki phpMyAdmin rackspace scripts sqlbuddy usage vhosts
) = 125
close(1) = 0
munmap(0x7f3093b18000, 4096) = 0
close(2) = 0
exit_group(0) = ?
strace ls /var/www/
を実行して、何がかかっているかを確認します。それは確かにI/Oでハングしています-これがD
出力のps
状態が意味することです(そしてkill
は役に立たないので、それは割り込み不可能なI/Oの1つですO syscalls)。ほとんどのハングは、神に去ったNFSサーバーに関係していますが、df
に基づいていますが、ここではそうではありません。念のため、dmesg
でファイルシステムやディスクに関連するものをすばやく確認することは価値があります。
同じ症状で問題がありました。そのディレクトリにSMB GVFSを介したマウントへのシンボリックリンクがありました。
lrwxrwxrwx 1 alex alex 45 Sep 16 2011 foo -> /home/alex/.gvfs/bar on foo/data/
通常、ls
は、共有がマウントされているかどうかに関係なく、即座に完了します。しかし、この場合、私はマシンを一時停止して再開しましたが、マウントは一般的にパフォーマンスが低下していました。共有を再マウントすると問題が解決しました。
私は同じ問題を経験していました。
ディレクトリを入力しても問題はありません。リストを表示すると、ハング、検索、作品、タブ全体のハング、およびdoの下のいくつかのフォルダが機能します。非常にひっかき奇妙です。
Server Faultでこのスレッドを読んだことで、ソリューションへの論理的な道筋がわかりました。
それはNASに関するものであり、NASは一般に「automount」として配置されるので、最近、fstabを「automount」に変更したことを認識しました。彼らがそうでなかったとき、通常。
それから私は次のように進めました:
もう一度ディレクトリにアクセスしてみて、問題を修正したことのあたたかい曖昧な感覚を得てください。
Wombleの提案はすばらしいので、最初に試してみるべきですが、それでも直らない場合は、ファイルシステムに一貫性がなくなったときに(ハードウェアの不安定さ、カーネルのバグ、または宇宙線さえ)、この問題が発生しました。
そうだと思われる場合は、touch /forcefsck; reboot
を実行して、再起動時にfsckを強制できます。ブート時に表示される内容を見て、fsckが不整合を検出しているかどうかを確認します。
警告:これは、マシンに接続されているすべてのファイルシステムをfsckします。マルチペタバイトのディスクアレイも接続している場合は、行わないでください。日かかる場合があります。 fsck
ingファイルシステムもデータの損失につながる可能性があります。ファイルシステムに実際に不整合がある場合、e2fsckは、正常に機能しているが機能しないものから、正常に機能しているが期待したものがすべて含まれていないものに変更します。
あなたが説明したのとまったく同じ症状がありました。この問題を解決するには、DNSサーバーのアドレスを修正するだけで済みました。 NAS=を新しいネットワークに移動したため、DNSサーバーのアドレスを更新する必要がありました。アドレスは静的に割り当てられていましたが、QNAP Webインターフェイスで更新して、自動的に割り当てます。
これが役立つことを願って、Ubuntu 14.04のAUFSドライバーでdocker
およびdocker compose
を使用することにより、上記の症状が発生しました。 ls <dir>
はハングしており、strace ls <dir>
はgetdents
の呼び出しでハングしていることを示しました。実行中のすべてのコンテナーを停止すると、期待どおりにドライブの使用を開始できました。