为什么本地主机上的响应这么慢?

Pet*_*háč 69 php web-server latency apache-2.2

我正在为我的一个朋友开发一个小型 PHP 项目,并且我有一个用于本地开发的 WAMP 环境设置。我记得我的本地 Apache 2.2 立即响应的日子。唉,现在我从一个漫长的假期回来了,我发现他们的反应localhost非常缓慢。

得到一个 300B 的 HTML 页面大约需要 5 秒钟。

当我查看任务管理器时,httpd进程 (2) 使用了 0% 的 CPU,总体而言我的计算机没有负载(0-2% CPU 使用率)。

为什么延迟这么高?是否有任何 Apache 设置我可以调整以使其线程以更高的优先级运行?它似乎只是在提供响应之前睡觉。

ssh*_*how 65

对我来说,将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
Run Code Online (Sandbox Code Playgroud)

  • 这有效——希望我能投两次票 (12认同)
  • 这也为我解决了!从 10 秒延迟到 2 毫秒! (8认同)
  • @Elipticalview 正如文件中的评论所说;`如果您的主机没有注册的 DNS 名称,请在此处输入其 IP 地址。` (3认同)
  • 如果 localhost 正确解析,为什么会出现这个问题?响应之前的 10 秒发生了什么?等待某个地方超时? (2认同)

mic*_*lko 23

我有同样的问题。

在 hosts 文件中将 localhost 重定向设置为 127.0.0.1 没有帮助。优化 MySQL 服务器没有帮助(InnoDB -> MyISAM,在 my.ini 中更改了许多与缓存相关的指令)。

然后我使用 web webgrind 并将问题缩小到“new PDO(...)”调用。改变

mysql:host=localhost;dbname=dp-ui;charset=utf8 
Run Code Online (Sandbox Code Playgroud)

mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8
Run Code Online (Sandbox Code Playgroud)

在 dsn for PDO彻底解决了这个问题!页面加载时间从 3000 多毫秒到 16 毫秒

但是我真的很困惑为什么主机文件中的“127.0.0.1 localhost”行没有帮助。

  • 有人可以告诉我应该编辑哪个文件才能使其工作吗? (4认同)
  • 您应该编辑连接到数据库的行(在您的 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');` (2认同)
  • 对我来说也是一样,但仅适用于 WordPress。不得不在 wp-config.php 中用“127.0.0.1”替换“localhost” (2认同)

Pet*_*háč 21

问题出在 Apache 的主要设置文件中httpd.conf

我找到了这个:

可以通过三种方法设置 PHP 以在 Windows 上与 Apache 2.x 一起工作。您可以将 PHP 作为处理程序、作为 CGI 或在 FastCGI 下运行。 [来源]

所以我进入了 Apache 的设置,看看问题出在哪里:我将它设置为 CGI,而不是将它作为模块加载。这导致php-cgi.exe每次我提出请求时都会启动和关闭。这减缓了我的localhost发展。

我更改了设置以将 PHP 作为 Apache MODULE加载,现在一切正常。:)

为 Apache 2.x 加载 PHP 模块:

1) 插入以下几行 httpd.conf

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

AddHandler application/x-httpd-php .php

(ps 更改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"

谢谢大家的努力。

  • 我的 Apache 停止添加源中提到的行。我在 Windows 中怎么办? (2认同)

小智 7

检查是否/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 *******
Run Code Online (Sandbox Code Playgroud)

在这个地方****给出你的主机名。


小智 7

我遇到了同样的问题,最后发现它来自两个事实:

  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 解决了问题。