Bisakah program "du" dibuat kurang agresif?


21

Kami memiliki pekerjaan reguler yang dumerangkum sejumlah subdirektori, memilih pelaku terburuk, dan menggunakan output untuk menemukan jika ada hal-hal yang dengan cepat meningkat untuk menemukan masalah potensial. Kami menggunakan diffterhadap snapshot untuk membandingkannya.

Ada direktori tingkat atas, dengan sejumlah (beberapa ratus) subdirektori, yang masing-masing mungkin berisi 10 dari ribuan file masing-masing (atau lebih).

" du -s" Dalam konteks ini bisa sangat agresif IO, menyebabkan server kami men-cache cache dan kemudian lonjakan IO besar-besaran yang merupakan efek samping yang sangat tidak diinginkan.

Strategi apa yang dapat digunakan untuk mendapatkan data yang sama, tanpa efek samping yang tidak diinginkan?


9
Di Jerman, Anda dapat menggantinya dengan "Sie".
Federico Poloni

Jawaban:


28

Lihatlah ionice. Dari man ionice:

Program ini menetapkan atau mendapatkan kelas penjadwalan io dan prioritas untuk suatu program. Jika tidak ada argumen atau hanya -p yang diberikan, ionice akan menanyakan kelas penjadwalan io saat ini dan prioritas untuk proses itu.

Untuk menjalankan dudengan kelas I / O "idle", yang merupakan prioritas terendah yang tersedia, Anda dapat melakukan sesuatu seperti ini:

ionice -c 3 du -s

Ini harus berhenti dumengganggu proses lain 'I / O. Anda mungkin juga ingin mempertimbangkan mengganti program untuk menurunkan prioritas CPU-nya, seperti:

renice -n 19 "$duPid"

Anda juga dapat melakukan keduanya pada waktu inisialisasi:

nice -n 19 ionice -c 3 du

5
Untuk mengganti nama program yang ada, Anda harus menelepon renicealih-alih nice. Untuk mulai dudengan kedua ionice dan bagus, Anda dapat rantai kedua program: nice -n19 ionice -c3 du.
jofel

niceitu sendiri juga mempengaruhi prioritas I / O scheduler, bukan hanya CPU.
jordanm

1
@jordanm Sejauh yang saya tahu (setidaknya di Linux), nicehanya berdampak pada kebaikan CPU (yang secara tidak langsung dapat mempengaruhi I / O, tetapi seharusnya tidak mempengaruhi prioritas penjadwal I / O). Di mana Anda melihat perilaku ini? Apakah ini didokumentasikan di suatu tempat?
Chris Down

@ChrisDown - Saya ingat pernah membacanya di Understanding the Linux Kernel
jordanm

@jordanm Hm, saya punya buku itu. Saya melakukan skim cepat melalui itu dan hanya menemukan halaman 263 memberikan rincian eksplisit tentang nice, dan hanya berbicara tentang kuantum waktu dasar CPU. Apakah Anda tahu di mana di dalam buku itu? Aku akan tertarik untuk membaca sumber otoritatif bahwa negara-negara itu, tidak disebutkan dalam man nice, man 2 nice, man 2 setpriority, info niceatau info 'nice invocation'sejauh yang saya tahu, yang aneh karena beberapa go ini ke cukup sedikit detail tentang bagaimana nicekarya panggilan dan apa fungsinya.
Chris Down

4

Jika Anda memiliki banyak file dalam satu direktori, ini dapat menyebabkan lonjakan I / O, karena banyak sistem file tidak menangani pohon file besar dalam satu direktori dengan baik. Membagi menjadi lebih banyak subdirektori dapat membantu di sana. Jika Anda memiliki lebih dari 10k file dalam satu dir dan itu menyebabkan masalah, Anda mungkin harus membaginya.

Adapun untuk melacak penggunaan disk, Anda bisa melihat dulu df, jika nilai penggunaan di sana tidak naik dengan cepat maka subdirer tidak baik dan Anda bisa melewatkan dusemuanya.

Alternatif lain mungkin sistem kuota disk yang terus melacak penggunaan, jika sistem file Anda mendukungnya.


Sistemnya adalah build farm, jadi jumlah file dalam direktori benar-benar tergantung pada pengembang komponen yang kita buat. dftidak akan bekerja - masalahnya adalah kita memang sudah membersihkan skrip, jadi kita mungkin tidak melihat perubahan, tetapi telah melewatkan peringatan awal untuk pekerjaan otomatis yang secara agresif mengambil ruang disk. Kami menggunakan zabbix untuk memantau penggunaan disk secara keseluruhan, tetapi mengetahui direktori individu di mana segala sesuatu berjalan sedikit gila sangat penting.
Danny Staple

0

Selain itu ioniceAnda dapat mencoba membuat akses disk lebih efisien. Ini bisa dicoba dengan mengeksekusi

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

pertama (mungkin melalui ionicejuga). Ini tidak akan berfungsi jika ada terlalu banyak file. Berapa banyak terlalu banyak tergantung pada jumlah RAM gratis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.