Phải làm gì sau khi đạt 256 kết nối tối đa đáng sợ Giới hạn Apache


9

Sau khi gãi đầu cố gắng tìm ra lý do tại sao trang web của tôi phản hồi quá chậm mặc dù tài nguyên máy chủ vẫn ổn, cuối cùng tôi đã kiểm tra trạng thái Apache và tìm thấy:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Dường như apache của tôi được tối đa hóa với các kết nối. Bất cứ ai cố gắng truy cập trang web của tôi đều được đưa vào "danh sách chờ" cho đến khi Apache miễn phí trở lại.

Có vẻ như tôi có hai lựa chọn.

A) Tăng giới hạn kết nối tối đa trên 256. Mặc dù theo bài viết này, điều đó không dễ dàng như vậy:

Theo mặc định, tham số MaxCl Client có giới hạn được biên dịch cứng là 256. Tuy nhiên, điều này có thể được thay đổi bằng cách biên dịch lại Apache. Một số bản phân phối hoặc công ty lưu trữ nâng giới hạn này lên giá trị rất cao, chẳng hạn như 512 hoặc thậm chí 1024 để đối phó với tải trọng lớn.

B) Xác định vị trí các tập lệnh đang chiếm quá nhiều thời gian. Điều này có vẻ khó khăn hơn nhiều đối với tôi, vì hầu hết các quá trình apache chỉ xuất hiện và sau đó biến mất một lần nữa. Ngoài ra, các tập lệnh PHP trang web của tôi được tối ưu hóa khá tốt ... và một lần nữa, tài nguyên máy chủ vẫn ổn:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Tôi nên chọn tùy chọn nào (nếu là một trong số họ) và tôi nên làm như thế nào?

BIÊN TẬP

Thông tin thêm: Phiên bản máy chủ: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlrict / 1.4 FrontPage / 5.0.2.2635

Xác nhận HTTP: http://pastebin.com/yBeLt6mP

Mẫu Yêu cầu Parital: http://pastebin.com/vzUVDMPR

Toggle Text-Wrap nếu các thùng dán xuất hiện kỳ ​​lạ.


Bài báo bạn trích dẫn là ~ 6 tuổi. Phần mềm thay đổi. Xem câu trả lời của Shane.
Chris S

1
@ChrisS Thậm chí còn lỗi thời - giới hạn biên dịch là một điều 1.x (2.0 xuất hiện năm 2002) và bài viết thậm chí còn liên kết rõ ràng với các tài liệu 2.0.
Shane Madden

Câu trả lời:


10

Bài viết đó không chính xác; MaxClientscó thể được nâng lên trên 256 khi sử dụng MPM prefork (đây là những gì tôi cho rằng bạn đang sử dụng hiện tại dựa trên mô tả vấn đề của bạn). Từ tài liệu :

Đối với các máy chủ không có luồng (ví dụ: prefork), MaxClientschuyển thành số lượng tối đa các tiến trình con sẽ được khởi chạy để phục vụ các yêu cầu. Giá trị mặc định là 256; để tăng nó, bạn cũng phải nâng cao ServerLimit.

ServerLimitlà một trong những giới hạn được biên dịch cứng, nhưng nó đã đi qua nơi bạn nên đến mà không cần máy chủ của bạn gặp phải một số nút cổ chai khác. Tài liệu :

Có một giới hạn cứng ServerLimit 20000được biên dịch vào máy chủ (đối với MPM 200000 prefork). Điều này nhằm tránh các hiệu ứng khó chịu gây ra bởi lỗi chính tả.

Vì vậy, nếu bạn muốn tăng giới hạn khách hàng của mình lên mức nào đó như 512, thì:

MaxClients 512
ServerLimit 512

Bạn cũng nên xem MPM nào bạn đang sử dụng, vì MPM khác với prefork tốt hơn cho quy mô. Xem ở đây để biết thêm thông tin.


Tôi thấy core.c và worker.c chạy httpd -l. Tôi đoán điều đó có nghĩa là tôi đang chạy MPM worker?
kmoney12

@hellohellosharp Thật vậy - trong trường hợp đó, bạn sẽ muốn điều chỉnh khả năng của bạn MaxClients, ServerLimit, ThreadsPerChild, và ThreadLimit. Bạn có thể cung cấp cấu hình worker worker hiện tại của bạn httpd.confkhông?
Shane Madden

Có ... có bất kỳ nguy hiểm trong việc đăng công khai này? Hy vọng là không, đây là: pastebin.com/yBeLt6mP
kmoney12

Không, không có vấn đề trong việc đăng hầu hết các tập tin httpd.conf. Chỉ cần đảm bảo rằng bạn không có thứ gì đó kỳ lạ như nhận xét bằng mật khẩu / tên người dùng / v.v. Đôi khi chúng leo lên trong các phần cấu hình proxy và tương tự. Nhiều người cũng thích chỉnh sửa tên IP và Tên miền, vì vậy họ không thu hút sự chú ý
Chris S

1
mô-đun trạng thái có thể cho bạn thấy những chi tiết này.
ETL

-1

Tôi sẽ đề nghị bạn sử dụng proxy ngược, một cái gì đó như nginx hoặc lighttpd có thể xử lý nhiều kết nối hơn apache. Tùy thuộc vào cách trang web của bạn sử dụng htaccess, bạn cũng có thể sử dụng nginx / lighttpd với fcgi và báo trước apache hoàn toàn.


4
Có thật không?? Anh ta cần thêm hai dòng cấu hình vào httpd.confvà giải pháp của bạn là loại bỏ hầu hết các phần mềm anh ta đang chạy và thay thế nó?! Mọi phần mềm đều có vấn đề, nhưng việc sử dụng sai mục đích gây ra vấn đề tồi tệ hơn.
Chris S

Cuối cùng nginx có thể xử lý các kết nối tích cực hơn, tùy thuộc vào OP để quyết định sử dụng cái gì, tôi chỉ đưa ra đề nghị của mình.
Shoshomiga
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.