एक निश्चित निर्देशिका के लिए ls हैंग होता है


35

एक विशेष निर्देशिका ( /var/www) है, कि जब मैं दौड़ता हूं ls(कुछ विकल्पों के साथ या बिना), कमांड हैंग होता है और कभी पूरा नहीं होता है। में केवल लगभग 10-15 फाइलें और निर्देशिकाएं हैं /var/www। ज्यादातर सिर्फ पाठ फ़ाइलें। यहाँ कुछ खोजी जानकारी है:

[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/प्रवेश करने से पहले 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/जानकारी का एक पूरा गुच्छा बाहर फैला है। मुझे नहीं पता कि यहां क्या उपयोगी है ... आखिरी मुट्ठी भर लाइनें:

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)                           = ?

यह सवाल उन्हीं लक्षणों द्वारा पाया गया। जैसा कि यह निकला, मेरे पास एक दूरस्थ फाइलसिस्टम था, जो एक लटकते हुए कनेक्शन के साथ sshfs के माध्यम से लगाया गया था।
बोहदन_त्रोतेंको

2
तो आप sshfs के साथ क्या करते हैं? मेरी भी यही समस्या है।
मेनेलाओस बाकोपोलोस

2
ls एक निश्चित निर्देशिका के लिए मेरे लिए getdents () पर लटका दिया। समस्या के हल के बाद मैंने खुद को अनमाउंट किया, xfs_check चला, xfs_repair भाग गया, और कोई समस्या नहीं मिलने पर भी रिमूव किया गया।
Leons

मुझे अटके हुए ls रन को साफ करने के लिए 'किल -9' का उपयोग करना था।
फ़्लिकरफ़्लाइट

जवाबों:


25

दौड़ें strace ls /var/www/और देखें कि यह किस पर लटका है। यह निश्चित रूप से I / O पर लटका दिया गया है - यह है कि Dआपके psआउटपुट में राज्य का मतलब है (और चूंकि killयह मदद नहीं करता है, यह अबाधित I / O syscalls में से एक है)। अधिकांश हैंग्स में एक NFS सर्वर शामिल होता है जो भगवान के पास गया है, लेकिन आपके आधार पर dfजो यहाँ नहीं है। dmesgफाइलसिस्टम या डिस्क से संबंधित किसी भी चीज के लिए एक त्वरित जांच सार्थक हो सकती है, बस मामले में।


2
NFS अभी भी मामला हो सकता है। यदि lsऐसा कुछ है, जो कि वे किस ओर इशारा कर रहे हैं, यह जानने के लिए सहानुभूति की कोशिश करता है, तो यह लटकाया जा सकता है, यदि सहानुभूति मृत NFS माउंट की ओर इशारा करती है।
पैट्रिक

हाँ, यह df .एक पूर्ण नहीं था और ध्यान नहीं दिया df। यह निश्चित रूप से एक एनएफएस समस्या हो सकती है।
Womble

यहां कोई NFS माउंट नहीं हैं। यह सभी स्थानीय एकल डिस्क है। यह एक बहुत ही सरल linux सर्वर है। एक भौतिक ड्राइव।
जेक विल्सन

strace ls /var/www/सामान का एक गुच्छा प्रिंट करता है। मुझे किसकी तलाश है? अंतिम पंक्ति है exit_group(0) = ?
जेक विल्सन

2
@ जाकोबड strace -vf ls -l /var/wwwयह देखने की कोशिश करें कि क्या यह किसी विशिष्ट फ़ाइल पर रुकता है या डीआईआर।
ott--

3

मुझे उन्हीं लक्षणों की समस्या थी। यह पता चला कि GVFS पर SMB माउंट करने के लिए मेरे पास उस निर्देशिका में एक सहानुभूति थी।

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

आम तौर पर lsतुरंत पूरा हो जाएगा कि क्या शेयर मुहैया कराया गया था या नहीं। लेकिन इस मामले में मैंने मशीन को निलंबित और फिर से शुरू कर दिया था, और माउंट सामान्य रूप से खराब प्रदर्शन कर रहा था। शेयर को रिमूव करने से समस्या ठीक हो गई।


2

मैं उसी समस्या का सामना कर रहा था।

एक निर्देशिका में प्रवेश करना ठीक है, इसे लटका देना, काम ढूंढना, टैब पूर्ण हैंग करना और कुछ फ़ोल्डर नीचे काम करना है । बहुत सिर-खरोंच-अजीब।

सर्वर फॉल्ट पर इस थ्रेड को पढ़ने से मुझे समाधान की दिशा में एक तर्क मार्ग पर ले जाना पड़ा।

यह NAS के साथ किया जा रहा है, और NAS आमतौर पर `ऑटोमाउंट 'के रूप में रखा जा रहा है मुझे एहसास हुआ कि मैंने हाल ही में अपने fstab को' ऑटोमाउंट 'में बदल दिया था, अगर वे मौजूद नहीं थे, लेकिन सामान्य रूप से ले जाते हैं जब वे नहीं थे।

मैं फिर इस प्रकार आगे बढ़ा:

  1. विभक्त निर्देशिका युक्त विभाजन को अनमाउंट करें।
  2. Fstab को संपादित करें और सभी आटोमाउंट को या तो टिप्पणी के बिना या ऑटो के बिना रूपांतरित करें।
  3. यदि आपके पास है तो Systemo को पुनः लोड करें: systemctl --system डेमन-रीलोड
  4. माउंट-ए

निर्देशिका को फिर से दर्ज करने का प्रयास करें और उस गर्म फजी एहसास को मुद्दा बनाए रखें।


1

वोमबले के सुझाव उत्कृष्ट हैं, और आपको पहले उन पर प्रयास करना चाहिए, लेकिन अगर वे इसे ठीक नहीं करते हैं, तो मुझे यह समस्या आई है जब एक फाइल सिस्टम आत्म-असंगत हो गया है (परतदार हार्डवेयर, अस्पष्ट कर्नेल कीड़े, या यहां तक ​​कि ब्रह्मांडीय किरणों के माध्यम से)।

अगर आपको लगता है कि यह हो सकता है, तो आप ऐसा करके रिबूट पर एक fsck मजबूर कर सकते हैं touch /forcefsck; reboot। यह देखें कि यह बूट समय पर क्या कहता है, यह देखने के लिए कि क्या fsck किसी भी विसंगतियों को उठाता है।

चेतावनी : यह मशीन से जुड़ी सभी फाइल सिस्टम को fsck करेगा; ऐसा न करें यदि आपके पास एक मल्टी-पेटाबाइट डिस्क सरणी जुड़ी हुई है, तो दिन लग सकते हैं । fsckआईएनजी फाइलसिस्टम भी डेटा हानि हो सकती है; यदि आप वास्तव में आपके फाइल सिस्टम में असंगतताएं रखते हैं, तो e2fsck इसे उसी से बदलेगा जो सही दिखता है, लेकिन काफी काम नहीं करता है, वह जो सही काम करता है, लेकिन उसमें वह सब कुछ नहीं हो सकता है जिसकी आप अपेक्षा करते हैं।


1

मेरे वही सटीक लक्षण थे जिनका आपने वर्णन किया है। DNS सर्वर पते को ठीक करने के लिए मुझे जो भी समस्या करनी थी, उसे ठीक करने के लिए। हमने NAS को एक नए नेटवर्क में स्थानांतरित कर दिया था, जिसे DNS सर्वर पतों को अपडेट करने की आवश्यकता थी। पते सांख्यिकीय रूप से असाइन किए गए थे, लेकिन QNAP वेब इंटरफ़ेस में मैंने इसे स्वचालित रूप से असाइन करने के लिए अद्यतन किया था।


क्या आपके पास कोई स्पष्टीकरण है कि गलत DNS प्रविष्टि समस्या का कारण क्यों बनेगी?
राल्फफ्राइडल

0

आशा है कि यह उपयोगी होगा, मैं उपरोक्त लक्षणों का उपयोग कर कारण किया जा रहा था dockerऔर docker composeUbuntu 14.04 में AUFS ड्राइवर के साथ। ls <dir>लटक रहा था, और strace ls <dir>दिखाया कि यह getdentsकॉल पर लटका हुआ था । सभी चल रहे कंटेनरों को रोककर मुझे उम्मीद के मुताबिक ड्राइव का उपयोग शुरू करने की अनुमति दी।


-2

स्ट्रेस ls / var / www / रनिंग आपको गलत क्या है का संकेत देगा। मेरे पास / dir के लिए समान मुद्दा था और स्ट्रेस का उपयोग करके मैं यह पता लगाने में सक्षम था कि यह एक NAS माउंट था जो इसका कारण बना। यह देखते हुए कि एनएएस ने इस मुद्दे को तय किया।


3
-1: यह पहले से ही स्वीकृत जवाब का सिर्फ एक दोहराव है।
HBruijn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.