суббота, 24 июля 2010 г.

tmpfs Операции с файловой системой в виртуальной памяти

tmpfs Операции с файловой системой в виртуальной памяти:

Для примонтирования при старте вносим в /etc/fstab:
tmpfs /tmp tmpfs size=500M,nr_inodes=1m,nosuid 0 0
tmpfs /var/lib/php5 tmpfs size=200M,nr_inodes=1m,nosuid 0 0
первая строчка размещает в памяти /tmp, вторая папку хранения сессий

Для сосздания папки для сессий без рестарта системы нужно запустить (или набрать в терминале) следующую последовательность строк:
mkdir /tmp/ses
/etc/init.d/nginx stop
mv /var/lib/php5/* /tmp/ses
mount tmpfs /var/lib/php5 -t tmpfs -o size=200M,nr_inodes=1m,nosuid
mv /tmp/ses/* /var/lib/php5
/etc/init.d/nginx start
rm -r /tmp/ses

предварительно лучше отредактировать fstab

Вот более сложный вариант, когда данные сессий хранятся в tmp:

mkdir /dev/shm/ses
/etc/init.d/nginx stop
/etc/init.d/php5-spawn stop
/etc/init.d/mysql stop
mv /tmp/* /dev/shm/ses
mount tmpfs /tmp -t tmpfs -o size=1g,nr_inodes=1m,nosuid
mount tmpfs /var/lib/php5 -t tmpfs -o size=200M,nr_inodes=1m,nosuid
mv /dev/shm/ses/* /tmp
/etc/init.d/mysql start
/etc/init.d/php5-spawn start
/etc/init.d/nginx start
rm -r /dev/shm/ses
du -hsx /tmp

Запуск memcache через unix.socket

Запуск memcache через unix.socket
В файл /etc/memcached.conf добавляем строчки

#-s unix socket path to listen on (disables network support)
-s /tmp/memcached.socket
#-a access mask for unix socket, in octal (default 0700)
-a 0777

Последняя нужна, что бы пользователь от которого работает вебсервер (у меня www-data) смог прочитать сокет
Перезапускае деамон мемкеша /etc/init.d/memcached restart

Подключаемся к Memcache из php скрипта:
$memcache = new Memcache;
$memcache->connect('unix:///tmp/memcached.socket',0);
Все теперь memcache не должен уступать по производительности tmpfs или /dev/shm

Правда в этом случае перестают работать сессии в мемкешед. Т.е. следующая конструкцияр работать не будет:

$session_save_path = 'localhost:11211';
$session_save_path = 'localhost:11211,unix:///tmp/memcached.socket:0';

ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);

Но для сессиий лучше всего все таки tmpfs