Tại sao phản hồi trên localhost rất chậm?


59

Tôi đang làm việc trên một dự án PHP nhỏ bé cho một người bạn của tôi và tôi có một thiết lập môi trường WAMP để phát triển cục bộ. Tôi nhớ những ngày mà phản hồi từ Apache 2.2 địa phương của tôi là ngay lập tức. Than ôi, bây giờ tôi đã trở lại sau một kỳ nghỉ dài, tôi nhận thấy những phản hồi từ localhostsự chậm chạp đau đớn.

Mất khoảng 5 giây để có một trang HTML 300B được phục vụ.

Khi tôi nhìn vào trình quản lý tác vụ, các httpdquy trình (2) đang sử dụng tối đa 0% CPU và tổng thể máy tính của tôi không tải (sử dụng CPU 0-2%).

Tại sao độ trễ quá cao? Có bất kỳ cài đặt Apache nào mà tôi có thể điều chỉnh để có thể làm cho luồng của nó chạy với mức ưu tiên cao hơn hoặc một cái gì đó không? Có vẻ như nó chỉ đơn giản là ngủ trước khi nó đưa ra phản ứng.


1
localhostgiải quyết đúng DNS-khôn ngoan? ping localhostnên quay lại ngay lập tức với 127.0.0.1.
Alexis Lê-Quôc

hoạt động tốt, phản hồi nhận được trong <1ms
Peter Perháč

Tôi nghĩ firefox có thể là vấn đề, nhưng mất 5 giây ngay cả trong IE, do đó phải là cài đặt hệ thống hoặc cài đặt Apache hoặc gremlins.
Peter Perháč

2
Nó có hành vi tương tự khi yêu cầu nội dung tĩnh (tức là khi tải http://localhost/index.html) không? Nếu không, nó có thể là một vấn đề PHP, không phải là vấn đề Apache.
Marcus Spiegel

5
Điều mà nhiều câu trả lời khác nhau cho câu hỏi này cho thấy có hàng tá, nếu không phải hàng trăm lý do khác nhau, yêu cầu trang có thể bị chậm. Nếu bạn đã đến câu hỏi này vì bạn cũng có yêu cầu trang chậm, bạn sẽ cần tìm hiểu sâu hơn về nguyên nhân của sự chậm chạp trước khi bạn có thể nhận được câu trả lời hữu ích tại đây. stracetcpdumplà những công cụ hữu ích cho việc này.
Ladadadada

Câu trả lời:


59

Đối với tôi, cài đặt thuộc ServerNametính trong httpd.confcác độ trễ cố định (chúng chậm nhất là 10 giây):

# 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
Công việc này - ước gì tôi có thể nâng cấp hai lần
hohner

8
Điều này sửa nó cho tôi quá! Đi từ độ trễ 10 giây đến 2ms!
DouglasHeriot

Tôi đã vật lộn trong nhiều giờ và đây là giải pháp.
williamcarswell

1
Tại sao điều này là một vấn đề nếu localhost giải quyết đúng? Điều gì đang xảy ra trong 10 giây trước khi nó phản hồi? chờ đợi để hết thời gian ở đâu đó?
milan

3
@Elipticalview Như nhận xét trong tệp nói; If your host doesn't have a registered DNS name, enter its IP address here.
sshow

21

Tôi đã có cùng một vấn đề.

Đặt chuyển hướng localhost thành 127.0.0.1 trong tệp máy chủ không giúp được gì. Tối ưu hóa máy chủ MySQL không giúp được gì (InnoDB -> MyISAM, thay đổi nhiều chỉ thị liên quan đến bộ đệm trong my.ini).

Sau đó, tôi đã sử dụng webgrind và thu hẹp vấn đề thành cuộc gọi "PDO mới (...)". Thay đổi

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

đến

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

trong DSN cho PDO đã giải quyết hoàn toàn vấn đề ! Thời gian tải trang đã tăng từ hơn 3000 ms đến 16ms .

Tuy nhiên tôi thực sự bối rối tại sao dòng "127.0.0.1 localhost" trong tệp máy chủ không giúp ích được gì.


3
Ai đó có thể cho tôi biết tập tin nào tôi nên chỉnh sửa để làm cho nó hoạt động không?
Giri

1
Bạn nên chỉnh sửa dòng nơi bạn đang kết nối với cơ sở dữ liệu (trong tập lệnh PHP của bạn). Ví dụ: thay đổi dòng: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');thành $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
michalko

Tôi đã làm việc trên một ứng dụng EXT-JS gần đây và có một vấn đề lớn về truy vấn dữ liệu MYSQL mất quá nhiều thời gian để trả lời. MYSQL về cơ bản là quá chậm. Cảm ơn chúa, đã có câu trả lời ở đây ..... chỉ cần thay đổi máy chủ của tôi trong tập lệnh kết nối từ: host = localhost; đến host = 127.0.0.1 Các phản hồi trên máy chủ của tôi đã chuyển từ 3 phút (180 giây) xuống còn ít hơn 1 giây. Cảm ơn rất nhiều.
dùng184985

Điều này đã giải quyết vấn đề của tôi. Lạ thật ... Tôi không nhận thấy vấn đề đó ở SQLite
Mladen Janjetovic

2
Đối với tôi cũng vậy, nhưng chỉ với WordPress. Phải thay thế "localhost" bằng "127.0.0.1" trong wp-config.php
Adrian

20

Vấn đề là với tệp cài đặt chính của Apache httpd.conf.

Tôi đã tìm thấy cái này:

Có ba cách để thiết lập PHP để hoạt động với Apache 2.x trên Windows. Bạn có thể chạy PHP như một trình xử lý, như một CGI hoặc theo FastCGI. [Nguồn]

Và vì vậy, tôi đã đi vào các thiết lập của Apache và thấy vấn đề là ở đâu: Tôi đã thiết lập nó dưới dạng CGI, thay vì tải nó dưới dạng một mô-đun. Điều này gây ra php-cgi.exeđể khởi động và tắt mỗi khi tôi yêu cầu. Điều này đã làm chậm sự localhostphát triển của tôi xuống.

Tôi đã thay đổi các cài đặt để tải PHP dưới dạng MODULE Apache và bây giờ tất cả đều hoạt động hoàn hảo. :)

Để tải mô-đun PHP cho Apache 2.x:

1) chèn các dòng sau vào httpd.conf

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

AddHandler application/x-httpd-php .php

(ps thay đổi C:/phpđường dẫn của bạn. Ngoài ra, thay đổi php5apache **. dll thành tên tệp hiện tại của bạn)

2) Để hạn chế PHP thực hiện chỉ dành cho các file .php, thêm này trong httpd.conf:

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

3) đặt đường dẫn của php.ini httpd.conf(nếu sau khi khởi động lại bạn gặp lỗi, sau đó xóa dòng này lại)

PHPIniDir "C:/php"

Cảm ơn tất cả những nỗ lực của bạn.


2
Apache của tôi dừng việc thêm các dòng như được đề cập trong Nguồn. Làm thế nào để tôi làm trong Windows?
AgA

liên kết đó đã hết hạn Sử dụng cái này: goo.gl/2EVth9
T.Todua

7

Tôi đã có cùng một vấn đề và cuối cùng phát hiện ra rằng nó đến từ hai sự thật:

  1. Tôi sử dụng Mac OS X Mavericks
  2. Tôi đã truy cập dự án của mình thông qua URL http://myproject.local/vì tôi đặt một dòng 127.0.0.1 myproject.localvào/etc/hosts

Vấn đề xuất hiện do .localtld được dành riêng cho dịch vụ Bonjour và điều này kể từ Mac OS X Lion (10.7).

Thay đổi tld cho một cái gì đó khác đã khắc phục vấn đề.


6

Kiểm tra nếu /etc/hostsđúng. Như thế này:

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

Ở nơi đặt ****tên máy chủ của bạn.


Đó là trường hợp của tôi. Tên miền của tôi đã được đặt trong dòng ipv4, nhưng không phải trong ipv6.
Rafael Beckel

Tương tự cho tôi. Yêu cầu mất> 5 giây trước khi tôi đặt dòng bổ sung vào / etc / hosts. Bây giờ công cụ của tôi chạy trong ~ 0,1 giây.
mwallisch

Đưa tôi đi đúng hướng. Đã thêm 127.0.0.1 something.atmy.localhostvà bây giờ yêu cầu không mất 20 giây nữa. Thay vào đó, apache địa phương trả lời ngay lập tức. Đừng biết nhiều về mạng. Tôi đoán rằng tên miền được giải quyết quá chậm, bởi vì một cái gì đó không được cấu hình chính xác.
robsch

4

Trong httpd.confchắc chắn của bạn để thiết lập các thiết lập HostnameLookups Off.


6
Tôi dường như không có tệp apache.conf, tôi cũng đã tìm kiếm chỉ thị HostnameLookups trong tất cả các tệp và tôi tìm thấy nó trong tệp thủ công core.html.en. Nó nói nó tắt theo mặc định, vì vậy tôi đoán nó tắt
Peter Perháč

3

Trong trường hợp nó giúp được bất cứ ai, tôi đã gặp phải vấn đề này và nó đã bị lỗi khi tra cứu DNS không chính xác .

Máy chủ DNS trên máy chủ được đặt thành 127.0.0.1- Tôi đã thay đổi nó để sử dụng các máy chủ DNS công cộng của Google và điều đó làm cho nó nhanh hơn cả đống.


2

Câu hỏi có thẻ apache-2.2, nhưng nếu ai đó bị ảnh hưởng bởi vấn đề bất chính này cũng trên WAMP với Apache 2.4 + PHP 5.5 , câu trả lời sau đây về SO đã giúp tôi:

chỉnh sửa httpd.confvà vô hiệu hóa tải mô-đun CGI bằng cách nhận xét dòng này:LoadModule cgi_module modules/mod_cgi.so

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.