คำสั่ง du ใช้เวลาในการรันนานเกินไป


9

ฉันกำลังทำงานdu -shในไดเรกทอรีต่าง ๆ เพื่อค้นหาดิสก์ hogs ฉันมีเซิร์ฟเวอร์ที่เหมือนกันสองตัว (Dell PE2850s) ทั้งคู่กับ RHEL5 และจะใช้เวลานานกว่าในการรันduบนเซิร์ฟเวอร์หนึ่งบนเซิร์ฟเวอร์อื่น

ตัวอย่างเช่นการทำdu -sh /opt/foobarจะใช้เวลา 5 นาทีบนเซิร์ฟเวอร์ A (ซึ่งมีประมาณ 25 GB ในนั้น) และบนเซิร์ฟเวอร์ B คำสั่งเดียวกันที่มีจำนวนข้อมูลเท่ากันจะรายงานกลับมาหาฉันเกือบจะทันที ฉันไม่เห็นอะไรชัดเจนเมื่อวิ่งบน ฯลฯ

คำแนะนำใด ๆ ที่ชื่นชมอย่างมาก


3
ความเร็วของdu -sไม่ขึ้นอยู่กับขนาดของข้อมูล แต่ขึ้นอยู่กับจำนวนไฟล์ แผนผังไดเร็กทอรีทั้งสองมีจำนวนไฟล์เท่ากันหรือไม่
Ladadadada

2
นอกจากนี้duจะทำงานเร็วขึ้นมากหากข้อมูลเมตาของไดเรกทอรีทั้งหมด (เช่นขนาดไฟล์) ถูกแคชไว้ในปัจจุบัน หากเป็นกรณีนี้ด้วยเหตุผลใดก็ตามในเซิร์ฟเวอร์หนึ่งและไม่ใช่เซิร์ฟเวอร์อื่นมันจะส่งผลให้เกิดความแตกต่างอย่างมาก
สเวน

@ Ladadada ฉันจะบอกว่าใช่มีไฟล์ประมาณเท่ากัน แม้ว่าการเพิ่มเครื่องหมายดอกจันเพื่อรับรายการขนาดไฟล์แต่ละรายการใช้เวลานานในการเลื่อน แต่ฉันไม่แน่ใจทั้งหมดว่าจะตรวจสอบว่าข้อมูลเมตานั้นถูกแคชหรือไม่
Jon Weinraub

คำตอบ:


6

หากคุณมีไฟล์จำนวนมากในไดเรกทอรีนั้นและเนื้อหาของไดเรกทอรีมีการเปลี่ยนแปลงอยู่ตลอดเวลารายการไดเรกทอรีเองจะได้รับการแยกส่วนเมื่อเวลาผ่านไป จากนั้นเมื่อระบบปฏิบัติการกำลังอ่านเนื้อหาไดเรกทอรีจะมีการค้นหาดิสก์ที่ไม่จำเป็นจำนวนมาก สิ่งนี้เกิดขึ้นโดยเฉพาะอย่างยิ่งกับระบบไฟล์ ext * (ext4 อาจดีกว่า) และระบบไฟล์ ReiserFS v3.x แบบเก่า (หากเกิน 85% หรือมากกว่านั้น)

การแก้ปัญหาค่อนข้างง่าย:

cp -pr origdir newdir
mv origdir origdir.bak
mv newdir origdir

แน่นอนถ้าทุกอย่างถูกแคชใน RAM สิ่งนี้ไม่สำคัญเท่าไร โดยปกติแล้ว Linux จะแคชไฟล์ที่เข้าถึงบ่อยและ dirs ค่อนข้างก้าวร้าว หากคุณต้องการเก็บเนื้อหาของไดเรกทอรีเหล่านั้นไว้ใน RAM อย่างแท้จริงคุณสามารถใส่สิ่งที่ต้องการls -lah /your/dir 2>&1 >/dev/nullให้กับ cron ของคุณ

แก้ไข:โอ้มีสิ่งหนึ่งที่โผล่เข้ามาในใจของฉัน หากเซิร์ฟเวอร์ของคุณมีตัวควบคุม RAID สำรองแบตเตอรี่ที่มีแคชอยู่ภายในโปรดตรวจสอบว่าแบตเตอรี่นั้นโอเค ฉันเคยเห็นสถานการณ์ที่แบตเตอรี่หมดและคอนโทรลเลอร์ปิดการใช้งานแคชอย่างสมบูรณ์ทำให้ประสิทธิภาพแย่ลง ตัวอย่างเช่นเซิร์ฟเวอร์ HP อาจบอกใน iLO บันทึกสิ่งที่เกี่ยวกับแบตเตอรี่ควบคุม; ในแดชบอร์ดสถานภาพเซิร์ฟเวอร์จริงทุกอย่างดูเหมือนจะดีและเป็นสีเขียว แต่มีเพียงรายการบันทึกเท่านั้นที่จะบอกคุณเกี่ยวกับเรื่องนี้


1
อาจใช้เวลาสักครู่ในการทำมันอยู่บนเซิร์ฟเวอร์การผลิตดังนั้นฉันจะต้องทำมันข้ามคืนและไดเรกทอรีทั้งหมดมีหลายร้อยกิกะไบต์ของข้อมูลดังนั้นฉันไม่ต้องการที่จะชะงักลง ... ฉันจะรายงาน สิ่งแรกพรุ่งนี้เช้า ขอบคุณสำหรับความคิด
Jon Weinraub

ฉันยังคงใช้คำสั่งนี้และไม่บอกว่าจะใช้เวลานานเท่าใด ฉันเลิกใช้แล้วและ cp ยังทำงานอยู่ประมาณ 1 ชม. 15 นาทีนับตั้งแต่เริ่มใช้งาน แม้จะใช้ du du ในโฟลเดอร์นั้นในเชลล์อื่นก็ใช้เวลานาน แต่คุณคิดว่าฉันควรจะumountใช้ไดรฟ์และfsckมันได้หรือไม่
Jon Weinraub

เพียงแค่ปล่อยให้มันทำงานจนกว่ามันจะรบกวนการผลิตของคุณ ด้วย RHEL5 และกำหนดการ CFQ I / O เริ่มต้นของมันคุณสามารถใส่คำสั่ง cp ในคลาสที่ไม่ได้ใช้งานเพื่อที่มันจะไม่กลั่นแกล้งกระบวนการอื่น: ionice -c3 -p $(pidof cp)หรือมากกว่านั้น
Janne Pikkarainen

โปรดอ่านการแก้ไขล่าสุดของฉันด้วย
Janne Pikkarainen

1
ฉันรู้ว่ามันใช้เวลาสักครู่ แต่ในที่สุดฉันก็มีคำสั่ง cp ที่คุณพูดถึง มันสองสองชั่วโมงในการคัดลอก 25 GB หลังจากย้าย hte แล้วการเรียกใช้ du -sh อีกครั้งนั้นช้าเหมือนกัน ในความเป็นจริงแม้แต่การลบไดเรกทอรีสำรองก็ช้าเช่นกัน!
Jon Weinraub

0

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

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