ls zawiesza się na pewien katalog

35

Istnieje szczególny katalog ( /var/www), który kiedy uruchamiam ls(z pewnymi opcjami lub bez), polecenie zawiesza się i nigdy się nie kończy. Jest tam tylko około 10-15 plików i katalogów /var/www. Głównie tylko pliki tekstowe. Oto kilka informacji dochodzeniowych:

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

finddziała w porządku. Mogę również wpisać cd /var/www/i nacisnąć TAB przed naciśnięciem Enter, a to z powodzeniem zakończy tabulację listę wszystkich plików / katalogów:

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

Kilka razy musiałem zabijać sesje terminalowe z powodu lszawieszenia:

[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 nie wydaje się mieć żadnego wpływu na procesy, nawet jak sudo.

Co jeszcze powinienem zrobić, aby zbadać ten problem? Po prostu zaczęło się dzisiaj dziać losowo.

AKTUALIZACJA

dmesgto duża lista rzeczy, związanych głównie z zewnętrznym dyskiem twardym USB, który montowałem zbyt wiele razy i osiągnięto maksymalną liczbę montowań, ale myślę, że jest to niezwiązany problem. U dołu dmesgwidzę to:

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

A także strace ls /var/www/wyrzuca całą WIELKĄ informację. Nie wiem, co tu jest przydatne ... Ostatnia garść wierszy:

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
źródło
znalazłem to pytanie przez te same objawy. Jak się okazało, miałem zdalny system plików zamontowany przez sshfs z zawieszonym połączeniem.
bohdan_trotsenko
2
Więc co robisz z sshfs? Mam ten sam problem.
Menelaos Bakopoulos,
2
Zawieszono dla mnie polecenie getdents () dla określonego katalogu. Problem rozwiązał się po tym, jak odmontowałem, uruchomiłem xfs_check, uruchomiłem xfs_repair i ponownie zamontowałem, mimo że nie znaleziono żadnych problemów.
Leons,
Musiałem użyć „kill -9”, aby wyczyścić zablokowane biegi.
flickerfly,

Odpowiedzi:

25

Uruchom strace ls /var/www/i zobacz, na czym polega. Z pewnością jest zawieszony na I / O - to właśnie oznacza Dstan na twoim pswyjściu (a ponieważ killto nie pomaga, jest to jeden z nieprzerwanych wywołań systemowych I / O). Większość zawieszeń dotyczy serwera NFS, który poszedł do boga, ale w oparciu o twoje dfnie ma to miejsca w tym przypadku. Na dmesgwszelki wypadek warto sprawdzić wszystko, co dotyczy systemów plików lub dysków.

womble
źródło
2
NFS nadal może być problemem. Jeśli lsjest aliasowany do czegoś, co próbuje odsunąć dowiązania symboliczne, aby znaleźć to, na co wskazują, może się zawiesić, jeśli dowiązanie symboliczne wskazuje na martwe mocowanie NFS.
Patrick
Gah, nie zauważyłem, że to było df .i nie było pełne df. Może to być z pewnością problem NFS.
womble
Nie ma tutaj montowań NFS. To wszystko lokalny pojedynczy dysk. To bardzo prosty serwer Linux. Jeden dysk fizyczny.
Jake Wilson,
strace ls /var/www/drukuje mnóstwo rzeczy. Czego szukam Ostatnia linia to exit_group(0) = ?.
Jake Wilson,
2
@Jobobud Spróbuj strace -vf ls -l /var/wwwsprawdzić, czy zatrzymuje się na określonym pliku lub reż.
ott--
3

Miałem problem z tymi samymi objawami. Okazało się, że miałem w tym katalogu dowiązanie symboliczne do montowania SMB przez GVFS.

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

Normalnie lskończy się natychmiast, niezależnie od tego, czy udział został zamontowany, czy nie. Ale w tym przypadku zawiesiłem i wznowiłem maszynę, a mocowanie ogólnie słabo działało. Ponowne zamontowanie udziału rozwiązało problem.

z0r
źródło
2

Miałem ten sam problem.

Wprowadzanie katalog jest w porządku, wymieniając to wisi, znaleźć prace, zakładka kompletne zawiesza się, a niektóre foldery pod zrobienia pracę. Bardzo drapieżnie dziwnie.

Czytanie tego wątku na temat błędu serwera poprowadziło mnie na ścieżce logicznej w kierunku rozwiązania.

Ma to związek z NAS, a NAS powszechnie określany jako „automount” uświadomił mi, że ostatnio zmieniłem mój fstab na „automount” niektóre dyski USB, jeśli były obecne, ale działały normalnie, gdy nie były.

Następnie postępowałem następująco:

  1. Odmontuj partycję zawierającą zaległy katalog.
  2. Edytuj fstab i przekonwertuj wszystkie automount na komentarze lub bez auto.
  3. Załaduj ponownie SystemD, jeśli go masz: systemctl --system daemon-reload
  4. zamontować -a

Spróbuj ponownie wejść do katalogu i poczuj ciepłe wrażenie, że problem został rozwiązany.

Aetalidy
źródło
1

Sugestie Womble są doskonałe i powinieneś je najpierw wypróbować, ale jeśli nie naprawią tego, miałem ten problem, gdy system plików stał się niespójny (przez niestabilny sprzęt, niejasne błędy jądra, a nawet promienie kosmiczne).

Jeśli uważasz, że tak może być, możesz wymusić uruchomienie fsck przy ponownym uruchomieniu komputera touch /forcefsck; reboot. Zobacz, co mówi podczas uruchamiania, aby sprawdzić, czy fsck wykryje niespójności.

Ostrzeżenie : spowoduje to sprawdzenie wszystkich systemów plików podłączonych do komputera; nie rób tego, jeśli masz również dołączoną macierz dyskową zawierającą wiele petabajtów, może to potrwać kilka dni . fscking systemy plików mogą również prowadzić do utraty danych; jeśli naprawdę masz niespójności w swoim systemie plików, e2fsck zmieni go z takiego, który wygląda dobrze, ale nie całkiem działa, na taki, który działa poprawnie, ale może nie zawierać wszystkiego, czego oczekujesz.

MadHatter obsługuje Monikę
źródło
1

Miałem te same dokładne objawy, które opisałeś. Aby rozwiązać problem, wystarczyło naprawić adresy serwerów DNS. Przenieśliśmy NAS do nowej sieci, która wymagała aktualizacji adresów serwerów DNS. Adresy zostały przypisane statycznie, ale w interfejsie internetowym QNAP zaktualizowałem go, aby automatycznie przydzielał.

Nacięcie
źródło
Czy masz jakieś wyjaśnienie, dlaczego niewłaściwy wpis DNS spowodowałby problem?
RalfFriedl
0

W nadziei, że będzie to pomocne, miałem powyższe objawy spowodowane używaniem dockeri docker composeze sterownikiem AUFS w Ubuntu 14.04. ls <dir>wisiał i strace ls <dir>pokazał, że wisi na getdentswezwaniu. Zatrzymanie wszystkich działających kontenerów pozwoliło mi zacząć korzystać z napędu zgodnie z oczekiwaniami.

Hamy
źródło
-2

Uruchamianie strace ls / var / www / da ci znać, co jest nie tak. Miałem podobny problem z / dir i używając strace mogłem go zlokalizować, to spowodowało to zamontowanie NAS. Odmontowanie tego serwera NAS rozwiązało problem.

Shan Navas J
źródło
3
-1: To tylko powtórzenie już zaakceptowanej odpowiedzi.
HBruijn