Itu hang untuk direktori tertentu

35

Ada direktori tertentu ( /var/www), yang ketika saya jalankan ls(dengan atau tanpa beberapa opsi), perintahnya hang dan tidak pernah selesai. Hanya ada sekitar 10-15 file dan direktori di /var/www. Sebagian besar hanya file teks. Berikut ini beberapa informasi investigasi:

[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% /

findbekerja dengan baik. Saya juga bisa mengetik cd /var/www/dan menekan TAB sebelum menekan enter dan itu akan berhasil daftar tab-penyelesaian semua file / direktori di sana:

[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/

Saya harus mematikan sesi terminal saya beberapa kali karena lshang:

[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 tampaknya tidak mempengaruhi proses, bahkan sebagai sudo.

Apa lagi yang harus saya lakukan untuk menyelidiki masalah ini? Itu hanya secara acak mulai terjadi hari ini.

MEMPERBARUI

dmesgadalah daftar besar hal-hal, sebagian besar terkait dengan HDD USB eksternal yang saya pasang terlalu banyak dan jumlah mount max telah tercapai, tapi saya rasa itu adalah masalah yang tidak berhubungan. Di dekat bagian bawah dmesgsaya melihat ini:

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

Dan juga, strace ls /var/www/memuntahkan BUNCH seluruh informasi. Saya tidak tahu apa yang berguna di sini ... Segenggam terakhir kalimat:

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)                           = ?
Jake Wilson
sumber
menemukan pertanyaan ini dengan gejala yang sama. Ternyata, saya memiliki sistem file jarak jauh yang dipasang melalui sshfs dengan koneksi yang digantung.
bohdan_trotsenko
2
Jadi, apa yang Anda lakukan dengan sshfs? Saya memiliki masalah yang sama.
Menelaos Bakopoulos
2
Digantung pada saya di getdents () untuk direktori tertentu. Masalah diselesaikan dengan sendirinya setelah saya melepas, menjalankan xfs_check, berlari xfs_repair, dan mencatat ulang meskipun tidak ditemukan masalah.
Leons
Saya harus menggunakan 'kill -9' untuk membersihkan jalan yang macet.
flickerfly

Jawaban:

25

Jalankan strace ls /var/www/dan lihat apa yang digantung. Itu tentu tergantung pada I / O - itulah yang dimaksud dengan Dnegara bagian psoutput Anda (dan karena killtidak membantu, itu salah satu syscalls I / O yang tidak pernah terputus). Sebagian besar hang melibatkan server NFS yang pergi ke dewa, tetapi berdasarkan Anda dfitu tidak terjadi di sini. Pemeriksaan cepat dmesguntuk apa pun yang terkait dengan sistem file atau disk mungkin bermanfaat, untuk berjaga-jaga.

womble
sumber
2
NFS mungkin masih menjadi masalahnya. Jika lsdikaitkan dengan sesuatu yang mencoba untuk meringkas symlink untuk menemukan apa yang mereka tunjuk, itu bisa menggantung jika symlink menunjuk ke NFS yang mati.
Patrick
Gah, tidak memperhatikan itu df .dan tidak penuh df. Itu pasti bisa menjadi masalah NFS saat itu.
womble
Tidak ada mount NFS di sini. Itu semua disk tunggal lokal. Ini adalah server linux yang sangat sederhana. Satu dorongan fisik.
Jake Wilson
strace ls /var/www/mencetak banyak hal. Apa yang saya cari? Baris terakhir adalah exit_group(0) = ?.
Jake Wilson
2
@ Jakobud Cobalah strace -vf ls -l /var/wwwuntuk melihat apakah itu berhenti pada file atau dir tertentu.
ott--
3

Saya punya masalah dengan gejala yang sama. Ternyata saya memiliki symlink di direktori itu ke mount SMB melalui GVFS.

lrwxrwxrwx  1 alex alex        45 Sep 16  2011 foo -> /home/alex/.gvfs/bar on foo/data/

Biasanya lsakan selesai secara instan apakah bagian itu dipasang atau tidak. Tetapi dalam kasus ini saya telah menangguhkan dan melanjutkan mesin, dan gunung berkinerja buruk pada umumnya. Menghitung ulang pembagian telah memperbaiki masalahnya.

z0r
sumber
2

Saya mengalami masalah yang sama.

Memasuki direktori baik-baik saja, daftar hang, menemukan karya, tab hang lengkap, dan beberapa folder di bawah melakukan pekerjaan. Sangat aneh.

Membaca utas ini pada Kesalahan Server memang menuntun saya pada jalur logika menuju solusi.

Ini berkaitan dengan NAS, dan NAS yang biasa disebut sebagai `automount 'membuat saya menyadari bahwa saya baru saja mengubah fstab saya menjadi' automount 'beberapa drive usb jika ada tetapi tetap berjalan seperti biasa ketika tidak.

Saya kemudian melanjutkan sebagai berikut:

  1. Lepaskan partisi yang berisi direktori tunggakan.
  2. Edit fstab dan konversi semua automount menjadi dikomentari atau tanpa otomatis.
  3. Reload SystemD jika Anda memilikinya: systemctl --system daemon-reload
  4. mount -a

Coba masukkan direktori lagi dan dapatkan perasaan hangat kabur setelah menyelesaikan masalah.

Aethalides
sumber
1

Saran Womble sangat bagus, dan Anda harus mencobanya terlebih dahulu, tetapi jika mereka tidak memperbaikinya, saya memiliki masalah ini ketika filesystem menjadi tidak konsisten (melalui perangkat keras yang rapuh, bug kernel yang tidak jelas, atau bahkan sinar kosmik).

Jika Anda berpikir itu mungkin, Anda dapat memaksa fsck saat reboot dengan melakukan touch /forcefsck; reboot. Perhatikan apa yang dikatakannya pada saat boot, untuk melihat apakah fsck mengambil ketidakkonsistenan.

Peringatan : ini akan membuka semua sistem file yang terpasang pada mesin; jangan lakukan itu jika Anda juga memiliki larik disk multi-petabyte yang terpasang, mungkin perlu berhari - hari . fscksistem file juga dapat menyebabkan hilangnya data; jika Anda benar-benar memiliki inkonsistensi dalam sistem file Anda, e2fsck akan mengubahnya dari yang terlihat benar tetapi tidak cukup berfungsi, menjadi yang berfungsi dengan baik tetapi mungkin tidak mengandung semua yang Anda harapkan.

MadHatter mendukung Monica
sumber
1

Saya memiliki gejala yang sama persis seperti yang Anda gambarkan. Untuk memperbaiki masalah yang harus saya lakukan adalah memperbaiki alamat server DNS. Kami telah memindahkan NAS ke jaringan baru, yang mengharuskan memperbarui alamat server DNS. Alamat-alamat itu ditetapkan secara statis, tetapi di antarmuka web QNAP saya memperbaruinya untuk secara otomatis ditetapkan.

Nick
sumber
Apakah Anda memiliki penjelasan mengapa entri DNS yang salah akan menyebabkan masalah?
RalfFriedl
0

Dengan harapan ini akan membantu, saya memiliki gejala di atas yang disebabkan oleh penggunaan dockerdan docker composedengan driver AUFS di Ubuntu 14.04. ls <dir>tergantung, dan strace ls <dir>menunjukkan itu tergantung pada getdentspanggilan. Menghentikan semua kontainer yang berjalan memungkinkan saya untuk mulai menggunakan drive seperti yang diharapkan.

Hamy
sumber
-2

Menjalankan strace ls / var / www / akan memberi Anda tahu apa yang salah. Saya punya masalah serupa untuk / dir dan menggunakan strace saya bisa menemukan itu adalah mount NAS yang menyebabkannya. Lepas dari NAS itu memperbaiki masalah.

Shan Navas J
sumber
3
-1: Itu hanya pengulangan dari jawaban yang sudah diterima.
HBruijn