При работе веб-сервера происходит генерация огромного количества мелких файлов для сессий. Количество таких файлов может достигать много миллионов в суток. Как результат, рано или поздно исчерпывается лимит на количество файлов и система дает сбой. Приходится пересоздавать каталог и удалять старые сессии. Удаление такого количества сессий может создавать очень высокую нагрузку на сервер, мешая комфортной работе пользователей, а так же процесс удаления может происходить много суток. Могу предположить, что такие мелкие записи не очень полезны для винчестеров.
Как же мгновенно удалять файлы сессий так, чтоб этого не замечали пользователи ?
Для этого, можно воспользоваться записью информации о сессиях на диск в памяти. Такой диск мгновенно очищается и работает до тех пор пока не выключится питание сервера или пока размаунтится диск.
На серверах в последнее время много оперативной памяти, поэтому, работа с дисками в памяти – прекрасное решение проблемы. При этом, происходит ощутимо меньше нагрузка на дисковые накопители, дисковые накопители дольше служат и система в целом работает ощутимо быстрее.
Поделюсь опытом, как реализовал построение дисков я у себя на серверах.
Создание диска в памяти
Создаю BASH-файл create_ramdisk для создания диска:
1 2 3 4 5 6 |
#!/bin/bash mkdir /sessions chmod 777 /sessions mount -t tmpfs -o size=32G tmpfs /sessions |
Удаление диска из памяти
Создаю BASH-файл del_ramdisk для удаления диска из памяти:
1 |
del_ramdisk |
Пересоздание диска в памяти (с очисткой данных)
Создаю BASH-файл recreate для пересоздания диска:
1 2 3 |
#!/bin/bash umount /sessions |
Автоматизация пересоздания диска в памяти через Cron
В /etc/crontab добавляю строчку:
1 |
00 3 * * * root /fw/ramdisk/recreate |
Замена каталога сессий
Делаем симлинк с каталога /sessions в /var/lib/php/sessions. Где обычно складируются сессии.
Автор: 2022. Рудюк Сергей Анатольевич
Leave a Reply