Форум программистов, компьютерный форум, киберфорум
RinatV
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
Рейтинг: 5.00. Голосов: 1.

Вычищаем mod-tmp

Запись от RinatV размещена 07.01.2013 в 04:01

Под новый год купили новый сервер, т.к. за месяц до этого случился непонятный обвал более слабого сервера, удачно переехали, вроде работает норм. Решил удалить на старом сервере замести все следы, последовательно удаляя программы, пользователей.

Только вот при удалении пользователей случился какой то завис, гугл показал что в директории mod-tmp пользователей оказывается скапливается большое количество сессионных файлов php. Их нужно переодически чистить, что и видимо явилось причиной больших нагрузок на сервер.

В принципе с удалением файлов в Linux проблем нет, стоит только перешагнуть через rf -rf mod-tmp/, но эта команда не неинтерактивная, она молча удалит все файлы. Однако при удалении 5 милионов мелких файлов это молчание выглядит как зависание, есть конечно и другие рецепты команд, но все они расчитаны а запуск по расписанию в cron без эха.

Мне было интересней увидеть как все это происходит, в этом мне помог ruby, по скорости конечно не очень, зная особенности системы можно наверняка и побыстрей это делать, допустим запуском нескольких потоков, собственно вот код:

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
dr='mod-tmp/'
d = Dir.new(dr)
n=0
l=Time.now
d.each do |path|
  if n%1000==0
    x=Time.now
    puts "#{n} +#{x-l} #{dr+path}"
    l=x
  end
  File.delete dr+path if !FileTest.directory? dr+path
  n+=1
end
код отсчитывается через 1000 найденных файлов, главное знаем что делается,да и время поначалу было 10 секунд на 1000 файлов, так что надежда появляется сразу. 26 секундные итерации с самого начала и не меняются, видимо что-то работает:

Код:
105000 +26.415262997 mod-tmp/sess_3121561d6d09c577e39ca46ccdfc3a66
106000 +5.780714248 mod-tmp/sess_9d2088fbfad3dab0ef69073fcab876b7
107000 +5.846447822 mod-tmp/sess_6e8328858731d3ef86bbe81e603384f8
108000 +5.794790207 mod-tmp/sess_33cd1a077b222a3dbf0a9b7ade8ea431
109000 +5.269644683 mod-tmp/sess_e909798c803cd2ab03e68659b06fb6dc
Размещено в Без категории
Показов 14624 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для turbanoff
    Раз уж на сервере был PHP, почему бы не использовать его? Или bash на крайний случай.
    Запись от turbanoff размещена 09.01.2013 в 14:46 turbanoff вне форума
  2. Старый комментарий
    php долго не выдерживаю.
    В bash не нашел интерактивного варианта для копипаста, сам эффективные варианты пока сочинять не умею. ls сперва создаст список, который недождаться, find видимо делает тоже самое, т.к. эффекта после запуска с опциями -delete не видно по отчету df -i. Передачу по xargs или же просто rm не испытывал, пока эти возможности для меня неочевидны.

    Приведенный способ интерактивен, эффект сразу есть, правда скорость не такой высокий к сожалению 5000 файлов в минуту, что сравнимо с Midnight Commander, хоть и происходит некое ускорение со временем, но со временем 26 секундные интервалы увеличиваются и начинают следовать друг за другом, видимо сказывается или журналирование или обнадеживание RAID, но в этих вопросах разбираться уйдет времени более 10 часов, такое время проработал скрипт, хотя должно было проработать больше.

    А с ruby получил желаемый результат за 3 минуты, отчет написал через 21 минуту
    Ruby
    1
    2
    3
    4
    5
    
    Welcome to IRB. You are using ruby 1.9.3p362 (2012-12-25) [i386-mingw32]. Have f
    un ;)
    >> 109000 / 5000 #=> 21
    >> 5*10**6 / 5000 / 60 #=> 16
    >>
    С пулом потоков тоже испытывал, правда ускорения никакого нет видимо
    Запись от RinatV размещена 14.01.2013 в 14:15 RinatV вне форума
    Обновил(-а) RinatV 14.01.2013 в 14:18
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru