Pull to refresh

Comments 47

UFO just landed and posted this here
UFO just landed and posted this here
А нефиг логи хранить на том же сервере, где приложение есть. syslog, udp, лог-сервер.
UFO just landed and posted this here
Даже в пределах localhost, использование syslog'а предпочтительно. У journald есть все настройки для того, чтобы логи не сожрали всё место. А вот самодеятельных хаккеров, которые сами себе на уме, где лог файлы создавать и в каком формате писать, надо бить по рукам.
UFO just landed and posted this here
Если деплой в руках админов — запрет на запись куда-либо. Если деплой в руках девелоперов — ну, так сказать, спасение утопающих дело фабрики классов абстрактных трейтов спасения утопающих.
А если деплой в руках админов, но кривое приложение порождает шквал вызовов функций подсистемы логирования?
То эта проблема будет обнаружена на стенде. У конфигурации приложения же есть стенд для тестирования, правда?

Кстати, шквал вызовов упрётся в лимит по скорости обработки UDP на ресивере и ничего фатального не случится. Лишнее просто дропнут.
UFO just landed and posted this here
Можно небольшую статью на эту тему?
С современными дистрибутивами, где есть systemd + journald, и настраивать ничего не надо, все само работает.
У journald есть все настройки для того, чтобы логи не сожрали всё место.
Да они и без настроек не сожрут.
Была полностью идентичная ситуация. Я просто тогда логирование полностью отключил для этого сайта.
Полезная статья. К слову, нечто «крадет» место на диске и на Windows тоже. У меня в системной папке регулярно собирается пара десятков гигабайт логов, которые приходится удалять по расписанию…
Таки вы не поверите, но есть gnuwin32. Там есть и du и df.
я таки предпочитаю cygwin. Вообще диски сканирую WinDirStat, который, собственно, и выявил их наличие. Теперь остается только устранить причину их возникновения.
Пару раз выхватывал ситуацию, когда на win-машине стремительно пропадает место. Scaner проблему не нашел. Показывал свободное место на винтах.
только перезагрузка помогла :(
du/df конечно замечательно, но вот для разбирания завалов на рабочей машинке не самое приятное решение. Есть какие-то утилиты, работающие в графическом режиме и позволяющие более наглядно и удобно все это проделывать?
Для Windows есть чудесная утилита SpaceSniffer.
А для линуксов?
К сожалению, не знаю альтернатив. Надеюсь, что кто-то подскажет.
du -hd1 достаточно наглядно показывает. Вместо единицы можно задать любой уровень вложенности. Еще можно поискать файлы больше определенного размера через find, например find / -size +100000k

Стандартные средства это вопрос привычки, функционала у них достаточно.
-x ещё нужно, иначе полезет во всякие /sys /proc и там погибнет.
SpaceSniffer рисует удобную визуализацию с последующим углублением. Удобно для десктопа, но на сервере нужно довольствоваться консолью.
image
Ну во-первых, таки ncdu
Baobab, kdirstat (хотя теперь это k4dirstat), filelight. Тысячи их.
Помимо ncdu, есть ещё замечательная gt5, которая делает или интерпретирует существующий du и показывает результат в виде дерева через браузер (обычно консольный)
Да и в других дистрибутивах нечто подобное часто есть
Первый выбор — это уже упомянутый ncdu.
скрин
image


Потом если хочется графики можно посмотреть ohmu:
гиф скринкаст
image
SequoiaView под windows и gdmap под линукс использовал:
Скриншоты
image
image
Я тоже, но потом перешел на WinDirStat, т.к. SequoiaView некорректно отрабатывает ссылки и соединения NTFS. Для меня это важно, т.к. я предпочитаю хранить бэкапы iTunes не на системном относительно небольшом SSD, а на HDD.

Аналог для Linux — KDirStat.
Ещё под Windows есть удобная мелкая утилита SequoiaView. Занятое место показывает цветными прямоугольниками, соответственно занимаемому размеру, наглядно.
Двум из самых базовых команд посвящена большая статья? Надеялся хоть что-то новое расскажете, лайфхаки какие-нибудь.
Например, логи можно не чистить а gzip'ать — в ключе последних законов они вам могут понадобиться.

Насчет «частых мест» — еще стоит глянуть на кэш пакетного менеджера — он тоже бывает хорош.
Ситуация будет гораздо интереснее, когда закончится не место, а inode. Тут придется искать каталоги с наибольшим количеством файлов. В обычных случаях спасет:
find /var/www -type d | ( while read A; do B=`ls -l "$A" | wc -l`; if [ "$B" -gt 999 ] ; then echo $B $A; fi ; done)

В совсем плохих случаях, приходилось запускать du и смотреть на каких каталогах он виснет. После смело проверять размер дескриптора директории:
# ls /var/www/test/data/
drwxrwxrwx  2 test test 124M Nov 19 18:05 bin-tmp

С таким размером директории бесполезно делать ls внутри нее. Дальнейшие действия вас приведут к посту seriyPS
Ну сколько можно в этом топике советовать ncdu? :) Он умеет показывать количество файлов в директориях и сортировать по кол-ву файлов. Очень удобный инструмент, чтобы понять, куда покончались inode.
Ещё весело бывает в тех случаях, когда logrotate настроен, но неправильно (приложение не переоткрывает лог, в результате чего продолжает писать в открытый дескриптор при уже удалённом файле). df в таком случае показывает, что места нет, а du по директории — что всё замечательно.

Решается достаточно просто с помощью lsof.
lsof +D dir

Это покажет все открытые файлы в директории dir и поддиректориях (+d, если не нужно спускаться по дереву).
Около открытых, но удалённых файлов будет стоять (deleted). Далее смотрим PID и говорим процессу переоткрыть лог (ну или просто перезапускаем процесс, если можно).
Далеко не всегда работает. Обычно спасает только «lsof | grep deleted | grep dir». Да, работает медленно, но гарантированно.
А кто знает, в чем может быть причина такого глюка?

Вкратце: на ext3 образовалась директория с необычно большим размером (не содержимого всего дерева файлов, а именно директории как файла).
# stat /home/art/
File: `/home/art/'
Size: 28336128 Blocks: 55408 IO Block: 4096 directory

В результате чтение (например, командой ls) занимает несколько десятков секунд.
У du есть еще полезный параметр --max-depth=1, которым можно указать количество уровней вложенности поддиректорий. Удобно сначала найти в корне проблемную папку и уже потом её разбирать.
я вообще делаю bash-alias вида
du = 'du -h --max-depth=1'
который сразу выводит размер в человеческих единицах и для одной папки просто при вызове du /dir1/dir2
Ничего не сказано об открытых файловых дескрипторах, которые жрут место даже после удаления большого файла (характерно только для Unix). Так будет до закрытия дескриптора или завершения процесса, который открыл дескриптор.

Ожидал прочитать детектив, прочитал man.
Sign up to leave a comment.