LINUX.ORG.RU
ФорумAdmin

Удалить много мелких файлов


2

1

А конкретно php сесии.

Как удалить быстро или без сильной нагрузки на диск очень много файлов php сессий?

Быстро - быстрее, чем rm sess_*

Без сильной нагрузки на диск - даже с ionice -c 3 сервера заметно тормозят.

Очень много - от 2 GB (обычно)

Про gc у php знаю, вопрос не о нем, вопрос о том, что делать если уже.



Последнее исправление: desruptor (всего исправлений: 1)

неужели 2 гига файлов можно удалить простым rm sess_* и не получить Argument list is too long?
Ну, и конечно странно и непонятно хотеть быстроты если удаляете в Idle (с3)
Если в приоритете нагрузка а не скорость, то кроме как добавить ещё и nice к этому ничего в голову не приходит.
nice -n 19 ionice -c3 -n7 rm sess*

zolden ★★★★★
()
Ответ на: комментарий от zolden

>неужели 2 гига файлов можно удалить простым rm sess_* и не получить Argument list is too long?

Иногда получается, но чаще испольуем find + rm

Приоритет был ИЛИ скорость ИЛИ низкая нагрузка.

nice -n 19 ionice -c3 -n7 rm sess*

А тут nice не сработает на ionice?

desruptor
() автор топика
Ответ на: комментарий от desruptor

Это комбинация из интернетов, врать не буду - сам не проверял. Есть сомнения по поводу быстродействия связки find+rm, советую посмотреть в сторону возможностей шелла

http://michael-prokop.at/blog/2004/07/26/zsh-zargs/

zolden ★★★★★
()
Ответ на: комментарий от zolden

Спасибо, но вариант смены шела не рассматривается.

desruptor
() автор топика

find ./ -name «sess_*» -delete

А сессии можно попробовать хранить, например, в memcached. Я, правда, так и не тестировал в серьёзном продакшене. Может скоро займусь, но у мну питон а не php и вообще я хочу сессии хранить в (шифрованных)куках. Ну а если сессия большая то только тогда уже выносить на сервер данные.

Хотя туда-сюда куки гонять тоже не очень хорошо, тут надо всё взвесить.

true_admin ★★★★★
()

Кстати, популярный вопрос при приёме на работу :).

true_admin ★★★★★
()

true_admin:

find ./ -name «sess_*» -delete

+1 не нужно из find запускать rm, это такой моветон.

если достаточно озу файлы сессий можно хранить в tmpfs
и кстати, в debian например не работает gc в php. вместо него - скрипт в cron:

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,19,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm

fr_butch
()

[offtop]
Так этот ваш PHP идентификатор каждой сессии хранит в отдельном файле? И потом еще мне эти люди говорят, что я - велосипедостроитель, раз пыхпыхом не пользуюсь???
[/offtop]
no way!

Eddy_Em ☆☆☆☆☆
()

либо быстро, либо без нагрузки. если надо без нагрузки, то find -exec и sleep

Frakhtan-teh ★★
()

p.s.: может быть, отложить до запланированного даунтайма, просто перенеся каталог хранения временных файлов в другое место? graceful restart всяко быстрее будет

Frakhtan-teh ★★
()

Привет всем.

А если сделать mv sessdir sesstmpdir && mkdir sessdir и потом в sesstmpdir удалять себе не спешно по файлу в день?

Lego_12239 ★★
()
Ответ на: комментарий от fr_butch

>09,19,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm

Подобное при 2+GB файлов сессий уводит сервак в даун :)

desruptor
() автор топика
Ответ на: комментарий от true_admin

За вариант «А можно попробовать», спасибо поглядим, но сейчас вопрос увы в другом.

find ./ -name «sess_*» -delete

Замерим.

desruptor
() автор топика
Ответ на: комментарий от desruptor

Про день это была шутка юмора. Можно удалять с перерывом в секунду по одному, допустим. Или типа того. В общем, думаю, можно замерять и найти необходимую задержку экспериментально.

Lego_12239 ★★
()
Ответ на: комментарий от desruptor

> Подобное при 2+GB файлов сессий уводит сервак в даун :)

Классный у вас сервак, всего полмиллиона файлов удаляется, а он в даун уходит.

AnDoR ★★★★★
()
Ответ на: комментарий от desruptor

Ну сделай в loop-девайсе другую фс и периодически её обнуляй, будет проще, мне кажется.

AnDoR ★★★★★
()
Ответ на: комментарий от Eddy_Em

[offtop]

Так этот ваш PHP идентификатор каждой сессии хранит в отдельном

файле? И потом еще мне эти люди говорят, что я -

велосипедостроитель, раз пыхпыхом не пользуюсь???

[/offtop]


Что тебе не нравится :trollface: ?

kernel ★★☆
()
Ответ на: комментарий от desruptor

если за 30 минут у вас набегает 2GB файлов сессий пора задуматься о том чтобы изменить схему, напрмиер создавать сессию только когда в этом действительно есть необходимость. либо вас ддосят =)

fr_butch
()
Ответ на: комментарий от desruptor

>А тут nice не сработает на ionice?
работает, но опция "-c" позволяет указать ещё и класс
0: none, 1: realtime, 2: best-effort, 3: idle

megabaks ★★★★
()
Ответ на: комментарий от desruptor

>если стоят простые SATA и не очень сильный проц, он ТАК тормозит
оно умудряется ещё и проц грузить? о_О
привяжи тогда какашку к одному ядру, типа
schedtool -a 1 -D -n 19 -e тут_команда
привяжет к одному ядру (второму емнип) задаст SCHED_IDLEPRIO минимальный приоритет
а если ещё и ionice прикрутишь, то я даже не представляю как оно сможет затормозить что-то

megabaks ★★★★
()
Ответ на: комментарий от megabaks

>schedtool -a 1 -D -n 19 -e тут_команда

О! Круто! Этого-то и не хватало :)

desruptor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.