Дю командует слишком долго, чтобы бежать

9

Я бегаю du -shпо разным каталогам, чтобы найти дисковых свиней. У меня есть два идентичных сервера (Dell PE2850s), оба с RHEL5, и это займет значительно больше времени, чтобы работать duна одном сервере над другим.

Например, выполнение du -sh /opt/foobarзаймет 5 минут на сервере A (на котором около 25 ГБ), а на сервере B та же команда с тем же объемом данных сообщит мне почти мгновенно. Я не вижу ничего явно очевидного при беге сверху и т. Д.

Любые советы высоко ценится.

Джон Вайнрауб
источник
3
Скорость du -sзависит не от размера данных, а от количества файлов. Оба дерева каталогов имеют одинаковое количество файлов?
Ладададада
2
Кроме того, duбудет работать намного быстрее, если все метаданные каталога (например, размеры файлов) в настоящее время кэшируются. Если это так по какой-либо причине на одном сервере, а не на другом, это приведет к большим различиям.
Свен
@Ladadada Я бы сказал, да, там примерно столько же файлов. Даже при добавлении звездочки для получения списка размеров файлов по отдельности требуется много времени для прокрутки. Но я не совсем уверен, как проверить, кэшированы ли метаданные или нет.
Джон Вайнрауб

Ответы:

6

Если у вас есть огромное количество файлов в этом каталоге, и содержимое каталога постоянно меняется, то сама запись каталога со временем фрагментируется. Затем, когда ОС читает содержимое каталога, будет много и много ненужных операций поиска на диске. Это происходит особенно с файловыми системами ext * (хотя ext4 может быть лучше) и со старыми файловыми системами ReiserFS v3.x (если они заполнены на 85% или около того).

Решение довольно простое:

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

Конечно, если все кэшируется в ОЗУ, это не имеет большого значения; обычно Linux кеширует часто используемые файлы и каталоги довольно агрессивно. Если вы действительно хотите сохранить содержимое этих каталогов в оперативной памяти, вы можете поместить что-то вроде ls -lah /your/dir 2>&1 >/dev/nullсвоего cron.

РЕДАКТИРОВАТЬ: О, одна вещь пришла мне в голову. Если на вашем сервере есть RAID-контроллер с резервным питанием от батареи с некоторым кешем, убедитесь, что батарея в порядке. Я видел ситуации, когда батарея разряжена, а контроллер полностью отключает кэш, что очень сильно портит производительность. Например, серверы HP могут сообщать в журналах iLO что-то о батарее контроллера; в реальной панели состояния сервера все выглядит нормально и зеленым, но только запись в журнале скажет вам об этом.

Янне Пиккарайнен
источник
1
Это, вероятно, займет у меня некоторое время, это на рабочем сервере, поэтому мне нужно будет сделать это в одночасье, и весь каталог содержит несколько сотен гигабайт данных, поэтому я не хочу перегружать его ... Я сообщу первым делом завтра утром. Спасибо за идею.
Джон Вейнрауб
Я все еще выполняю эту команду и не говорю, сколько времени это займет. Я даже обработал его, и cp все еще работает, прошло около 1 часа 15 минут с момента его запуска. Даже запуск du для этой папки в другой оболочке занял много времени, но вы думаете, мне нужен только umountдиск и fsckон?
Джон Вайнрауб
Просто дайте ему поработать, если это не мешает вашему производству. С RHEL5 и его планировщиком ввода / вывода CFQ по умолчанию вы можете поместить команду cp в свободный класс, чтобы он не запугивал другие процессы: ionice -c3 -p $(pidof cp)или около того.
Янне Пиккарайнен,
Пожалуйста, также прочитайте мое последнее редактирование.
Янне Пиккарайнен,
1
Я знаю, что прошло некоторое время, но я наконец-то нашел способ выполнить команду cp, о которой вы упомянули. Это два двух часа, чтобы скопировать 25 ГБ. После того, как вы сделали ход, другой ду-ш был таким же медленным. На самом деле, даже удаление директории с резервной копией происходит слишком медленно!
Джон Вайнрауб
0

Я предлагаю попробовать простую команду du без каких-либо переключателей. В конечном итоге вы увидите, какой каталог замедляет процесс. Это может быть неисправный диск или какая-то другая причина ...

Кирали Иштван
источник