Можно ли сделать программу du менее агрессивной?

21

У нас есть постоянная работа, которая duсводит воедино ряд подкаталогов, выявляет худших нарушителей и использует результаты, чтобы найти, есть ли вещи, которые быстро растут, чтобы обнаружить потенциальные проблемы. Мы используем diffпротив снимков, чтобы сравнить их.

Существует каталог верхнего уровня с несколькими (несколькими сотнями) подкаталогами, каждый из которых может содержать 10 тысяч файлов в каждом (или более).

« du -s» В этом контексте может быть очень агрессивным в отношении ввода-вывода, в результате чего наш сервер освобождает кеш-память, а затем возникают огромные всплески ввода-вывода, которые являются нежелательным побочным эффектом.

Какую стратегию можно использовать для получения тех же данных без нежелательных побочных эффектов?

Дэнни Стейпл
источник
9
В Германии вы можете заменить его на «Sie».
Федерико Полони

Ответы:

28

Посмотрите на ionice. От man ionice:

Эта программа устанавливает или получает класс планирования io и приоритет для программы. Если аргументы не заданы или только -p не заданы, ionice запросит текущий класс планирования io и приоритет для этого процесса.

Для запуска duс классом ввода-вывода "idle", который имеет самый низкий доступный приоритет, вы можете сделать что-то вроде этого:

ionice -c 3 du -s

Это должно остановить duвмешательство в другие процессы ввода / вывода. Вы также можете рассмотреть возможность аренды программы, чтобы снизить приоритет процессора, например:

renice -n 19 "$duPid"

Вы также можете сделать как во время инициализации:

nice -n 19 ionice -c 3 du
Крис Даун
источник
5
Чтобы арендовать существующую программу, вам нужно позвонить reniceвместо nice. Для того, чтобы начать duс обеими ionice и приятным, вы можете приковать обе программы: nice -n19 ionice -c3 du.
Джофель
niceСам по себе также влияет на приоритет планировщика ввода-вывода, а не только на процессор.
Иордания
1
@jordanm Насколько я знаю (по крайней мере, в Linux), это niceвлияет только на точность процессора (что может косвенно влиять на ввод-вывод, но не должно влиять на приоритет планировщика ввода-вывода). Где вы видите это поведение? Это где-то задокументировано?
Крис Даун
@ChrisDown - я вспоминаю, что читал его в
статье «
@jordanm Хм, у меня есть эта книга. Я быстро просмотрел его и обнаружил, что страница 263 содержит подробные сведения о ней nice, и она говорит только о квантах базового времени процессора. Ты хоть представляешь, где в книге это было? Мне было бы интересно читать авторитетный источник , что государства, он не упоминается в man nice, man 2 nice, man 2 setpriority, info niceили info 'nice invocation', насколько я могу сказать, что это странно , потому что некоторые из них идут в совсем немного подробнее о том , как niceработы вызова и что это делает.
Крис Даун
4

Если у вас есть тонны файлов в одном каталоге, это может быть причиной скачков ввода-вывода, так как многие файловые системы плохо обрабатывают большие файловые деревья в одном каталоге. Разделение его на несколько подкаталогов может помочь в этом. Если у вас есть более 10 тыс. Файлов в одном каталоге, и это вызывает проблемы, вам, вероятно, следует разделить его.

Что касается отслеживания использования диска, вы могли бы сначала взглянуть df, если значение использования там быстро не возрастало, то и подкаталоги не росли, и вы можете duвообще пропустить .

Другой альтернативой может быть система дисковых квот, которая постоянно отслеживает использование, если ваша файловая система поддерживает это.

frostschutz
источник
Система представляет собой ферму сборки, поэтому количество файлов в каталоге действительно зависит от разработчиков компонентов, которые мы собираем. dfэто не сработает - проблема в том, что у нас есть сценарии очистки, поэтому мы можем не видеть никаких изменений, но пропустили раннее предупреждение для автоматической работы, которая активно захватывает дисковое пространство. Мы используем zabbix для мониторинга общего использования диска, но знание отдельных каталогов, в которых все идет немного по-другому, довольно важно.
Дэнни Стейпл
0

В дополнение к этому ioniceвы можете попытаться сделать доступ к диску более эффективным. Это можно попробовать, выполнив

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

во-первых (возможно, и через ionice). Это не будет работать, если есть слишком много файлов. Сколько это слишком много, зависит от количества свободной оперативной памяти.

Хауке Лагинг
источник