Localhost'taki cevap neden bu kadar yavaş?


59

Bir arkadaşım için küçük bir PHP projesi üzerinde çalışıyorum ve yerel kalkınma için bir WAMP ortamı kurdum. Yerel Apache 2.2'den gelen yanıtın hemen yanıtlandığı günleri hatırlıyorum. Ne yazık ki, şimdi uzun, uzun bir tatilden döndüğüm için cevapları localhostacı verici bir şekilde yavaş buluyorum .

Bir 300B HTML sayfasının yayınlanması yaklaşık 5 saniye sürer.

Görev yöneticisine baktığımda, httpdişlemler (2) CPU'nun% 0'ını kullanıyor ve genel olarak bilgisayarım yük altında değil (% 0-2 CPU kullanımı).

Gecikme neden bu kadar yüksek? İş parçacığını daha yüksek bir öncelikle çalıştırmasını sağlamak için ayarlayabileceğim herhangi bir Apache ayarı var mı? Cevap vermeden önce uyuyor gibi görünüyor.


1
Is localhostçözme düzgün DNS akıllıca? ile anındaping localhost geri gelmeli . 127.0.0.1
Alexis Lê-Quôc

Bu iyi çalışıyor, <1 ms içinde yanıt aldı
Peter Perháč

Firefox'un sorun olabileceğini düşündüm, ancak IE’de bile 5 saniye sürüyor, bu yüzden bazı sistem ayarları veya Apache ayarları ya da gremlinler olmalı.
Peter Perháč

2
Statik içerik isterken (yani yüklenirken http://localhost/index.html) aynı davranışa sahip mi? Değilse, bir Apache sorunu değil, bir PHP sorunu olabilir.
Marcus Spiegel

5
Bu sorunun gösterdiği çok çeşitli cevaplar, yüzlerce farklı nedenden ötürü sayfa isteklerinin yavaş olabilmesi için onlarca var. Çok yavaş sayfa istekleriniz olduğu için bu soruya ulaştıysanız, burada yararlı bir cevap almadan önce yavaşlığın nedenini daha derine inmeniz gerekir. straceve tcpdumpbunun için faydalı araçlardır.
Ladadadada

Yanıtlar:


59

Benim için, ServerNameözelliğin httpd.confgecikmelere sabitlenmesi (en kötü 10 saniyeye kadar):

# 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

12
Bu eserler - iki kere oy kullanabilmeyi isterdim
hohner

8
Bu da benim için düzeltir! 10 saniyelik gecikmeden 2ms'ye!
DouglasHeriot

Saatlerce uğraştım ve çözüm buydu.
williamcarswell

1
localhost düzgün bir şekilde çözülürse bu neden bir problem? Cevap vermeden önce bu 10 saniyede neler oluyor? bir yerde zaman aşımı bekliyor?
milan

3
@Elipticalview Dosyadaki yorumun dediği gibi; If your host doesn't have a registered DNS name, enter its IP address here.
sshow

21

Ben de aynı sorunu yaşadım.

Localhost yönlendirme ana makinede 127.0.0.1 olarak ayarlamak yardımcı olmadı. MySQL sunucusunu optimize etmek yardımcı olmadı (InnoDB -> MyISAM, my.ini'deki önbellekle ilgili birçok yönergeyi değiştirdi).

Sonra web webgrind kullandım ve problemi "new PDO (...)" çağrısına daralttım. Değiştirme

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

için

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

PDO için dsn içinde tamamen sorunu çözdü ! Sayfa yükleme süresi 3000 ms'den 16 ms'ye çıktı .

Ancak neden ana bilgisayar dosyasındaki "127.0.0.1 localhost" satırının yardımcı olmadığından kafam karıştı.


3
Birisi çalışması için hangi dosyayı düzenlemem gerektiğini söyleyebilir mi?
Giri

1
Veritabanına bağlandığınız satırı (PHP betiğinizde) düzenlemeniz gerekir. Örneğin çizgiyi değiştirin: $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

Geçenlerde bir EXT-JS uygulaması üzerinde çalışıyordum ve yanıt vermek için çok uzun süren MYSQL veri sorgularında büyük problemler vardı. MYSQL temelde yavaştı. Tanrıya şükür, cevabı burada aldım ..... sadece bağlantı betiğindeki sunucumu değiştirdim: host = localhost; host = 127.0.0.1 Sunucu yanıtlarım 3 dak (180sn) ile 1 s. Çok teşekkürler.
user184985

Bu benim sorunumu çözdü. Garip ...
SQLite'daki

2
Aynı benim için, ama sadece WordPress için. Wp-config.php dosyasındaki "localhost" yerine "127.0.0.1" yazması gerekiyordu
Adrian

20

Sorun Apache'nin ana ayar dosyasındaydı httpd.conf.

Bunu buldum:

PHP'yi Windows'ta Apache 2.x ile çalışacak şekilde ayarlamanın üç yolu vardır. PHP'yi işleyici, CGI veya FastCGI altında çalıştırabilirsiniz. [Kaynak]

Ve böylece Apache'nin ayarlarına girdim ve sorunun nerede olduğunu gördüm: Modül olarak yüklemek yerine CGI olarak ayarlamıştım. Bu php-cgi.exeher istediğimde başlatılıp kapanmasına neden oldu. Bu benim localhostgelişimimi yavaşlatıyordu .

PHP'yi Apache MODULE olarak yüklemek için ayarları değiştirdim ve şimdi hepsi mükemmel çalışıyor. :)

Apache 2.x için PHP modülünü yüklemek için:

1) aşağıdaki satırları httpd.conf

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

AddHandler application/x-httpd-php .php

(ps C:/phpyolunuzu değiştirin . Ayrıca, php5apache **. dll dosyasını mevcut dosya adınıza değiştirin)

2) PHP yürütmesini yalnızca .php dosyaları için sınırlandırmak için şunu ekleyin httpd.conf:

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

