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
    
Is localhost resolving properly DNS-wise? ping localhost should come back instantaneously with 127.0.0.1. –  Alexis Lê-Quôc Sep 17 '09 at 17:25
    
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
    
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

7 Answers 7

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
6  
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
up vote 16 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

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
    
This solved my problem. Strange... I didn't notice that problem in SQLite –  Mladen Janjetović Sep 25 at 15:25

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

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

protected by Community Nov 13 at 15:40

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

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