Com um servidor altamente carregado, eu usaria memcached
(talvez até redis
?) para armazenamento de sessão. Então, se eu estivesse em sua situação, eu provavelmente configuraria isso para o seu próprio bem e, em seguida, verificaria se o problema tinha simplesmente desaparecido.
Eu também não usaria a coleta de lixo da sessão do php, que suspende a coleta de lixo dos trabalhos de solicitação da web. Eu configurei meu próprio trabalho para lidar com isso, seja em execução no cron ou em algum sistema de enfileiramento de tarefas.
Você já tem algum tipo de sistema de limpeza de sessão fora da coleta de lixo da sessão do php?
A taxa na qual isso está ocorrendo é de 0,1% do tempo, o que estaria alinhado com a configuração session.gc_divisor
?
Os seus processos php estão sendo executados como o usuário nginx? É php, em vez de nginx, que faz a limpeza com base nas configurações de session.gc_*
. Se o php está rodando como nginx, isso é bom em termos de acesso aos arquivos da sessão php, mas provavelmente ruim em termos de compartilhamento de um id de usuário com o servidor nginx.
Você pode precisar da permissão de execução nesse diretório de sessão para que sua coleta de lixo possa ver o que está lá para limpar.
Também ficaria preocupado se você não estivesse definindo session.save_path
para algo específico para seu aplicativo. Isso significa que, se você tiver vários aplicativos compartilhando o mesmo diretório de sessão, quando a coleta de lixo for executada, o aplicativo com a expiração mais curta vencerá, limpando as sessões do outro aplicativo.