17 мая


Автор: MSW
Версия DLE: любая
Сайт поддержки: https://0-web.ru/

Tmpfs — временное файловое хранилище во многих Unix-like ОС. Предназначена для монтирования файловой системы, но размещается в ОЗУ вместо ПЗУ.
Статья посвящена методу ускорения работы DLE через tmpfs, в результате переноса директории кеша DLE в оперативную память.
Так как работа с оперативной памяться в разы быстрее чем работа с диском.

Входящие условия:
- выделенный сервер
- ОЗУ >= 1GB
- предположим что сайт располагается в директории на сервере: /var/www/site.ru/

В CMS DLE в папке кеша кроме временных файлов также хранятся файлы которые создаются/пересоздаются в процессе сохранения настроек, или выполнения тех или иных действий скрипта. Так как tmpfs является энергозависимой, тоесть при перезагрузке сервера данные которые в ней находятся будут безвозвратно утеряны, то надо както былобы сохранить важные файлы настроек и системного кеша, которые автоматически не создаются, например структура каталогов в папке кеша, категории, группы пользователей и т.д. вот тут на выручку приходит rsync.

Создаём директорию с кешем, которая будет на диске:
mkdir /var/www/cache_site.ru
chmod 777 /var/www/cache_site.ru


Копируем в созданную директорию теккущие данные:
rsync -a /var/www/site.ru/engine/cache/ /var/www/cache_site.ru/


Для синхронизации актуальных данных добавляем в крон сервера
crontab -e

следующую строку:
*/10 * * * *    rsync -rpogt --delete /var/www/site.ru/engine/cache/ /var/www/cache_site.ru/ > /dev/null 2>&1

тут указано - каждые 10 минут синхронизировать данные(рекурсивно, с сохранением привелегий, времени создания) с директории кеша сайта(в оперативке) в директорию на диске.



Также когда сервер будет перезагружен надо смонтировать tmpfs и поместить в неё текущие данные кеша. Для этих целей создаём скрипт:
mcedit /etc/init.d/tmpfs_cache

с содержимым:
#!/bin/bash
mount -t tmpfs -o size=50M tmpfs /var/www/site.ru/engine/cache/
rsync -rpogt /var/www/cache_site.ru/ /var/www/site.ru/engine/cache/

тут size=50M - эо размер монтируемого блока. У меня например больше 25 метров кеш дле не занимает, потому так чтоб с запасом 50 метров вполне хватит.

Делаем файл исполняемым:
chmod +x /etc/init.d/tmpfs_cache


Добавляем в автостарт: (пример для убунту и дебиан, для своей ОС - ищите мануалы каким образом это делается)
update-rc.d tmpfs_cache defaults


Последний этап: запускаем созданный скрипт монтирования раздела оперативной памяти в папку кеша сайта и копирования данных в эту директорию.
/etc/init.d/tmpfs_cache




Подобным образом можно также перенести всю БД в оперативную память.



При написании использовались источники:
- Tmpfs
- Виртуальный диск в памяти: как создать ramdisk в Linux?
- rsync

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