¿Por qué la respuesta en localhost es tan lenta?

59

Estoy trabajando en un pequeño y pequeño proyecto PHP para un amigo mío, y tengo una configuración de entorno WAMP para el desarrollo local. Recuerdo los días en que la respuesta de mi Apache 2.2 local fue inmediata. Por desgracia, ahora que regresé de unas largas vacaciones, encuentro las respuestas localhostdolorosamente lentas.

Se tarda unos 5 segundos en obtener una página HTML de 300B.

Cuando miro el administrador de tareas, los httpdprocesos (2) están utilizando hasta el 0% de la CPU y, en general, mi computadora no está bajo carga (0-2% de uso de la CPU).

¿Por qué la latencia es tan alta? ¿Hay alguna configuración de Apache que pueda modificar para que su hilo se ejecute con una prioridad más alta o algo así? Parece que simplemente está durmiendo antes de dar respuesta.

Peter Perháč
fuente
1
¿Se está localhostresolviendo correctamente en cuanto a DNS? ping localhostdebería volver instantáneamente con 127.0.0.1.
Alexis Lê-Quôc
eso funciona bien, respuesta recibida en <1 ms
Peter Perháč
Pensé que Firefox podría ser el problema, pero tarda 5 segundos incluso en IE, por lo que debe ser alguna configuración del sistema o configuración de Apache o gremlins.
Peter Perháč
2
¿Tiene el mismo comportamiento al solicitar contenido estático (es decir, al cargar http://localhost/index.html)? Si no, podría ser un problema de PHP, no un problema de Apache.
Marcus Spiegel
55
Lo que muestran las muchas y variadas respuestas a esta pregunta es que hay docenas, si no cientos de razones diferentes por las que las solicitudes de páginas pueden ser lentas. Si ha llegado a esta pregunta porque también tiene solicitudes de página lentas, necesitará profundizar en la causa de la lentitud antes de poder obtener una respuesta útil aquí. stracey tcpdumpson herramientas útiles para esto.
Ladadadada el

Respuestas:

59

Para mí, la configuración de la ServerNamepropiedad httpd.confsolucionó los retrasos (en el peor de los casos fueron de hasta 10 segundos):

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName 127.0.0.1:80
sshow
fuente
12
Esto funciona - ojalá pudiera votar dos veces
hohner
8
¡Esto también me lo arregla! ¡Pasó de latencia de 10 segundos a 2 ms!
DouglasHeriot
Luché durante horas y esta fue la solución.
williamcarswell
1
¿Por qué es esto un problema si localhost se resuelve correctamente? ¿Qué está pasando esos 10 segundos antes de que responda? esperando a tiempo de espera en alguna parte?
Milán
3
@Elipticalview Como dice el comentario en el archivo; If your host doesn't have a registered DNS name, enter its IP address here.
mostrar el
21

Tuve el mismo problema.

La configuración de la redirección localhost a 127.0.0.1 en el archivo de hosts no ayudó. La optimización del servidor MySQL no ayudó (InnoDB -> MyISAM, cambiando muchas directivas relacionadas con caché en my.ini).

Luego usé web webgrind y reduje el problema a "nueva llamada PDO (...)". Cambiando

mysql:host=localhost;dbname=dp-ui;charset=utf8 

a

mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8

en dsn para PDO resolvió completamente el problema ! El tiempo de carga de la página pasó de más de 3000 ms a 16 ms .

Sin embargo, estoy realmente confundido por qué la línea "127.0.0.1 localhost" en el archivo hosts no ayudó.

michalko
fuente
3
¿Alguien puede decirme qué archivo debo editar para que funcione?
Giri
1
Debe editar la línea donde se está conectando a la base de datos (en su script PHP). Por ejemplo, cambiar la línea: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');a $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
michalko
Estaba trabajando en una aplicación EXT-JS recientemente y tengo grandes problemas de consultas de datos MYSQL que tardan demasiado en responder. MYSQL fue básicamente demasiado lento. Gracias a Dios, obtuve la respuesta aquí ... acabo de cambiar mi host en el script de conexión de: host = localhost; a host = 127.0.0.1 Las respuestas de mi servidor pasaron de 3 minutos (180 segundos) a menos de 1 segundo. Muchas gracias.
user184985
Esto resolvió mi problema. Extraño ... No noté ese problema en SQLite
Mladen Janjetovic
2
Lo mismo para mí, pero solo para WordPress. Tuve que reemplazar "localhost" con "127.0.0.1" en wp-config.php
Adrian
20

El problema fue con el archivo de configuración principal de Apache httpd.conf.

Encontré esto:

Hay tres formas de configurar PHP para que funcione con Apache 2.x en Windows. Puede ejecutar PHP como controlador, como CGI o bajo FastCGI. [Fuente]

Entonces, entré en la configuración de Apache y vi dónde estaba el problema: lo tenía configurado como CGI, en lugar de cargarlo como un módulo. Esto hizo php-cgi.exeque se iniciara y se apagara cada vez que hacía una solicitud. Esto estaba ralentizando mi localhostdesarrollo.

Cambié la configuración para cargar PHP como un MÓDULO Apache y ahora todo funciona perfectamente. :)

