2012-04-30 31 views
25

Por alguna extraña razón, hoy nuestro servidor decidió ser muy lento durante el inicio de las sesiones. Para cada session_start, el servidor agota el tiempo de espera después de 30 segundos o le llevará unos 20 segundos iniciar la sesión. Esto es muy extraño, ya que no lo ha hecho por mucho tiempo (la última vez que nuestro servidor hizo esto fue hace unos 7 meses). Intenté cambiar la sesión para que se ejecutara en una base de datos, pero funciona bien, sin embargo, a medida que se construye nuestro sitio web actual, tomaría días para ir a cada página y cambiar la carga de sesiones para incluir una nueva sesión entrenador de animales. Por lo tanto, mi pregunta sigue siendo:session_start parece ser muy lento (pero solo algunas veces)

¿Por qué es tan lento, y por qué solo algunas veces?

Funcionamos en un servidor dedicado de Hetzner con 24 GB de RAM y una CPU lo suficientemente rápida como para ejecutar un simple servidor web (un Xeon, creo, pero no estoy seguro). Ejecutamos Debian en el servidor con una configuración apache + fastcgi + php5.

El servidor no informa mucha carga, ni a través del estado del servidor ni del comando top. Vnstat informa que no hay ningún problema con nuestro enlace de red (una vez más, eso no resultaría en un lento manejo de la sesión local). IOtop informa que no hay problema con los procesos que toman todo el disco duro. Escribir en la carpeta tmp donde se encuentran los archivos de sesión funciona rápidamente si se hace a través de vim.

De nuevo, para dejar esto en claro, mi principal preocupación aquí no es si debemos cambiar a una base de datos o una versión de las sesiones almacenada en la memoria caché, es simplemente para preguntar por qué sucede esto, porque todo lo que tomo mira parece estar funcionando bien, a excepción del PHP en sí.

EDIT: El archivo máximo en nuestro directorio PHP tmp es de 2,9 MB, por lo que nada que tenga un impacto, creo.

ACTUALIZACIÓN: Nunca me di cuenta de lo que estaba mal y/o cómo solucionarlo, pero el problema desapareció después de que cambiamos a las sesiones de memcached/db.

+2

Eche un vistazo a su directorio 'tmp'. PHP almacena sus sesiones allí. Ve si algo anda mal. – freshnode

+1

¿Algo malo con el disco o el sistema de archivos, tal vez? – Jon

+10

"tomaría días ir en cada página y cambiar la carga de sesiones para incluir un nuevo controlador de sesión" Si ese es el caso, seriamente debería considerar corregir ese hecho primero – PeeHaa

Respuesta

14

¿Has probado session_write_close();? Esto deshabilitará la capacidad de escritura en las variables de sesión, pero aún puede leer datos de ellos. Y luego, cuando necesite escribir una variable de sesión, vuelva a abrirla.

También he sufrido este problema pero esto funcionó como un encanto.Esto es lo que hago:

session_start(); //starts the session 
$_SESSION['user']="Me"; 
session_write_close(); // close write capability 
echo $_SESSION['user']; // you can still access it 
+0

Gracias. Al menos creo que funciona ahora. Mucho más rápido y sin una desaceleración completa aún :) –

0

Cada sesión es almacenada por apache como un archivo de texto.

Cuando se usa el inicio de sesión para reanudar una sesión existente (a través del identificador de cookie por ejemplo) tal vez un archivo de sesión grande (una sesión con mucho contenido adentro) puede tardar en iniciarse?

Si este es el caso, probablemente su aplicación está poniendo mucha información en las sesiones.

+0

El archivo más grande en nuestra carpeta tmp es 2.9MB, por lo que nada debería tener un impacto. – h2ooooooo

1

También encontré este problema. Fue respondida aquí:

Problem with function session_start() (works slowly)

Sesiones están bloqueados por PHP mientras que un script se ejecuta, por lo que si los scripts se apilan bajo la misma sesión, que puede causar estos sorprendentemente largas demoras.

+0

Ojalá esto simplemente lo haya solucionado, pero es extraño cómo sucedió con CADA usuario en el sitio (incluido el acceso desde nuestra oficina en diferentes computadoras), si se trata simplemente de un archivo de sesión bloqueado. Tal vez podría ser porque utilizamos archivos de texto, y por lo tanto, usamos el ** mismo ** archivo, que estaba bloqueado? – h2ooooooo

4

Tuve el mismo problema: de repente, el servidor tardó 30 segundos en ejecutar una solicitud. Noté que fue por session_start(). La primera solicitud fue rápida, pero cada solicitud siguiente tomó algunos 30 segundos para ser ejecutados. Encontré que el archivo de sesión en c: \ wamp \ tmp fue bloqueado por la primera solicitud durante aproximadamente 30 segundos. Durante este tiempo, la segunda solicitud estaba esperando a que se desbloqueara el archivo. Descubrí que tenía algo que ver con rewrite_mod y .htaccess. Inhabilité rewrite_mod y comenté cada línea en .htaccess y funciona de nuevo como un amuleto. No sé por qué sucedió esto porque no recuerdo cambiar ninguna configuración o confirmar Wamp.

+0

Estoy totalmente de acuerdo con esta solución ... pero por qué no lo sé. –

0

Compruebe si la configuración de Memcache es correcta, p. en /etc/php.d/memcached.ini