โปรแกรม“ du” สามารถลดความก้าวร้าวได้หรือไม่?


21

เรามีงานประจำที่ทำหน้าที่duสรุปย่อของไดเรกทอรีย่อยจำนวนมากเลือกผู้กระทำความผิดที่เลวร้ายที่สุดและใช้ผลลัพธ์เพื่อค้นหาว่ามีสิ่งที่เพิ่มขึ้นอย่างรวดเร็วเพื่อมองเห็นปัญหาที่อาจเกิดขึ้นหรือไม่ เราใช้diffเทียบกับภาพรวมเพื่อเปรียบเทียบ

มีไดเรกทอรีระดับบนสุดที่มีไดเรกทอรีย่อยจำนวน (ไม่กี่ร้อย) โดยแต่ละไดเรกทอรีอาจมีไฟล์จำนวน 10 ไฟล์เป็นพัน (หรือมากกว่า)

A " du -s" ในบริบทนี้อาจทำให้ IO ก้าวร้าวมากทำให้เซิร์ฟเวอร์ของเราประกันตัวแคชและจากนั้นสไปค์ IO ขนาดใหญ่ซึ่งเป็นด้านที่ไม่พึงประสงค์จะส่งผลกระทบต่อ

กลยุทธ์ใดที่สามารถใช้เพื่อรับข้อมูลเดียวกันโดยไม่มีผลข้างเคียงที่ไม่พึงประสงค์


9
ในเยอรมนีคุณสามารถแทนที่ด้วย "Sie"
Federico Poloni

คำตอบ:


28

ioniceลองดูที่ จากman ionice:

โปรแกรมนี้ตั้งค่าหรือรับคลาสการกำหนดตารางเวลาและความสำคัญสำหรับโปรแกรม หากไม่ได้ระบุอาร์กิวเมนต์หรือเพียงแค่ -p ionice จะทำการค้นหาคลาสการกำหนดตารางเวลา io ปัจจุบันและลำดับความสำคัญสำหรับกระบวนการนั้น

ในการรันduด้วยคลาส "ว่าง" I / O ซึ่งเป็นลำดับความสำคัญต่ำสุดที่มีอยู่คุณสามารถทำสิ่งนี้:

ionice -c 3 du -s

สิ่งนี้ควรหยุดไม่ให้duรบกวน I / O ของกระบวนการอื่น คุณอาจต้องการพิจารณาการยกเลิกโปรแกรมเพื่อลดระดับความสำคัญของ CPU เช่น:

renice -n 19 "$duPid"

คุณยังสามารถทำได้ทั้งสองอย่างในเวลาเริ่มต้น:

nice -n 19 ionice -c 3 du

5
เพื่อ renice โปรแกรมที่มีอยู่คุณจะต้องเรียกร้องแทนrenice niceในการเริ่มต้นduกับทั้ง ionice nice -n19 ionice -c3 duและดีคุณสามารถโซ่ทั้งสองโปรแกรม:
jofel

niceตัวเองยังส่งผลกระทบต่อลำดับความสำคัญของตัวกำหนดตารางเวลา I / O ไม่ใช่เพียงแค่ CPU
จอร์แดน

1
@ jordanm เท่าที่ฉันรู้ (อย่างน้อยใน Linux) niceเพียงส่งผลกระทบต่อความดีของ CPU (ซึ่งอาจส่งผลทางอ้อมต่อ I / O แต่ไม่ควรส่งผลกระทบต่อลำดับความสำคัญของตัวกำหนดตารางเวลา I / O) คุณเห็นพฤติกรรมนี้ที่ไหน มีการบันทึกไว้ที่ไหนสักแห่งหรือไม่?
Chris Down

@ChrisDown - ผมจำได้อ่านมันในการทำความเข้าใจกับ Linux Kernel
jordanm

@ jordanm หืมมมฉันมีหนังสือเล่มนั้น ฉันอ่านผ่าน ๆ อย่างรวดเร็วและพบหน้า 263 เท่านั้นที่ให้รายละเอียดที่ชัดเจนniceและพูดถึงควอนตัมฐานเวลาของ CPU เท่านั้น คุณมีความคิดในหนังสือเล่มนี้ไหม? ฉันจะสนใจในการอ่านแหล่งเผด็จการที่รัฐก็ไม่ได้กล่าวถึงในman nice, man 2 nice, man 2 setpriority, info niceหรือinfo 'nice invocation'เท่าที่ผมสามารถบอกได้ซึ่งเป็นที่แปลกประหลาดเพราะบางส่วนของการเดินทางเหล่านี้เป็นไม่น้อยของรายละเอียดเกี่ยวกับวิธีniceการทำงานของการโทร และมันทำอะไร
Chris Down

4

หากคุณมีไฟล์มากมายในไดเรกทอรีเดียวสิ่งนี้อาจรับผิดชอบ I / O spikes เนื่องจากระบบไฟล์หลายระบบไม่รองรับไฟล์ต้นไม้ขนาดใหญ่ในไดเรกทอรีเดียว การแยกมันออกเป็นไดเรกทอรีย่อยอื่น ๆ สามารถช่วยได้ หากคุณมีไฟล์มากกว่า 10k ในไฟล์เดียวและนั่นเป็นสาเหตุของปัญหาคุณควรแยกไฟล์ออก

สำหรับการติดตามการใช้งานดิสก์คุณสามารถดูได้dfก่อนถ้ามูลค่าการใช้งานไม่เพิ่มขึ้นอย่างรวดเร็วส่วนย่อยก็ไม่ได้ทำเช่นนั้นและคุณสามารถข้ามduไปได้ทั้งหมด

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


ระบบเป็นฟาร์มสร้างดังนั้นจำนวนไฟล์ใน dir นั้นลดลงตามส่วนของส่วนประกอบที่เราสร้าง dfจะไม่ทำงาน - ปัญหาคือเรามีการล้างข้อมูลสคริปต์ดังนั้นเราอาจไม่เห็นการเปลี่ยนแปลง แต่พลาดการเตือนล่วงหน้าสำหรับงานอัตโนมัติที่คว้าพื้นที่ดิสก์ในเชิงรุก เราใช้ zabbix เพื่อตรวจสอบการใช้งานดิสก์โดยรวม แต่การรู้จักไดเรกทอรีแต่ละรายการที่สิ่งต่าง ๆ กำลังเป็นเรื่องจำเป็นอย่างยิ่ง
Danny Staple

0

นอกจากนี้ioniceคุณสามารถลองทำให้ดิสก์มีประสิทธิภาพมากขึ้น สิ่งนี้สามารถลองได้โดยการดำเนินการ

find /du/root -printf ""
find /du/root -perm 777 -printf ""

ก่อน (อาจผ่านioniceเกินไป) มันจะไม่ทำงานหากมีไฟล์มากเกินไป จำนวนที่มากเกินไปนั้นขึ้นอยู่กับปริมาณแรมฟรี

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