3) php.ini dosyasının yolunu ayarlayın httpd.conf(yeniden başlattıktan sonra hata alırsanız, bu satırı tekrar kaldırın)

PHPIniDir "C:/php"

Çabalarınız için hepinize teşekkür ederim.


2
Apache'm, Kaynakta belirtildiği gibi satırları eklemeyi durdurur. Windows'da nasıl yaparım?
AgA

bu bağlantının süresi doldu. Bunu kullanın: goo.gl/2EVth9
T.Todua

7

Aynı problemi yaşadım ve sonunda iki gerçeğin geldiğini keşfettim:

  1. Mac OS X Mavericks kullanıyorum
  2. Ben URL yoluyla projemi erişilen http://myproject.local/bir çizgi koymak çünkü 127.0.0.1 myproject.localiçinde/etc/hosts

Sorun, .localtld'nin Bonjour hizmetine ayrılmasından ve bunun da Mac OS X Lion'dan (10.7) beri ayrılmasından kaynaklanıyor.

Tld'yi başka bir şey için değiştirmek sorunu çözdü.


6

/etc/hostsDoğru olup olmadığını kontrol edin . Bunun gibi, böyle:

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

Yerinde ****ana bilgisayar adınızı verin.


Benim için durum buydu. Etki alanım ipv4 satırında, ancak ipv6 satırında ayarlanmadı.
Rafael Beckel

Benim için aynı. İstekler, / etc / hosts dosyasına ek satırı koymadan önce> 5 saniye sürdü. Şimdi eşyalarım ~ 0.1 sn.
mwallisch

Beni doğru yöne sok. Eklendi 127.0.0.1 something.atmy.localhostve şimdi istek artık 20 saniye sürmüyor. Bunun yerine yerel apache derhal yanıt verir. Ağlar hakkında pek bir şey bilmiyorum. Sanırım alan adı çok yavaş çözüldü, çünkü bir şeyler doğru bir şekilde yapılandırılmadı.
robsch

4

Senin içinde httpd.confayarını emin olun HostnameLookups Off.


6
Bir apache.conf dosyasına sahip değilim, ayrıca tüm dosyalarda HostnameLookups yönergesi için arama yaptım ve core.html.en manual dosyasında buldum. Varsayılan olarak Kapalı olduğu söylendi, bu yüzden kapalı olduğunu
sanıyorum

3

Kimseye yardım etmesi durumunda, bu problemi yaşadım ve yanlış DNS aramasıyla kaynamaya başladım .

Sunucudaki DNS Sunucusu olarak ayarlandı 127.0.0.1- Google Public DNS sunucularını kullanması için değiştirdim ve bu işlem daha hızlı hale geldi.


2

Sorunun apache-2.2 etiketi var, ancak Apache 2.4 + PHP 5.5 ile WAMP da bu kötü konudan birisi etkilenirse , SO için aşağıdaki cevap benim için hile yaptı:

bu satırı yorumlayarakhttpd.conf CGI modülünün yüklenmesini düzenleyin ve devre dışı bırakın :LoadModule cgi_module modules/mod_cgi.so

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.