PHP session_start() No space left on device (28) причина и решение.

В одинь прекрасный день на моем впс сервере перестали работать сайты один за другим постепенно, в логах смотрю php ругается что не хватает ему место на диске, типа такие ошибке

E_WARNING: session_start(): open(/var/lib/php/session/sess_ji9k4chqke3pde98a5n5m1vca5, O_RDWR) failed: No space left on device (28)

Сперва я подумал может диск переполнился и проверил

df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/ploop10802p1  493G  202G  271G  43% /
none               8.0G  4.0K  8.0G   1% /dev
none               8.0G     0  8.0G   0% /dev/shm

свободных мест было много. Думал может у хостера в дедик сервере где стоят эти VPS виртуал сервера диск переполнился, написал суппорту они сказали что с их стороны все нормально. Как всегда стандартный ответ дают.
Начал сам искать причину, и нашел причину, окажется это случается из-за того что я в моих скриптах использовал кеширование запросы и все хранилось в одном папке, в этом кеш папке накопилось больше 10 миллионов файлов более 200ГБ, из-за этого система начинает глучит и не может создавать и записать новые файлы.
Начал удалять файлы c помощью rm, окажется rm не может удалить так много файлов, пришлось снова искать решение и нашел.
Вот несколько способов удалить миллион файлов:

for f in /tmp/logs/*.log; do rm "$f"; done

Или удалить файлы, которые старше семи дней:

for f in /tmp/logs/*.log
do
  find $f -mtime +7 -exec rm {} \;
done

Самой главное теперь не забывать чистить логи и кеш регулярно, чтобы не засорять файловую систему.

Add a Comment