Mengapa respons di localhost sangat lambat?

59

Saya sedang mengerjakan proyek PHP kecil kecil untuk seorang teman saya, dan saya memiliki pengaturan lingkungan WAMP untuk pengembangan lokal. Saya ingat hari-hari ketika respons dari Apache 2.2 lokal saya langsung. Sayangnya, sekarang setelah saya kembali dari liburan yang sangat panjang, saya menemukan respons dari localhostsangat lambat.

Dibutuhkan sekitar 5 detik untuk mendapatkan halaman HTML 300B yang disajikan.

Ketika saya melihat task manager, httpdproses (2) menggunakan hingga 0% dari CPU dan secara keseluruhan komputer saya tidak di bawah beban (0-2% penggunaan CPU).

Mengapa latensi begitu tinggi? Apakah ada pengaturan Apache yang dapat saya atur untuk membuat utasnya berjalan dengan prioritas yang lebih tinggi atau sesuatu? Sepertinya itu hanya tidur sebelum melayani respons.

Peter Perháč
sumber
1
Apakah localhostmengatasinya dengan benar berdasarkan DNS? ping localhostharus kembali dengan instan127.0.0.1 .
Alexis Lê-Quôc
yang berfungsi dengan baik, respons diterima dalam <1ms
Peter Perháč
Saya pikir firefox bisa menjadi masalah, tetapi membutuhkan 5s bahkan di IE, jadi harus ada beberapa pengaturan sistem atau pengaturan atau gremlin Apache.
Peter Perháč
2
Apakah ia memiliki perilaku yang sama ketika meminta konten statis (yaitu ketika memuat http://localhost/index.html)? Jika tidak, itu mungkin masalah PHP, bukan masalah Apache.
Marcus Spiegel
5
Apa yang banyak, beragam jawaban untuk pertanyaan ini tunjukkan adalah bahwa ada lusinan, jika tidak ratusan alasan berbeda, permintaan halaman bisa lambat. Jika Anda sampai pada pertanyaan ini karena Anda juga memiliki permintaan halaman yang lambat, Anda perlu menggali lebih dalam penyebab kelambatan sebelum Anda bisa mendapatkan jawaban yang bermanfaat di sini. stracedan tcpdumpmerupakan alat yang berguna untuk ini.
Ladadadada

Jawaban:

59

Bagi saya, mengatur ServerNameproperti dalam httpd.confmemperbaiki penundaan (paling buruk 10 detik):

# 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
sshow
sumber
12
Ini berhasil - berharap saya bisa
membesarkan
8
Ini memperbaikinya untuk saya juga! Hilang dari 10s latensi menjadi 2ms!
DouglasHeriot
Saya berjuang selama berjam-jam dan ini solusinya.
williamcarswell
1
mengapa ini menjadi masalah jika localhost diselesaikan dengan benar? apa yang terjadi pada 10dtk itu sebelum merespons? menunggu waktu habis di suatu tempat?
milan
3
@Elipticalview Seperti komentar dalam file mengatakan; If your host doesn't have a registered DNS name, enter its IP address here.
sshow
21

Saya memiliki masalah yang sama.

Mengatur localhost redirect ke 127.0.0.1 di file hosts tidak membantu. Mengoptimalkan server MySQL tidak membantu (InnoDB -> MyISAM, mengubah banyak arahan terkait cache di my.ini).

Kemudian saya menggunakan web web grind dan mempersempit masalahnya menjadi panggilan "new PDO (...)". Berubah

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

untuk

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

di dsn untuk PDO sepenuhnya memecahkan masalah ! Waktu pemuatan halaman berubah dari 3000 ms menjadi 16ms .

Namun saya benar-benar bingung mengapa baris "127.0.0.1 localhost" di file hosts tidak membantu.

michalko
sumber
3
Adakah yang bisa memberi tahu saya file mana yang harus saya edit untuk membuatnya berfungsi?
Giri
1
Anda harus mengedit baris tempat Anda terhubung ke database (dalam skrip PHP Anda). Misalnya, ubah baris: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');ke $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
michalko
Saya sedang mengerjakan aplikasi EXT-JS baru-baru ini dan memiliki masalah besar permintaan data MYSQL terlalu lama untuk merespon. MYSQL pada dasarnya terlalu lambat. Syukurlah, Mendapat jawaban di sini ..... baru saja mengubah host saya di skrip koneksi dari: host = localhost; menjadi tuan rumah = 127.0.0.1 Respons server saya berubah dari 3 menit (180 detik) menjadi kurang dari 1 detik. Terima kasih banyak.
user184985
Ini menyelesaikan masalah saya. Aneh ... Saya tidak melihat masalah itu dalam SQLite
Mladen Janjetovic
2
Hal yang sama untuk saya, tetapi hanya untuk WordPress. Harus mengganti "localhost" dengan "127.0.0.1" di wp-config.php
Adrian
20

Masalahnya adalah dengan file pengaturan utama Apache httpd.conf.

Aku menemukan ini:

Ada tiga cara untuk mengatur PHP agar berfungsi dengan Apache 2.x pada Windows. Anda dapat menjalankan PHP sebagai penangan, sebagai CGI, atau di bawah FastCGI. [Sumber]

Jadi saya pergi ke pengaturan Apache dan melihat di mana masalahnya: Saya mengaturnya sebagai CGI, alih-alih memuatnya sebagai modul. Ini menyebabkan php-cgi.exememulai dan menutup setiap kali saya membuat permintaan. Ini memperlambat localhostperkembangan saya .

Saya mengubah pengaturan untuk memuat PHP sebagai MODUL Apache dan sekarang semuanya berfungsi dengan baik. :)

