du perintah membutuhkan WAY terlalu lama untuk dijalankan

9

Saya menjalankan du -shberbagai direktori untuk menemukan disk babi. Saya mendapat dua server identik (Dell PE2850s), keduanya dengan RHEL5 dan akan membutuhkan waktu lebih lama untuk berjalan dudi satu server di atas yang lain.

Sebagai contoh, melakukan du -sh /opt/foobarakan memakan waktu 5 menit pada server A (yang memiliki sekitar 25 GB di dalamnya), dan pada server B, perintah yang sama dengan jumlah data yang sama akan melaporkan kembali kepada saya hampir seketika. Saya tidak melihat sesuatu yang sangat jelas ketika menjalankan top, dll.

Setiap saran sangat dihargai.

Jon Weinraub
sumber
3
Kecepatan du -stidak tergantung pada ukuran data tetapi lebih pada jumlah file. Apakah kedua pohon direktori memiliki jumlah file yang serupa?
Ladadadada
2
Juga, duakan bekerja lebih cepat jika semua data meta direktori (seperti ukuran file) saat ini di-cache. Jika ini terjadi karena alasan apa pun di satu server dan bukan yang lain, itu akan menghasilkan perbedaan besar.
Sven
@ Ladada Saya akan mengatakan ya ada jumlah file yang sama. Bahkan ketika menambahkan tanda bintang untuk mendapatkan daftar ukuran file secara individual membutuhkan waktu lama untuk menggulir. Tetapi saya tidak sepenuhnya yakin bagaimana memverifikasi apakah meta data di-cache atau tidak.
Jon Weinraub

Jawaban:

6

Jika Anda memiliki banyak file di direktori itu dan konten direktori terus berubah, entri direktori itu sendiri akan terfragmentasi dari waktu ke waktu. Kemudian ketika OS membaca isi direktori, akan ada banyak dan banyak disk yang tidak perlu dicari. Ini terjadi terutama dengan filesystem ext * (ext4 mungkin lebih baik) dan filesystem ReiserFS v3.x lama (jika sudah melewati 85% penuh atau lebih).

Solusinya cukup mudah:

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

Tentu saja jika semuanya di-cache dalam RAM, ini tidak masalah; biasanya Linux cache sering mengakses file dan direktori cukup agresif. Jika Anda benar-benar ingin menyimpan isi direktori-direktori tersebut dalam RAM, Anda dapat memasukkan sesuatu seperti ls -lah /your/dir 2>&1 >/dev/nullke cron Anda.

EDIT: Oh, satu hal muncul di pikiran saya. Jika server Anda memiliki pengontrol RAID yang didukung baterai dengan beberapa cache di dalamnya, periksa apakah baterai OK. Saya telah melihat situasi di mana baterai mati dan pengontrol menonaktifkan cache sepenuhnya, merusak kinerja sangat buruk. Misalnya server HP mungkin memberi tahu sesuatu tentang baterai pengontrol di iLO log; di dashboard server kesehatan yang sebenarnya semuanya tampak baik-baik saja dan hijau, tetapi hanya entri log yang akan memberi tahu Anda tentang hal ini.

Janne Pikkarainen
sumber
1
Ini mungkin akan memakan waktu untuk saya lakukan, itu pada server produksi jadi saya harus melakukannya dalam semalam dan seluruh direktori berisi beberapa ratus gigabyte data sehingga saya tidak ingin merusaknya ... Saya akan melaporkan besok pagi hal pertama. Terima kasih untuk idenya.
Jon Weinraub
Saya masih menjalankan perintah ini dan tidak tahu berapa lama waktu yang dibutuhkan. Saya bahkan mengganti dan cp masih berjalan, sudah sekitar 1 jam 15 menit sejak memulainya. Bahkan menjalankan du pada folder itu di shell lain membutuhkan waktu lama, tetapi Anda pikir saya harus umountdrive dan fsckitu?
Jon Weinraub
Biarkan berjalan kecuali mengganggu produksi Anda. Dengan RHEL5 dan penjadwal CFQ I / O default, Anda dapat meletakkan perintah cp di kelas idle sehingga tidak akan menggertak proses lainnya: ionice -c3 -p $(pidof cp)atau lebih.
Janne Pikkarainen
Baca juga hasil edit terakhir saya.
Janne Pikkarainen
1
Saya tahu ini sudah lama, tetapi saya akhirnya melakukan perintah cp yang Anda sebutkan. Ini dua dua jam untuk menyalin 25 GB. Setelah melakukan hte move, menjalankan du -sh lainnya sama lambatnya. Bahkan menghapus direktori cadangan juga lambat!
Jon Weinraub
0

Saya sarankan untuk mencoba perintah du sederhana tanpa switch. Anda akhirnya akan melihat direktori mana yang memperlambat proses. Mungkin disk yang rusak, atau alasan lain, ...

Király István
sumber