История о MySQL Errcode: 28 и автоочистке сессий php

Однажды я увидел что мой сайт выпал с ошибкой MySQL Errcode: 28. Ошибка это явно значила что базе не хватает места на диске. Это вызвало у меня удивление, ибо на жестком диске было свободно еще около 100 Гб.

При детальном рассмотрении того где сколько занято с помощью команды

df -h
я понял что папка /tmp отведенная под tmpfs (файловую систему в оперативной памяти) занята на 100%

Чтобы улучшить ситуацию я немного увеличил размер /tmp

mount -o remount,size=2G /tmp

Оставалось разобраться с тем откуда уже накопился гиг и доколе это будет продолжаться.
Заглянув внутрь я увидел что весь гиг это php сессии. И стало понятно что установленный в Ubuntu 14.04 php с дефолтными настройками идет с выключенной опцией автоудаления сессий и они могут копиться бесконечно, мешая жить всем окружающим.

Можно было воспользоваться стандартным механизмом очистки сессий в конфигах php сделав

session.gc_probability = 1
Это значит что с вероятностью 100% при старте новой сесси будет запускаться сборщик мусора и удалять старые сессии, старше чем session.gc_maxlifetime.

Но было принято решение не запариваться с регулярным запуском, а повесить на крон скрипт

[ -x /usr/lib/php5/maxlifetime ] && [ -d /tmp ] && find /tmp/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm ;
Который будет по расписанию очищать папку /tmp от застаревших сессий.

С тех пор жизнь наладилась, и база жила себе спокойно и работала без сбоев. Конец.

{{ message }}

{{ 'Comments are closed.' | trans }}