Pergunta sobre apache, php, session, fastcgi, debian – session_start parece ser muito lento (mas apenas algumas vezes)

25

Por alguma razão estranha, apenas hoje nosso servidor decidiu ficar muito lento durante o início das sessões. Para cada session_start, o servidor expira após 30 segundos ou demora cerca de 20 segundos para iniciar a sessão. Isso é muito estranho, já que não faz isso há muito tempo (a última vez que nosso servidor fez isso foi há cerca de 7 meses). Eu tentei alterar a sessão para executar um banco de dados, e isso funciona bem, no entanto, como o nosso site atual é construído, levaria dias para ir a cada página e alterar o carregamento de sessões para incluir uma nova sessão. manipulador. Portanto, minha pergunta permanece:

Por que é tão lento e por que só às vezes?

Nós rodamos em um servidor hetzner dedicado com 24 GB de memória RAM, e uma CPU rápida o suficiente para apenas executar um servidor web simples (um Xeon, eu acredito, mas não tenho certeza). Nós executamos o debian no servidor com uma configuração apache + fastcgi + php5.

O servidor não reporta muita carga, nem através do status do servidor, bem comotop comando.Vnstat relata nenhum problema com o nosso link de rede (mais uma vez, isso não resultaria em um tratamento lento de sessão local).IOtop relata nenhum problema com processos que ocupam todo o disco rígido. Escrevendo para a pasta tmp onde os arquivos da sessão estão localizados trabalha rápido se feito através do vim.

Novamente, para deixar isso claro, minha principal preocupação aqui não é se devemos ou não mudar para um DB ou uma versão em cache de memória das sessões, é simplesmente perguntar por que isso acontece, porque tudo que eu dou uma olhada parece estar funcionando bem, exceto pelo próprio PHP.

EDITAR: O arquivo máximo no nosso diretório PHP tmp é de 2,9 MB, então nada que deve fazer um impacto, eu acredito.

ATUALIZAR: Eu nunca descobri o que estava errado e / ou como consertá-lo, mas o problema desapareceu depois que passamos para as sessões do memcached / db.

Relacionadostackoverflow.com/q/13772074/168034 phunehehe
@ h2ooooooo:> (Note que esta questão tem 11 meses). SMH! happybuddha
@happybuddha Como eu atualizei no OP, acabamos mudando para as sessões armazenadas em cache em memória, depois que isso aconteceu novamente. Nenhuma alteração foi feita antecipadamente, e o problema aleatoriamente (pelo menos parece aleatório) desaparece novamente. (Note que esta questão tem 11 meses). h2ooooooo
Algo de errado com o disco ou o sistema de arquivos, talvez? Jon

Sua resposta

6   a resposta
0

Por favor, verifique se você tem as configurações corretas do memcache, por exemplo em/etc/php.d/memcached.ini

0

Eu sei que esta é uma pergunta antiga, mas acabei de corrigir esse problema no meu servidor. Tudo o que fiz foi ativar o cache de bypass para os domínios no gerenciador de cache no cpanel.

Minhas sessões estavam demorando para começar e fechar agora são instantâneas.

2

Eu me deparei com esse problema também. Foi respondido aqui:

Problema com a função session_start () (funciona lentamente)

As sessões são bloqueadas pelo PHP enquanto um script está em execução, portanto, se os scripts estiverem empilhados na mesma sessão, eles podem causar atrasos surpreendentemente longos.

Eu gostaria que isso simplesmente corrigisse, mas é estranho como aconteceu com CADA usuário no site (incluindo o acesso do nosso escritório em computadores diferentes), se é simplesmente um arquivo de sessão bloqueado. Talvez possa ser porque usamos arquivos de texto e, portanto, usamosmesmo arquivo, que foi bloqueado? h2ooooooo
15

Você tentousession_write_close(); ? Isso desativará a capacidade de gravação nas variáveis ​​de sessão, mas você ainda poderá ler os dados delas. E mais tarde, quando você precisar gravar uma variável de sessão, reabra-a.

Eu também sofri com esse problema, mas isso funcionou como um encanto. Isto é o que eu faço:

<code>session_start(); //starts the session
$_SESSION['user']="Me";
session_write_close();   // close write capability
echo $_SESSION['user']; // you can still access it
</code>
Obrigado. Eu pelo menos acho que funciona agora. Muito mais rápido e sem desaceleração completa ainda :) Marian Klühspies
5

Eu tive o mesmo problema: de repente, o servidor levou 30 segundos para executar uma solicitação. Eu notei que foi por causa desession_start (). A primeira solicitação foi rápida, mas cada solicitação seguinte levou alguns30 seg para ser executado. Descobri que o arquivo da sessão em c: \ wamp \ tmp foi bloqueado pela primeira solicitação por cerca de 30 segundos. Durante esse período, a segunda solicitação aguardava o desbloqueio do arquivo. Eu descobri que tinha algo a ver comrewrite_mod e.htaccess. Eu desabilitei o rewrite_mod e comentei todas as linhas do .htaccess e ele funciona novamente como um encanto. Eu não sei porque isso aconteceu porque eu não me lembro de alterar qualquer configuração ou conf no wamp.

Eu concordei totalmente com esta solução .. mas porque eu não sei. Shakeel Ahmed
0

Cada sessão é armazenada pelo apache como um arquivo de texto.

Quando o início da sessão é usado para retomar uma sessão existente (via identificador de cookie, por exemplo), talvez um arquivo de sessão grande (uma sessão com muito conteúdo dentro) possa ser lento para ser iniciado?

Se este for o caso, provavelmente você está aplicando muitos dados em sessões.

O maior arquivo na nossa pasta tmp é de 2,9MB, então nada quedevemos faça um impacto. h2ooooooo

Perguntas relacionadas