Para cargar el módulo PHP para Apache 2.x:

1) inserte las siguientes líneas en httpd.conf

LoadModule php5_module "c:/php/php5apache2.dll"

AddHandler application/x-httpd-php .php

(ps cambie C:/phpa su ruta. Además, cambie php5apache **. dll a su nombre de archivo existente)

2) Para limitar la ejecución de PHP solo para archivos .php, agregue esto en httpd.conf:

<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>

3) configure la ruta de php.ini en httpd.conf(si después del reinicio obtiene un error, luego elimine esta línea nuevamente)

PHPIniDir "C:/php"

Gracias por todos tus esfuerzos.

Peter Perháč
fuente
2
Mi Apache se detiene al agregar las líneas como se menciona en la Fuente. ¿Cómo lo hago en Windows?
AgA
ese enlace expiró. Use esto: goo.gl/2EVth9
T.Todua
7

Tuve el mismo problema y finalmente descubrí que provenía de dos hechos:

  1. Yo uso Mac OS X Mavericks
  2. Accedí a mi proyecto a través de la URL http://myproject.local/porque puse una línea 127.0.0.1 myproject.localen/etc/hosts

El problema aparece porque el .localtld está reservado para el servicio Bonjour, y esto desde Mac OS X Lion (10.7).

Cambiar el tld por algo más solucionó el problema.

lepix
fuente
6

Verifique si /etc/hostses correcto. Me gusta esto:

# hostname mobrglnx1 added to /etc/hosts by anaconda

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 *****

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 *******

En el lugar ****da tu nombre de host.

Morfeo
fuente
Fue el caso para mí. Mi dominio se configuró en la línea ipv4, pero no en ipv6.
Rafael Beckel
Lo mismo para mi. Las solicitudes tardaron> 5 segundos antes de poner la línea adicional en / etc / hosts. Ahora mis cosas se ejecutan en ~ 0.1 seg.
mwallisch
Ponme en la dirección correcta. Agregado 127.0.0.1 something.atmy.localhosty ahora la solicitud ya no toma 20 segundos. En cambio, el apache local responde de inmediato. No sé mucho sobre redes. Supongo que el nombre de dominio se resuelve demasiado lentamente, porque algo no está configurado correctamente.
Robsch
4

En su httpd.confasegúrese de establecer la configuración HostnameLookups Off.

drAlberT
fuente
66
no parece tener un archivo apache.conf, también busqué la directiva HostnameLookups en todos los archivos y la encontré en el archivo del manual core.html.en. Dijo que está desactivado por defecto, así que supongo que está desactivado
Peter Perháč
3

En caso de que ayude a alguien, tuve este problema y se redujo a una búsqueda de DNS incorrecta .

El servidor DNS en el servidor se configuró en 127.0.0.1: lo cambié para usar los servidores DNS públicos de Google, y eso lo hizo mucho más rápido.

Toby Allen
fuente
2

La pregunta tiene una etiqueta apache-2.2, pero si alguien se ve afectado por este nefasto problema también en WAMP con Apache 2.4 + PHP 5.5 , la siguiente respuesta en SO me sirvió:

edite httpd.confy desactive la carga del módulo CGI comentando esta línea:LoadModule cgi_module modules/mod_cgi.so

https://stackoverflow.com/a/18786773/260080

Marco Demaio
fuente