Ускорение работы с сессиями PHP и их удаления с помощью виртуального диска

При работе веб-сервера происходит генерация огромного количества мелких файлов для сессий. Количество таких файлов может достигать много миллионов в суток. Как результат, рано или поздно исчерпывается лимит на количество файлов и система дает сбой. Приходится пересоздавать каталог и удалять старые сессии. Удаление такого количества сессий может создавать очень высокую нагрузку на сервер, мешая комфортной работе пользователей, а так же процесс удаления может происходить много суток. Могу предположить, что такие мелкие записи не очень полезны для винчестеров.

Как же мгновенно удалять файлы сессий так, чтоб этого не замечали пользователи ?

Для этого, можно воспользоваться записью информации о сессиях на диск в памяти. Такой диск мгновенно очищается и работает до тех пор пока не выключится питание сервера или пока размаунтится диск.

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

Поделюсь опытом, как реализовал построение дисков я у себя на серверах.

Создание диска в памяти

Создаю BASH-файл create_ramdisk для создания диска:

#!/bin/bash

mkdir /sessions
chmod 777 /sessions

mount -t tmpfs -o size=32G tmpfs /sessions

 

Удаление диска из памяти

Создаю BASH-файл del_ramdisk для удаления диска из памяти:

del_ramdisk

 

Пересоздание диска в памяти (с очисткой данных)

Создаю BASH-файл recreate для пересоздания диска:

#!/bin/bash

umount /sessions

 

Автоматизация пересоздания диска в памяти через Cron

В /etc/crontab добавляю строчку:

00 3    * * *    root    /fw/ramdisk/recreate

 

Замена каталога сессий

Делаем симлинк с каталога /sessions в /var/lib/php/sessions. Где обычно складируются сессии.

Автор: 2022. Рудюк Сергей Анатольевич

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.