2010-07-25 32 views
8

Hola chicos estoy depurando mi aplicación aquí y, básicamente, en pocas palabras: la aplicación se está extinguiendo en mi servidor en línea o tal vez sea mi servidor desapareciendo. Pero revisé esta aplicación en tres servidores diferentes y todos exhibieron resultados similares, la aplicación se ejecutará por un tiempo, pero de repente, cuando abriera más y más solicitudes, obtendría un error de red o el sitio no funcionaría. carga.¿Cómo puedo saber cuánta memoria/recursos está gastando mi script php?

Sospecho que es mi código aquí, así que tengo que averiguar cómo puedo hacerlo con menos recursos intensivos de hecho, no sé por qué está haciendo esto en primer lugar. Sin embargo, funciona bien en mi máquina localhost.

¿O es porque lo estoy alojando en un host técnicamente compartido? ¿Debo buscar hosting especializado para alojar una aplicación? Aquí hay muchas consultas de bases de datos complejas y solicitudes ajax en mi aplicación.

Respuesta

10

En cuanto a comprobar la cantidad de memoria que utiliza su secuencia de comandos, puede llamar periódicamente al memory_get_usage(true) en los puntos de su código para identificar qué partes de la secuencia de comandos están utilizando la memoria. memory_get_peak_usage(true) obviamente devuelve la cantidad máxima de memoria que se utilizó.

Dice que su aplicación funciona bien por un tiempo. ¿Es este un script único que se está ejecutando todo este tiempo, o muchas solicitudes de página/visitantes diferentes? Normalmente hay un max_execution_time para cada script (a menudo por defecto a 30 segundos). Esto se puede cambiar en código por script llamando al set_time_limit().

También hay un memory_limit inherente como se establece en php.ini. Esto podría ser 64M o menos en un host compartido.

"... una vez estaría abriendo más y más solicitudes ..." - Hay un límite en el número de solicitudes simultáneas (ajax) que un cliente puede hacer con el servidor. Los navegadores se pueden configurar en 8 o incluso menos (esto se puede modificar en Firefox a través del about:config). Esto es para evitar que un solo cliente inunde el servidor con solicitudes. ¡Se podría configurar un servidor para prohibir a los clientes que abren demasiadas solicitudes!

Un host compartido podría ser restrictivo. Sin embargo, si el host no aloja demasiados sitios, entonces pueden ser servidores bastante potentes, lo que le da acceso a una gran cantidad de energía durante corto tiempo. Énfasis en corto tiempo - le conviene al host controlar las secuencias de comandos que consumen demasiados recursos en un servidor compartido ya que otros clientes se verían afectados.

¿Debo buscar hosting especializado para alojar una aplicación?

Tendrás que ser más específico. La mayoría de los sitios web en estos días son 'aplicaciones'. Si está haciendo algo más que simplemente servir páginas web y está constantemente ejecutando secuencias de comandos intensivas que se ejecutan durante un período de tiempo, entonces es posible que tenga que ir a hosting dedicado. ¡No solo para su beneficio, sino para el beneficio de otros en el servidor compartido!

+0

Gracias por la respuesta, la cosa es que estoy ejecutando una aplicación en la talla de 37 Signals Basecamp y Highrise. Lo tengo configurado actualmente en un servidor de grid en mediatemple. Pero mi aplicación parece desaparecer y obtengo errores de conexión de red al cargar durante el uso normal de la aplicación. No es solo servir páginas web es una aplicación completa en los gustos que mencioné. – Ali

+1

Por lo que parece, ¿ya tienes un host razonablemente poderoso? ¿Tiene muchos usuarios _hammering_ el servidor? Si puede probar esto con un solo usuario y sigue fallando, entonces habría dicho que esto era ciertamente un problema con su script, en lugar del servidor. – MrWhite

0

La respuesta es, probablemente, el hecho de que su empresa de alojamiento web tiene una configuración php.ini bastante restrictiva. Podrían, por ejemplo, limitar la cantidad de tiempo que se puede ejecutar un script, o limitar la cantidad de memoria que un script podría usar.

¿Qué intenta hacer tu código?

Puede considerar hacer uso de memory_get_usage y/o memory_get_peak_usage.

Cuestiones relacionadas