Данная статья никак не относится к Minecraft.
Сразу хочу сказать, что я нуб в администрировании серверов, но как следует из этой долгой истории данную проблему много кто не знает и не может быстро детектировать.
Уже оказывается долгое время наш сайт, а точнее сервер на котором он стоит преследует одна мелкая но пакостная проблема.
Все было давно, более года назад, этот сайт жил на vds (сервер с соседями) сервере колобриджа, система была дебиан или центос не помню точно.
Спустя какое то время сайт стал тормозить, просмотр top обнаружил высокий процент wa, (дисковая активность). (тогда я был совсем нуб нубом )
Простым языком все было нормально, но сервер не успевал читать и писать на диск информацию, отсюда шли тормоза.
Обвинив хостера и не добившись ничего от техподдержки(не детектировали проблему) я принял решение переезжать в хетзнер на свой сервер.
После переезда все было отлично, La - 0.2-0.5 и это при 40-60 тыс человек в день, я привык к дебиану и решил его использовать, ставил систему не сам, воспользовался ispmanager, панель сама все настроила, да и сама панель удобная. Все было в ажуре 4-5 месяцев, потом я заметил la 1-3 и временами 5, я не придал сильного значения, сайт не тормозил, спустя 1-2 недели la был уже 5-10 и временами 20, начались тормоза.
Изучение top опять детектировало высокую дисковую активность, вверху списка прыгал mysql, валил на него, крутил конфиги, безуспешно.
Тогда, я создал тему на форуме, и мне к сожалению не помогли, вызвался помочь человек с темой о администрировании серверов и многими отзывами.
Крутил сервер около 2 часов, настроил mysql, поставил прочую фигню и без которой все отлично работало.
Снизив на тот момент La с 15 до 7 (хотя он и так постоянно прыгал туда сюда).
При этом заметные тормоза сайта остались, этот недоадмин сказал что сервер слабый, винтам хана, давай мне мои заработанные 100$
Переехал на другую машину, аналогичную, проблема ушла, подумав на неисправность дисков (ведь хетзнер это лоухост) я забыл о сервере на 3 месяца...
И вот, настал тот миг, новый сервер, и снова проблема точь в точь.
Теперь я решил разбираться в сути проблемы, новая тема на форуме, и ура на форуме помогли, но еще раньше я сам случайно нашел проблему.
Долго курив интернет, поставив iotop я увидел злосчастный процесс jbd2/md2-8 который жрет всю дисковую активность(занимает диск).
Гуглив дальше узнал, что это журналирование файловой системы, и да оно бывает нагружает диск.
Начал курить как выключить жуналирование на debian, не нашел.
Обратился к системному администратору знакомого человека.
Он попытался ограничить данный журнал покрутив файл etc\fstab, проблема не ушла, человек сказал что винтам хана, переезжай скорее, хоть денег не взял.
Я уже был морально готов к очередной смене машины, но случайно зашел в заветную папку и понеслось...
Нашел ее случайно, ползал по папкам, заметил подозрительно много файлов и решил проверить.
Хотя ребята на форуме попросили вывод одной команды и когда я ее выполнил я бы тоже погуглив понял и нашел бы этот же источник гадости.
И так, проблема jbd2/md2-8 или дисковой активности, низкой производительности диска на debian является Directory index full.
Эта ошибка вызывается огромным количеством файлов в какой то директории, настолько огромным, что просто убивает диск нафиг, индексы кончаются журнал пишет о ошибках забивая дисковую активность.
Данная папка расположена в папке вашего пользователя и называется она mod-tmp, в ней хранятся временные файлы сессий(когда человек заходит на сайт, создается файл сессии), да да, "временные файлы" которые не хотят сами удаляться.
Это проблема Debian(возможно и других систем) установленного ispmanager, и она у многих, просто не у всех сайты с такой посещаемостью и чтоб накопить такое количество сессий необходимо 2-3 или более лет.
В моем случае в папке за 3 с небольшим месяца накопилось аж 19.4 миллиона файлов. с 6 утра и до 15.00 накопилось более 100 000 файлов, масштаб огромен.
Собственно необходимо удалить все файлы к чертям, но тут еще одна проблема, так просто не удалить, стандартные решения плохо работают и сильно нагружают диск, сайт лежит.
Теперь рекомендации как удалить много файлов из директории Debian не нагружая сервер
Все операции лучше проводить ночью, когда людей на ваших сайтах нет.
Начнем с подсчета количества файлов:
ls -R /var/www/ваш пользователь/data/mod-tmp | wc -l
Данная операция может затянуться на 10-15 минут и положить сайты.
Как удалить относительно небольшое количество файлов:
find /var/www/ваш пользователь/data/mod-tmp/ -delete
Скорость удаления у меня, примерно 0.8-1 миллион файлов в час, при этом сайт сильно виснет, делал это ночью.
Удалить папку командой:
rm -r /var/www/ваш пользователь/data/mod-tmp2/
Лично у меня производительность была выше, удаляет примерно 2.5 млн за 1 час. Удаляет папку, по этому надо переименовать текущую, а на ее место создать новую.
Если вы запустили удаление, сайт повис, а вам надо отменить удаление, включить top, дождитесь процесса find и посмотрите его pid, после чего введите kill и его pid.
Если у вас уже как у меня LA под 10 или 20, чтоб снять нагрузку, переименуйте папку, а на ее место создайте другую такую же, с такими же правами, мне помогло, нагрузка тут же упала.
Способ по удалению файлов который предложил человек с форума: Ссылка на его тему
Команда:
cd /dir; ls -f /dir | perl -pe 'select(undef,undef,undef,0.5)' | xargs -n 100 rm
Где /dir адрес директории (полный), а 0.5 длинна задержки, чем меньше тем быстрее идет удаление.
Что бы посмотреть работает ли команда и узнать Pid процесса для остановки вводим команду:
ps aux |grep perl
Вы увидите часть вашей команды.
Если ввести команду в putty она перестанет выполняться после закрытия соединения, я добавил команду в крон(планировщик задач), не знаю почему но когда запустил и проверил выполнение, там оказалось два процесса, я завершил один и оставил так на несколько дней. Крон поставил на выполнение раз в год, если я остановил процесс, то просто запускаю в ручную.
После ручного завершения процесса удаления(оценить сколько файлов удалило) через 2-3 дня, у меня несколько минут грузил сервер процесс ls, видимо обновлял список файлов, не знаю, но всегда лучше делать это ночью когда сервер не нагружен.
Мой сервер нормально работал с La 1-3, без видимых тормозов с задержкой 0.1, ночью иногда включал с задержкой 0.03, удаляет быстро, но днем не потянет.
Скорость удаления с задержкой 0.1 примерно 1 миллион файлов в сутки.
Теперь как предотвратить накопление файлов:
Главное, вам надо удалить все текущие файлы сессий перед данной процедурой, а иначе он начнет чистить и положит вам сервер, например у меня он положил бы часов на 10 не меньше.
Необходимо создать файл /etc/php5/conf.d/session-gc.ini с содержимым:
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
Перезагрузить apache.
Все, проблема решена, более сессии копиться не будут.