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 ก่อนกด Enter และมันจะประสบความสำเร็จในรายการแท็บเสร็จสมบูรณ์ของไฟล์ / ไดเรกทอรีทั้งหมดในนั้น:

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

ฉันต้องฆ่าเซสชัน terminal ของฉันหลายครั้งเนื่องจากการ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

ฉันควรทำอย่างไรเพื่อตรวจสอบปัญหานี้ มันเริ่มเกิดขึ้นแบบสุ่มในวันนี้

UPDATE

dmesgเป็นรายการใหญ่ ๆ ที่เกี่ยวข้องกับ HDD USB ภายนอกที่ฉันติดตั้งมาหลายครั้งแล้วและถึงจำนวนสูงสุดของการเชื่อมต่อแล้ว แต่นั่นเป็นปัญหาที่ไม่เกี่ยวข้องกับฉัน ใกล้ด้านล่างของ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 พร้อมการเชื่อมต่อแบบแขวน
bohdan_trotsenko

2
ดังนั้นคุณจะทำอย่างไรกับ sshfs ผมมีปัญหาเดียวกัน.
Menelaos Bakopoulos

2
ls แขวนสำหรับฉันใน getdents () สำหรับไดเรกทอรีที่แน่นอน ปัญหาได้รับการแก้ไขด้วยตัวเองหลังจากที่ฉันเลิกเมานท์รัน xfs_check, วิ่ง xfs_repair และประกอบใหม่แม้ว่าจะไม่พบปัญหาก็ตาม
Leons

ฉันต้องใช้ 'kill -9' เพื่อทำความสะอาด ls ที่ติดอยู่
flickerfly

คำตอบ:


25

เรียกใช้strace ls /var/www/และดูสิ่งที่มันแขวนอยู่ แน่นอนว่ามันแขวนอยู่บน I / O - นั่นคือสิ่งที่Dรัฐในpsเอาท์พุทของคุณหมายถึง (และเนื่องจากkillไม่ได้ช่วยมันเป็นหนึ่งใน syscalls I / O ที่ไม่หยุดชะงัก) การแฮงค์ส่วนใหญ่เกี่ยวข้องกับเซิร์ฟเวอร์ NFS ที่ไม่เป็นที่รู้จัก แต่ขึ้นอยู่กับdfว่าไม่ใช่กรณีที่นี่ ตรวจสอบอย่างรวดเร็วของdmesgสิ่งที่เกี่ยวข้องกับระบบไฟล์หรือดิสก์อาจคุ้มค่าในกรณี


2
NFS ยังคงเป็นกรณีนี้ หากใช้lsนามแฝงกับสิ่งที่พยายามยกเลิกการเชื่อมโยง symlink เพื่อค้นหาสิ่งที่ชี้ไปมันอาจถูกแขวนหาก symlink ชี้ไปที่การเมาท์ NFS ที่ตายไป
Patrick

Gah ไม่ได้แจ้งให้ทราบว่าเป็นและไม่เต็มรูปแบบdf . dfมันอาจเป็นปัญหาของ NFS แน่นอน
womble

ไม่มีการเมานต์ NFS ที่นี่ มันคือดิสก์โลคัลเดียวทั้งหมด มันเป็นเซิร์ฟเวอร์ลินุกซ์ที่ง่ายมาก หนึ่งไดรฟ์ทางกายภาพ
Jake Wilson

strace ls /var/www/พิมพ์สิ่งต่าง ๆ มากมาย ฉันจะมองหาอะไร exit_group(0) = ?บรรทัดสุดท้ายคือ
Jake Wilson

2
@Jakobud ลองstrace -vf ls -l /var/wwwดูว่ามันหยุดที่ไฟล์เฉพาะหรือ dir
ott--

3

ฉันมีปัญหากับอาการเดียวกัน มันกลับกลายเป็นว่าฉันมี symlink ในไดเรกทอรีนั้นไปยัง SMB ที่เมาท์มากกว่า GVFS

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

โดยปกติlsจะเสร็จสมบูรณ์ในทันทีไม่ว่าจะติดตั้งการแชร์ แต่ในกรณีนี้ฉันได้หยุดและกลับมาทำงานเครื่องและการติดตั้งก็ทำได้ไม่ดีโดยทั่วไป การนับจำนวนหุ้นใหม่ช่วยแก้ไขปัญหาได้


2

ฉันกำลังประสบปัญหาเดียวกัน

เข้าสู่ไดเรกทอรีจะปรับรายการมันแฮงค์พบกับผลงานแท็บแฮงค์ที่สมบูรณ์และบางโฟลเดอร์ใต้ทำงาน หัวมากแปลกอย่างมาก