Untuk memuat modul PHP untuk Apache 2.x:

1) masukkan baris berikut ke dalam httpd.conf

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

AddHandler application/x-httpd-php .php

(ps ubah C:/phpke jalur Anda. Juga, ubah php5apache **. dll ke nama file yang ada)

2) Untuk membatasi eksekusi PHP hanya untuk file .php, tambahkan ini di httpd.conf:

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

3) set path php.ini di httpd.conf(jika setelah restart Anda mendapatkan kesalahan, kemudian hapus baris ini lagi)

PHPIniDir "C:/php"

Terima kasih atas upaya Anda.

Peter Perháč
sumber
2
Apache saya berhenti menambahkan baris seperti yang disebutkan dalam Sumber. Bagaimana saya melakukannya di Windows?
AgA
tautan itu kedaluwarsa. Gunakan ini: goo.gl/2EVth9
T.Todua
7

Saya memiliki masalah yang sama dan akhirnya menemukan bahwa itu berasal dari dua fakta:

  1. Saya menggunakan Mac OS X Mavericks
  2. Aku diakses proyek saya melalui URL http://myproject.local/karena saya menempatkan garis 127.0.0.1 myproject.localdi/etc/hosts

Masalahnya muncul karena .localtld dicadangkan untuk layanan Bonjour, dan ini sejak Mac OS X Lion (10.7).

Mengubah tld untuk hal lain memperbaiki masalah.

lepix
sumber
6

Periksa apakah /etc/hostssudah benar. Seperti ini:

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

Di tempat itu ****berikan nama host Anda.

Morpheus
sumber
Itulah yang terjadi pada saya. Domain saya disetel dalam baris ipv4, tetapi tidak di ipv6.
Rafael Beckel
Sama untuk ku. Permintaan memerlukan waktu> 5 detik sebelum saya memasukkan baris tambahan di / etc / hosts. Sekarang barang-barang saya berjalan dalam ~ 0,1 detik.
mwallisch
Tempatkan saya di arah yang benar. 127.0.0.1 something.atmy.localhostPermintaan ditambahkan dan sekarang tidak membutuhkan waktu 20 detik lagi. Sebaliknya apache lokal merespons dengan segera. Tidak tahu banyak tentang jaringan. Saya kira nama domain teratasi terlalu lambat, karena ada sesuatu yang tidak dikonfigurasi dengan benar.
robsch
4

Dalam Anda httpd.confpastikan untuk mengatur pengaturan HostnameLookups Off.

drAlberT
sumber
6
saya tampaknya tidak memiliki file apache.conf, juga saya mencari petunjuk HostnameLookups di semua file dan saya menemukannya di file manual core.html.en. Dikatakan Tidak Aktif secara default, jadi saya kira tidak aktif
Peter Perháč
3

Jika itu membantu siapa pun, saya punya masalah ini dan itu menjadi pencarian DNS yang salah .

Server DNS pada server diatur ke 127.0.0.1- Saya mengubahnya untuk menggunakan server DNS Publik Google, dan itu membuatnya lebih cepat menumpuk.

Toby Allen
sumber
2

Pertanyaan ini memiliki tag apache-2.2, tetapi jika seseorang dipengaruhi oleh masalah jahat ini juga di WAMP dengan Apache 2.4 + PHP 5.5 , jawaban berikut pada SO melakukan trik untuk saya:

edit httpd.confdan nonaktifkan pemuatan modul CGI dengan mengomentari baris ini:LoadModule cgi_module modules/mod_cgi.so

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

Marco Demaio
sumber