Вопрос: Почему ответ на localhost так медленно?


Я работаю над небольшим проектом PHP для моего друга, и у меня есть настройка среды WAMP для локальной разработки. Я помню дни, когда ответ от моего местного Apache 2.2 был незамедлительным. Увы, теперь, когда я вернулся из долгого долгого отпуска, я нахожу ответы от localhost болезненно медленно.

Для получения 300-страничной HTML-страницы требуется около 5 секунд.

Когда я смотрю на диспетчера задач, httpd процессы (2) используют до 0% от ЦП и в целом мой компьютер не находится под нагрузкой (0-2% использования ЦП).

Почему так латентно? Есть ли какой-либо параметр Apache, который я мог бы настроить, возможно, чтобы его поток работал с более высоким приоритетом или чем-то еще? Кажется, что он просто спит, прежде чем он отдает ответ.


51
2017-09-17 17:15


Источник


Является localhost правильное решение DNS? ping localhost должен вернуться мгновенно с 127.0.0.1, - Alexis Lê-Quôc
это отлично работает, ответ получен в <1 мс - Peter Perháč
Я думал, что firefox может быть проблемой, но занимает 5 секунд даже в IE, поэтому должны быть либо системные настройки, либо настройки Apache, либо гремлины. - Peter Perháč
Имеет ли он такое же поведение при запросе статического содержимого (т. Е. При загрузке http://localhost/index.html)? Если нет, это может быть проблема с PHP, а не проблема с Apache. - Marcus Spiegel
Многие многочисленные ответы на этот вопрос показывают, что существуют десятки, если не сотни различных запросов по страницам страниц могут быть медленными. Если вы пришли к этому вопросу, потому что у вас слишком медленные запросы на страницы, вам нужно будет углубиться в причину медлительности, прежде чем вы сможете получить полезный ответ здесь. strace а также tcpdump являются полезными инструментами для этого. - Ladadadada


Ответы:


Для меня установка ServerName собственности в httpd.conf зафиксировали задержки (в худшем - до 10 секунд):

# 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

55
2018-01-13 11:55



Это работает - хотелось бы, чтобы я мог удвоить - hohner
Это исправляет это и для меня! Прошло от 10 секунд до 2 мс! - DouglasHeriot
Я боролся часами, и это было решением. - williamcarswell
почему это проблема, если локальный хост разрешается правильно? что происходит за эти 10 секунд до того, как он откликнется? ждать где-то тайм-аут? - milan
@Elipticalview Как говорится в комментарии в файле; If your host doesn't have a registered DNS name, enter its IP address here. - sshow


Проблема заключалась в главном файле настроек Apache httpd.conf,

Я нашел это:

Существует три способа настроить PHP для работы с Apache 2.x в Windows. Вы можете запускать PHP как обработчик, как CGI, или в FastCGI.  [Источник]

И поэтому я вошел в настройки Apache и увидел, где проблема: я настроил его как CGI вместо того, чтобы загружать его в качестве модуля. Это вызвало php-cgi.exe запускать и закрывать каждый раз, когда я делал запрос. Это замедляло мои localhost развитие вниз.

Я изменил настройки, чтобы загрузить PHP как Apache МОДУЛЬ и теперь все работает отлично. :)

Чтобы загрузить модуль PHP для Apache 2.x:

1) вставьте следующие строки в httpd.conf 

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

AddHandler application/x-httpd-php .php

(изменение p.s. C:/php на ваш путь. Кроме того, измените php5apache **. Dll на существующее имя файла)

2) Чтобы ограничить выполнение PHP только для .php-файлов, добавьте это в httpd.conf:

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

3) задать путь php.ini в httpd.conf (если после перезагрузки вы получите ошибку, затем снова удалите эту строку)

PHPIniDir "C:/php"

Спасибо всем за ваши усилия.


20
2017-10-10 22:56



Мой Apache останавливается при добавлении строк, как указано в источнике. Как мне сделать в Windows? - AgA
эта ссылка истекла. Использовать это: goo.gl/2EVth9 - T.Todua


У меня была такая же проблема.

Настройка localhost redirect на 127.0.0.1 в файле hosts не помогла. Оптимизация сервера MySQL не помогла (InnoDB -> MyISAM, изменив многие директивы, связанные с кешем, в my.ini).

Затем я использовал web webgrind и сузил проблему до «нового вызова PDO (...)». изменения

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

в

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

в dsn для PDO полностью решена проблема! Время загрузки страницы перешло от более 3000 мс до 16 мс,

Однако я действительно запутался, почему строка «127.0.0.1 localhost» в файле hosts не помогла.


18
2017-11-01 11:51



Может кто-нибудь сказать мне, какой файл я должен отредактировать, чтобы заставить его работать? - Giri
Вы должны отредактировать строку, в которой вы подключаетесь к базе данных (в вашем PHP-скрипте). Например. измените строку: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8'); в $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8'); - michalko
Недавно я работал над EXT-JS-приложением, и у меня возникли огромные проблемы с запросами данных MYSQL, которые слишком долго реагируют. MYSQL был в основном слишком медленным. Слава богу, получил ответ здесь ..... просто изменил мой хост в скрипте подключения с: host = localhost; на host = 127.0.0.1. Ответы моего сервера от 3 минут (180 секунд) до уровня менее 1 сек. Большое спасибо. - user184985
Это решило мою проблему. Странно ... Я не заметил эту проблему в SQLite - Mladen Janjetovic
То же самое для меня, но только для WordPress. Пришлось заменить «localhost» на «127.0.0.1» в wp-config.php - Adrian


У меня была та же проблема и, наконец, выяснилось, что она исходит из двух фактов:

  1. Я использую Mac OS X Mavericks
  2. Я получил доступ к моему проекту через URL-адрес http://myproject.local/ потому что я положил строку 127.0.0.1 myproject.local в /etc/hosts

Проблема возникает из-за того, что .local tld зарезервирован для обслуживания Bonjour, и это с Mac OS X Lion (10.7).

Изменение tld для чего-то еще устранило проблему.


5
2018-06-24 13:26





В вашей httpd.conf не забудьте установить настройку HostnameLookups Off,


4
2017-09-17 18:16



У меня нет файла apache.conf, также я искал директиву HostnameLookups во всех файлах, и я нашел его в файле core.html.en. Он сказал, что он выключен по умолчанию, поэтому я думаю, что он выключен - Peter Perháč


Проверить, если /etc/hostsверно. Как это:

# 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 *******

В месте **** укажите свое имя хоста.


4
2018-01-10 09:24



Это было для меня. Мой домен был установлен в строке ipv4, но не в ipv6. - Rafael Beckel
Мне то же. Запросы заняли> 5 секунд, прежде чем я добавлю дополнительную строку в / etc / hosts. Теперь мой материал работает через ~ 0,1 сек. - mwallisch


В случае, если это помогает кому-либо, у меня была эта проблема, и она сводилась к тому, чтобы быть неправильный поиск DNS,

DNS-сервер на сервере был настроен на 127.0.0.1 - Я изменил его, чтобы использовать общедоступные DNS-серверы Google, и это сделало его целую кучу быстрее.


3
2018-02-20 23:35





Вопрос имеет тег apache-2.2, но если кто-то затронут этой гнусной проблемой также WAMP с Apache 2.4 + PHP 5.5, следующий ответ на SO сделал трюк для меня:

редактировать httpd.conf и отключить загрузку модуля CGI    комментирование эта строка: LoadModule cgi_module modules/mod_cgi.so

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


1
2017-11-21 13:32