Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am working on a tiny little PHP project for a friend of mine, and I have a WAMP environment setup for local development. I remember the days when the response from my local Apache 2.2 was immediate. Alas, now that I got back from a long, long holiday, I find the responses from localhost painfully slow.

It takes around 5 seconds to get a 300B HTML page served out.

When I look at the task manager, the httpd processes (2) are using up 0% of the CPU and overall my computer is not under load (0-2% CPU usage).

Why is the latency so high? Is there any Apache setting that I could tweak to perhaps make its thread run with a higher priority or something? It seems like it's simply sleeping before it's serving out the response.

share|improve this question
    
Does it have the same behaviour when requesting static content (i.e. when loading http://localhost/index.html)? If not, it might be a PHP issue, not an Apache issue. –  Marcus Spiegel Sep 17 '09 at 17:52
4  
What the many, varied answers to this question show is that there are dozens, if not hundreds of different reasons page requests can be slow. If you have arrived at this question because you too have slow page requests, you will need to dig deeper into the cause of the slowness before you can get a useful answer here. strace and tcpdump are useful tools for this. –  Ladadadada Nov 1 '12 at 12:20
    
@all, I have a question for everybody that posted solutions that involve adding or replacing text with 127.0.0.1: does it still work if you access 127.0.0.2, 127.1.2.3, and so on or does hard-coding 127.0.0.1 create an unnecessary restriction? –  Synetech Nov 19 '13 at 21:26

13 Answers 13

I had the same problem and finally discover that it was coming from two facts :

  1. I use Mac OS X Mavericks
  2. I accessed my project via the URL http://myproject.local/ because I put a line 127.0.0.1 myproject.local in /etc/hosts

The problem appears because the .local tld is reserved for Bonjour service, and this since Mac OS X Lion (10.7).

Changing the tld for something else fixed the problem.

share|improve this answer

I don't know if this could help, bu when I added DNS configuration for the NIC on the server, WAMP become so slow on localhost (loads page in ~= 30 sec !). When I removed the DNS config, it becomes fast. Try leaving DNS blank.

share|improve this answer

The solution that worked for me was to edit httpd.conf and comment this line:

LoadModule cgi_module modules/mod_cgi.so

Commenting would be just adding a # in front, like this:

#LoadModule cgi_module modules/mod_cgi.so

Restart the Apache service and you should be good to go.

share|improve this answer

Check if /etc/hosts is correct. Like this:

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

In the place **** give your hostname.

share|improve this answer

I had the very same problem.

Setting localhost redirect to 127.0.0.1 in hosts file did not help. Optimizing MySQL server did not help (InnoDB -> MyISAM, changing many cache related directives in my.ini).

Then I used web webgrind and narrowed down the problem to "new PDO(...)" call. Changing

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

to

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

in dsn for PDO completely solved the problem! Page loading time went from over 3000 ms to 16ms.

However I am really confused why the "127.0.0.1 localhost" line in hosts file did not help.

share|improve this answer
    
thank you man, you solved my months-lasting problem! +1 –  GRoNGoR Dec 8 '12 at 11:06
1  
Can somebody tell me which file I should edit to make it work? –  Giri Jun 29 '13 at 20:20
    
You should edit the line where you are connecting to database (in your PHP script). E.g. change the line: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8'); to $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8'); –  michalko Jul 25 '13 at 14:00
    
I was working on an EXT-JS application recently and has a huge problems of MYSQL data queries taking too long to respond. MYSQL was basically too slow. Thank goodness, Got the answer here..... just changed my host in the connection script from: host = localhost; to host = 127.0.0.1 My server responses went from 3min(180secs) to less thant 1 sec. Thanks alot. –  user184985 Aug 9 '13 at 5:11
up vote 14 down vote accepted

The issue was with Apache's main settings file httpd.conf.

I found this:

There are three ways to set up PHP to work with Apache 2.x on Windows. You can run PHP as a handler, as a CGI, or under FastCGI. [Source]

