我正在为我的一个朋友开发一个小的PHP项目,并且为本地开发设置了WAMP环境。我记得当地的Apache 2.2做出即时响应的日子。 las,既然我从一个漫长的假期中回来,我发现localhost的响应非常缓慢。

大约需要5秒钟才能显示300B HTML页面。

当我查看任务管理器时,httpd进程(2)占用了0%的CPU,并且整个计算机没有负载(0-2%的CPU使用率)。

为什么延迟这么高?我是否可以调整任何Apache设置以使其线程以更高的优先级运行?好像是在睡觉之前就没有反应了。

评论

本地主机在DNS方面解析正确吗? ping localhost应该立即返回127.0.0.1。

效果很好,在1ms内收到响应

我以为firefox可能是问题所在,但即使在IE中也需要5s,因此必须是某些系统设置或Apache设置或gremlins。

请求静态内容(即加载http://localhost/index.html时)是否具有相同的行为?如果不是,则可能是PHP问题,而不是Apache问题。

这个问题的众多答案表明,有数十种(如果不是数百种)不同的原因导致页面请求很慢。如果您由于页面请求速度太慢而遇到了这个问题,则需要在此之前找到更慢的原因,然后才能找到有用的答案。 strace和tcpdump是对此有用的工具。

#1 楼

对我而言,在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
 


评论


这有效-希望我能投票两次

– hohner
2012年5月19日20:46

这也为我解决了!从10s延迟变为2ms!

–道格拉斯·赫里奥特(DouglasHeriot)
2012年7月2日,下午5:32

我奋斗了几个小时,这就是解决方案。

–williamcarswell
2013年12月10日上午8:51

如果localhost能够正确解析,为什么会出现问题?在响应之前的10秒中发生了什么?等待某处超时?

–米兰
2014年2月7日,12:41

@Elipticalview正如文件中的注释所示;如果您的主机没有注册的DNS名称,请在此处输入其IP地址。

–sshow
2014年10月10日在8:13

#2 楼

我遇到了同样的问题。

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

然后我使用了web webgrind并将问题缩小为“新的PDO(...) ”电话。
更改dsn for PDO中的
mysql:host=localhost;dbname=dp-ui;charset=utf8 



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


完全解决了该问题!页面加载时间从3000毫秒增加到16毫秒。

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

评论


有人可以告诉我应该编辑哪个文件才能使其正常工作吗?

– Giri
2013年6月29日20:20在

您应该编辑连接数据库的行(在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
2013年7月25日14:00



我最近正在开发EXT-JS应用程序,但MYSQL数据查询存在一个巨大的问题,即响应时间太长。 MYSQL基本上太慢了。谢天谢地,在这里得到了答案.....刚在连接脚本中将我的主机从以下位置更改:host = localhost;到主机= 127.0.0.1我的服务器响应从3分钟(180秒)减少到不到1秒。非常感谢。

–user184985
13年8月9日,下午5:11

这解决了我的问题。奇怪...我没有在SQLite中注意到这个问题

–Mladen Janjetovic
2014-09-25 15:25

对我来说也一样,但仅适用于WordPress。必须在wp-config.php中将“ localhost”替换为“ 127.0.0.1”

–阿德里安
15年4月23日在7:12

#3 楼

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

我发现了这个问题:


有三种方法可以设置PHP以与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)在httpd.conf中设置php.ini的路径(如果重新启动后出现错误,则删除此行再次)

PHPIniDir "C:/php"


谢谢大家的努力。

评论


我的Apache停止添加源代码中提到的行。在Windows中该怎么办?

– AgA
13年4月2日在13:02

该链接已过期。使用此:goo.gl/2EVth9

–T.Todua
16年8月30日在9:06

如何在Mac上复制某些内容?

– Kamel Labiad
20 May 29 '13:28

#4 楼

检查/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 *******


****的地方输入您的主机名。

评论


对我来说就是这样。我的域设置在ipv4行中,但没有设置在ipv6中。

–拉斐尔·贝克尔(Rafael Beckel)
2015年9月10日,0:10

我也是。在我将额外的行放入/ etc / hosts之前,请求花费了> 5秒的时间。现在我的资料可以在大约0.1秒内运行。

–mwallisch
2015年10月17日在12:33

让我朝正确的方向前进。添加了127.0.0.1 something.atmy.localhost,现在请求不再需要20秒了。而是本地apache立即响应。对网络了解不多。我猜域名解析太慢了,因为配置不正确。

– Robsch
18年11月13日在7:44



#5 楼

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


我使用Mac OS X Mavericks
我通过URL http://myproject.local/访问了我的项目,因为我将127.0.0.1 myproject.local中的/etc/hosts


出现此问题是因为.local tld是为Bonjour服务保留的,而这是因为Mac OS X Lion(10.7)。

tld可以解决其他问题。

评论


我使用.test但还是一样的问题

– Kamel Labiad
20-05-29在13:30

@KamelLabiad,您不应使用它,它是真正的顶级域名(TLD):fr.wikipedia.org/wiki/.test

–lepix
20-05-29在23:51

#6 楼

请确保在您的httpd.conf中设置设置HostnameLookups Off

评论


我似乎没有apache.conf文件,我也在所有文件中搜索了HostnameLookups指令,并在core.html.en手册文件中找到了它。它说它默认是关闭的,所以我想它是关闭的

– PeterPerháč
09年9月17日在18:28

#7 楼

万一它对任何人都有帮助,我会遇到这个问题,并且归结为不正确的DNS查找。

服务器上的DNS服务器设置为127.0.0.1-我将其更改为使用Google Public DNS服务器,这使整个堆变得更快。

#8 楼

这个问题的标签是apache-2.2,但是如果有人在Apache 2.4 + PHP 5.5的WAMP上也受到此恶性问题的影响,那么以下关于SO的答案对我有用:


编辑httpd.conf并通过注释以下行来禁用CGI模块的加载:LoadModule cgi_module modules/mod_cgi.so


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