การอ่านเธรดนี้บน Server Fault ทำให้ฉันมีเส้นทางตรรกะไปยังโซลูชัน

การทำเช่นนั้นกับ NAS และ NAS โดยทั่วไปมักใช้คำว่า "automount" ทำให้ฉันรู้ว่าเมื่อเร็ว ๆ นี้ฉันได้เปลี่ยน fstab เป็น 'automount' ไดรฟ์ usb บางตัวถ้ามีอยู่ แต่ยังคงใช้งานได้ตามปกติเมื่อไม่ได้ใช้

ฉันดำเนินการต่อไปนี้:

  1. ถอนติดตั้งพาร์ติชันที่มีไดเรกทอรีค้างชำระ
  2. แก้ไข fstab และแปลง automount ทั้งหมดเพื่อแสดงความคิดเห็นหรือไม่อัตโนมัติ
  3. โหลด SystemD อีกครั้งถ้าคุณมี: systemctl --system daemon-reload
  4. เมานต์

ลองเข้าสู่ไดเรกทอรีอีกครั้งและรับความรู้สึกอบอุ่นที่เลือนของการแก้ไขปัญหา


1

คำแนะนำของ Womble นั้นยอดเยี่ยมและคุณควรลองสิ่งเหล่านี้ก่อน แต่หากพวกเขาไม่สามารถแก้ไขได้ฉันมีปัญหานี้เมื่อระบบไฟล์กลายเป็นแบบไม่สอดคล้องกันของตัวเอง (ผ่านฮาร์ดแวร์ที่ไม่สม่ำเสมอ

ถ้าคุณคิดว่ามันอาจเป็นไปได้ว่าคุณสามารถบังคับ fsck touch /forcefsck; rebootในการรีบูตโดยการทำ ดูสิ่งที่กล่าวในเวลาบูตเพื่อดูว่า fsck เลือกความไม่สอดคล้องใด ๆ

คำเตือน : นี่จะทำให้ระบบไฟล์ทั้งหมดที่เชื่อมต่อกับเครื่อง ไม่ทำมันถ้าคุณยังมีหลาย petabyte ดิสก์อาร์เรย์ที่แนบมามันอาจใช้เวลาวัน fsckระบบไฟล์ยังสามารถนำไปสู่การสูญเสียข้อมูล หากคุณมีความไม่สอดคล้องกันในระบบไฟล์ของคุณจริง ๆ e2fsck จะเปลี่ยนมันจากที่ดูถูกต้อง แต่ไม่ค่อยได้ผลเป็นที่ใช้งานได้ แต่อาจไม่มีทุกอย่างที่คุณคาดหวัง


1

ฉันมีอาการตรงตามที่คุณอธิบาย เพื่อแก้ไขปัญหาทั้งหมดที่ฉันต้องทำคือแก้ไขที่อยู่เซิร์ฟเวอร์ DNS เราย้าย NAS ไปยังเครือข่ายใหม่ซึ่งจำเป็นต้องอัปเดตที่อยู่เซิร์ฟเวอร์ DNS ที่อยู่ถูกกำหนดแบบคงที่ แต่ในเว็บอินเตอร์เฟส QNAP ฉันได้อัปเดตให้กำหนดโดยอัตโนมัติ


คุณมีคำอธิบายใด ๆ หรือไม่ว่าทำไมการป้อน DNS ผิดจะทำให้เกิดปัญหา
RalfFriedl

0

ด้วยความหวังว่าสิ่งนี้จะเป็นประโยชน์ฉันมีอาการข้างต้นที่เกิดจากการใช้งานdockerและdocker composeกับไดรเวอร์ AUFS ใน Ubuntu 14.04 ls <dir>กำลังแขวนและstrace ls <dir>แสดงให้เห็นว่ามันแขวนอยู่บนgetdentsสาย การหยุดคอนเทนเนอร์ที่ทำงานอยู่ทั้งหมดทำให้ฉันเริ่มใช้ไดรฟ์ตามที่คาดไว้


-2

การใช้ strace ls / var / www / จะทำให้คุณรู้ว่ามีอะไรผิดปกติ ฉันมีปัญหาที่คล้ายกันสำหรับ / dir และการใช้ strace ฉันสามารถค้นหาว่ามันเป็น NAS ติดตั้งซึ่งทำให้มัน การยกเลิกการต่อเชื่อมที่ NAS แก้ไขปัญหา


3
-1: นั่นเป็นเพียงการทำซ้ำของคำตอบที่ยอมรับแล้ว
HBruijn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.