And so I went into the Apache's settings and saw where the problem was: I had it set up as CGI, instead of loading it as a module. This caused php-cgi.exe to start up and shut down every time I made a request. This was slowing my localhost development down.

I changed the settings to load PHP as an Apache MODULE and now it all works perfectly. :)

Thank you all for your efforts.

share|improve this answer
    
Thank you for this explanation. It was very annoying. –  Mert Nuhoglu Jun 29 '10 at 15:01
    
My Apache stops on adding the lines as mentioned in the Source. How do I do in Windows? –  AgA Apr 2 '13 at 13:02

For me, setting the ServerName property in httpd.conf fixed the delays (they were up to 10 seconds at worst):

# 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
share|improve this answer
5  
This works -- wish I could upvote twice –  hohner May 19 '12 at 20:46
3  
This fixes it for me too! Gone from 10s latency to 2ms! –  DouglasHeriot Jul 2 '12 at 5:32
    
I struggled for hours and this was the solution. –  williamcarswell Dec 10 '13 at 8:51
    
why is this a problem if localhost resolves properly? what's going on those 10sec before it responds? waiting to time-out somewhere? –  milan Feb 7 at 12:41
    
Also, why are you using an IP for ServerName? In the docs it talks about "Syntax: ServerName [scheme://]fully-qualified-domain-name[:port]", e.g. ServerName secure.localhost:80, or is it ServerName secure.localhost.:80 (with a right most dot to make it a FQDN? (See: httpd.apache.org/docs/current/mod/core.html#servername ) –  Eliptical view Mar 9 at 8:06

Is there a chance you are trying to reach the server from a local LAN box using http://hostname.localdomain/project/test.php?

If so, which name servers do you have set on the box running Apache?
Local name servers or the ones provided by the ISP?

If you have two name servers at the box and the first one is down, Windows does not switch all the following requests to the second name server, it will always try to connect to the first name server, wait until it times out and then probe the second NS.

Make sure that every name server you have specified is up and running.

If not, are you using http://localhost/project/test.php or http://127.0.0.1/project/test.php?

Do you have HostnameLookups On set as a configuration directive?

share|improve this answer
1  
I tried both localhost and 127.0.0.1 but no difference. I am going to check out the HostnameLookups directive –  Peter Perháč Sep 17 '09 at 18:19

I had the same problem, and this article fixed it:

Cubic: Fixing slow Apache on localhost under Windows 7.

share|improve this answer
4  
Linking to the article is good, but you should also summarize it into a meaningful answer. –  Scott Pack Mar 15 '11 at 13:30

If you are using any type of CMS, make sure that you disable reverse DNS querying in the database.

share|improve this answer

Is localhost resolving properly DNS-wise?

ping localhost should come back instantaneously with 127.0.0.1.

share|improve this answer
    
that works fine, response received in <1ms –  Peter Perháč Sep 17 '09 at 17:36
    
i thought firefox could be the problem, but takes 5s even in IE, so must be either some system setting or Apache setting or gremlins. –  Peter Perháč Sep 17 '09 at 17:38
    
Can you check your apache logs? Do you see the source address of the requestor, is it 127.0.0.1 or the IP of the machine? If the latter, apache might be a reverse DNS lookup before responding. Worth checking httpd.conf for that. –  Alexis Lê-Quôc Sep 17 '09 at 18:00
    
i found the following in the access log: 127.0.0.1 - - [17/Sep/2009:20:17:16 +0200] "GET /index.html HTTP/1.1" 200 132, so i guess everything is okay and the requestor is 127.0.0.1 –  Peter Perháč Sep 17 '09 at 18:27

In your httpd.conf be sure to set the setting HostnameLookups Off.

share|improve this answer
3  
i don't seem to have an apache.conf file, also I searched for HostnameLookups directive in all of the files and I found it in the core.html.en manual file. It said it's Off by default, so I guess it's off –  Peter Perháč Sep 17 '09 at 18:28

In case it helps anyone, I had this problem and it boiled down to being incorrect DNS lookup.

The DNS Server on the server was set to 127.0.0.1 - I changed it to use the Google Public DNS servers, and that made it a whole heap faster.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.