Possíveis causas do erro completo do PHP / var / lib / php / session

2

Estou encontrando problemas aqui com minhas sessões de PHP e não tenho idéia de como corrigir isso.

>> df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/vglocal20120426-root00   36274176 32885458 3388718   91% /
tmpfs                                6176642       1 6176641    1% /dev/shm
/dev/sda1                            64000      47   63953    1% /boot
/dev/mapper/vglocal20120426-tmp00    131072    1703  129369    2% /tmp

e

>> df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vglocal20120426-root00    545G  248G  270G  48% /
tmpfs                                 24G     0   24G   0% /dev/shm
/dev/sda1                             243M   31M  199M  14% /boot
/dev/mapper/vglocal20120426-tmp00     2.0G  802M  1.1G  42% /tmp

e eu tenho essas estatísticas malucas

drwx-wx-wt   2 root root   1016389632 Jul  9 08:13 session

O iNodes já tem 91% e continua crescendo a cada segundo. O problema é que eu não tenho tráfego enorme (baseado em análises em tempo real) para o meu site. Eu não tenho certeza do que está acontecendo aqui. Como rastrear o problema e evitar que isso aconteça novamente.

Desativamos o coletor de lixo do PHP e usamos o cronjob a cada 8 horas para excluir sessões antigas.

Neste momento, o suporte técnico executa um script para excluir os arquivos da sessão. Ele está sendo executado para sempre, de modo que seu processo nunca termina.

Aprecie se alguém puder me ajudar aqui. Obrigado

    
por fahmi 09.07.2012 / 15:15

1 resposta

2

Bem, sim, você se meteu em uma confusão certa. O problema é que com muitos arquivos no diretório, pode levar literalmente semanas para deletar todos eles. Você não quer um cronjob (ainda) - eles provavelmente estão apenas empilhando uns sobre os outros e piorando o problema no presente. Você também quer ter cuidado sobre como exatamente você faz a exclusão - você não pode ter nada que tente glob ou enumerar todos os arquivos, porque isso vai demorar muito e ter muita memória antes de você realmente deletar. qualquer coisa; em vez disso, você quer um script que readdir e excluir como eles vêm (eu suspeito, embora eu não tenho certeza, que find -delete pode fazer isso, quando eu tive que excluir alguns milhões de arquivos eu usei um pouco de ruby script).

Uma vez que você tenha o problema de volta sob controle (em algumas semanas), então você pode executar um cronjob a cada hora para atacar qualquer coisa mais antiga que alguns dias / semanas. Meu palpite é que você tem anos valor de arquivos de sessão lá. Se eu soubesse como, na minha experiência, o PHP não é ruim em manter esse tipo de coisa sob controle.

    
por 09.07.2012 / 15:21