Cách tinh chỉnh Apache trên máy chủ Ubuntu 14.04


18

Hiện tại trên Apache 2 của tôi (chính xác là Apache 2.4.7) trên Ubuntu 14.04, tôi có cài đặt này:

/etc/apache2/mods-enables/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

Máy chủ là máy chủ Amazon 8GB (RAM), không có gì khác hơn là tải lên mẫu đăng ký ba trang cho một số chiến dịch quảng cáo của Google.

Tôi đã tìm thấy một tập lệnh có tên apachetuneit.sh trên web, nhưng sau một lúc, Apache đã báo cáo lỗi này:

[Thứ ba ngày 21 tháng 4 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: máy chủ đạt đến cài đặt MaxRequestWorkers, hãy xem xét nâng cài đặt MaxRequestWorkers

Làm cách nào để đánh giá cách đặt các cài đặt này?

Tôi chỉ hỏi cụ thể về cách điều chỉnh Apache 2.4 và không có gì khác. Đây là lý do tại sao câu hỏi này khác với câu hỏi này .



@JennyD Bài viết đó quá rộng cho nhu cầu cụ thể này.
ServerChecker

Cách mà bạn đánh giá các cài đặt cụ thể này là bạn thực hiện kiểm tra tải.
Jenny D nói Phục hồi lại

@JennyD Nó thậm chí còn dễ dàng hơn thế. Chỉ cần sử dụng tập lệnh ap.sh dưới tải thông thường nhiều lần trong ngày và trung bình, thực hiện phép toán theo liên kết dịch vụ đám mây bên dưới và đặt MaxRequestWorkers thành giá trị đó. Sau đó, xem nhật ký Apache để biết các rắc rối với MaxRequestWorkers và tăng, thêm RAM, thêm CloudFlare hoặc thêm một nút web khác. Không cần phải làm thử nghiệm cực kỳ căng thẳng.
ServerChecker

Bạn có thể viết câu trả lời chứa thông tin về tập lệnh đó và nội dung có liên quan từ các liên kết bạn có trong câu trả lời của riêng bạn, cho câu hỏi tôi đã chỉ ra như một bản sao có thể có.
Jenny D nói Phục hồi lại

Câu trả lời:


45
  1. Nhận ra rằng Ubuntu 14.04 sử dụng Apache 2 với PHP chạy qua mô-đun mpm_prefork , trong đó một tệp có thể chỉnh sửa nằm trong /etc/apache2/mods-enables/mpm_prefork.conf. Ngoài ra, nhận ra rằng bắt đầu trong Apache 2.4, MaxCl Client hiện được đổi tên thành MaxRequestWorkers , và vì vậy mọi tài liệu liên quan đến MaxCl Client cần phải được chuyển sang MaxRequestWorkers.

  2. Tạm thời dừng dịch vụ web Apache bằng lệnh sau:

    dịch vụ sudo apache2 dừng
  1. Đợi 5 giây và sau đó chạy lệnh sau để tìm hiểu xem bạn có bao nhiêu bộ nhớ ảo trên máy chủ miễn phí:
    sudo miễn phí -ht

Đọc dòng Mem: và nhìn vào cột miễn phí. Hãy coi đây là dung lượng RAM mà bạn có thể dành cho Apache, mặc dù tôi thường muốn khấu trừ 2GB trên máy chủ mạnh hơn (như trong> 4GB) hoặc 1GB trên máy chủ nhẹ hơn. Vì vậy, nếu cột miễn phí nói rằng tôi có 13GB miễn phí, tôi sẽ khuyên bạn nên cung cấp cho Apache 11GB. Đó là một cơ sở. Nếu thỉnh thoảng chúng tôi gặp bất kỳ sự cố cơ sở dữ liệu nào trong nhật ký (như 3 lần trong nhật ký trong khoảng thời gian 3 ngày) thì nó cần thêm bộ nhớ, thì chúng tôi có thể xem xét rằng chúng tôi chỉ có 10GB để chơi thay vì 11GB (trong trường hợp này là ). Nếu chúng ta gặp phải trong nhật ký Apache rằng máy chủ cần nhiều MaxRequestWorkers hơn, thì đó là một vấn đề riêng tôi sẽ giải quyết bên dưới.

  1. Bắt đầu máy chủ web Apache.
    dịch vụ sudo apache2 bắt đầu
  1. Mở như 10 tab trình duyệt, kết nối với một số trang tải dài hơn hoặc chậm hơn từ trang web của bạn và làm mới như 3-4 lần trên mỗi tab.

  2. Sau khi làm điều đó, bây giờ nhanh chóng chạy lệnh sau:

    sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {in "Sử dụng bộ nhớ Apache (MB):" x / 1024; in "Kích thước quy trình trung bình (MB):" x / ((y-1) * 1024)} '

Chạy nó nhanh như thế 5 lần.

Nhìn vào giá trị Kích thước quy trình trung bình và giá trị trung bình đó trong số 5 lần bạn chạy nó.

Bây giờ hãy thực hiện phép toán sau và chắc chắn chuyển đổi GB sang MB khi cần thiết để tất cả các số đều nằm trong giá trị MB. Vì vậy, nhân số nhân 1024 hoặc chia cho 1024, tùy thuộc vào con đường bạn cần đi.

MaxRequestWorkers = Đường cơ sở miễn phí (có dung lượng bộ đệm) / Kích thước quy trình trung bình

Ví dụ: tôi có máy chủ 14GB, nhưng khi Apache bị dừng, máy chủ cho thấy nó sử dụng RAM 1GB khi không hoạt động. Sau đó tôi cung cấp thêm 1GB trong một số không gian bộ đệm bổ sung cho HĐH trong trường hợp cần. Điều đó có nghĩa là tôi sẽ có Đường cơ sở miễn phí 12 GB. Bây giờ tôi phải chuyển đổi nó từ GB sang MB, và vì vậy tôi nhân 12 x 1024 và nhận được 12288. 12288 MB là giá trị cơ bản miễn phí của tôi. Trong trường hợp của tôi, tôi thấy rằng Kích thước quy trình trung bình là 21 MB. Vì vậy, tôi lấy 12288/21 và tôi nhận được khoảng 585. Bây giờ, thông thường là các sysops làm tròn giá trị này, và vì vậy tôi đã nhận được 580.

  1. Chỉnh sửa tệp /etc/apache2/mods-enables/mpm_prefork.conf và xem xét đặt nó thành các giá trị mặc định sau, thay thế XXX bằng phép tính MaxRequestWorkers của bạn:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Lưu ý rằng bạn có thể không thấy tham số ServerLimit ở đó. Thêm nó Tham số này mặc định là 256 nếu không có, nhưng cần phải có cùng giá trị với MaxRequestWorkers hoặc bạn sẽ gặp lỗi.

  1. Một yếu tố quan trọng khác trong cấu hình Apache của bạn là tệp /etc/apache2/apache2.conf với biến Timeout và được đo bằng giây. Đây là khoảng thời gian bạn có thể gửi hoặc nhận từ máy chủ trước khi hết thời gian. Bạn cũng phải ghi nhớ tải lên tệp hoặc tải xuống tệp, chẳng hạn như nếu bạn có một trang web nơi mọi người có thể tải lên hoặc tải xuống CSV hoặc các tệp lớn khác, chẳng hạn. Và bạn cần ghi nhớ một máy chủ cơ sở dữ liệu bận rộn và nơi bạn có thể cần cung cấp một thời gian trước khi hết thời gian trang. Bạn càng biến biến Timeout đó càng nhỏ, máy chủ web càng có sẵn để nhận các kết nối mới. Tuy nhiên, lưu ý rằng việc đặt giá trị này quá thấp có thể gây ra sự biến đổi với các biến phiên PHP, mặc dù không phải với các cookie dựa trên phiên trình duyệt. Vì vậy, ví dụ, giá trị 300 (5 phút) có thể tốt cho máy chủ web dựa trên các biến phiên PHP cho quy trình làm việc của ứng dụng web thay vì cookie phiên trình duyệt. Giá trị 45 có thể tốt cho máy chủ web không phục vụ nhiều hơn các trang đích quảng cáo tĩnh, nhưng sẽ rất tệ cho một máy chủ cần sử dụng các biến phiên PHP rất nhiều. Vì vậy, hãy chỉnh sửa tham số Hết giờ trong tệp này thành số tiền bạn cần. Điều này có thể thực hiện một số thử nghiệm với tất cả các trang web của bạn để xem giá trị quá thấp. Tuy nhiên, đây có thể là một ý tưởng tốt để không đặt nó cao hơn 300 trừ khi bạn gặp sự cố khi tải lên tệp lớn hoặc tải xuống tệp lớn. nhưng sẽ rất tệ cho một máy chủ cần sử dụng các biến phiên PHP rất nhiều. Vì vậy, hãy chỉnh sửa tham số Hết giờ trong tệp này thành số tiền bạn cần. Điều này có thể thực hiện một số thử nghiệm với tất cả các trang web của bạn để xem giá trị quá thấp. Tuy nhiên, đây có thể là một ý tưởng tốt để không đặt nó cao hơn 300 trừ khi bạn gặp sự cố khi tải lên tệp lớn hoặc tải xuống tệp lớn. nhưng sẽ rất tệ cho một máy chủ cần sử dụng các biến phiên PHP rất nhiều. Vì vậy, hãy chỉnh sửa tham số Hết giờ trong tệp này thành số tiền bạn cần. Điều này có thể thực hiện một số thử nghiệm với tất cả các trang web của bạn để xem giá trị quá thấp. Tuy nhiên, đây có thể là một ý tưởng tốt để không đặt nó cao hơn 300 trừ khi bạn gặp sự cố khi tải lên tệp lớn hoặc tải xuống tệp lớn.

  2. Bây giờ khởi động lại dịch vụ web Apache của bạn. Nếu bạn đã làm điều gì đó sai, Apache có thể sẽ cho bạn biết về nó ngay khi bạn bắt đầu lại và bạn có thể khắc phục nó.

    sudo dịch vụ apache2 khởi động lại
  1. Bây giờ lặp lại thủ thuật trình duyệt 10 tab mà bạn đã làm trước đây và xem liệu bạn có gặp phải lỗi cấu hình Apache trong nhật ký lỗi máy chủ web Apache không:
    đuôi sudo -f /var/log/apache2/error.log

... nhấn CTRL + C để thoát khỏi điều đó, nếu bạn muốn.

Tìm kiếm một khiếu nại về việc cần MaxRequestWorkers (và gần đây kể từ khi bạn khởi động lại máy chủ web). Nếu bạn thấy rằng ngay cả với cài đặt MaxRequestWorkers tối ưu, thì có khả năng bạn cần nhiều hỏa lực hơn cho các trang web hoặc ứng dụng web của mình. Hãy xem xét các tùy chọn sau:

  • Sử dụng CDN để tải xuống tệp lớn, hình ảnh và tập lệnh.
  • Sử dụng dịch vụ lưu trữ như CloudFlare hoặc các dịch vụ khác.
  • Làm lại chiến lược trang web hoặc ứng dụng web của bạn để sử dụng nhiều máy chủ web hoạt động như một "ứng dụng web" đằng sau bộ cân bằng tải.
  • Thêm RAM vào máy chủ, và do đó thực hiện lại phép tính này.

  1. Bây giờ máy chủ Apache đã được điều chỉnh, đó là loại đường cơ sở được điều chỉnh. Bạn sẽ cần kiểm tra nó trong vòng 2-3 tuần và tìm kiếm các vấn đề MaxRequestWorker trong nhật ký lỗi Apache. Từ đó, bạn có thể đưa ra quyết định về tối ưu hóa (xem bước 10). Bạn cũng có thể cài đặt Munin với apt trên Ubuntu và xem hiệu suất của Apache theo thời gian và vạch ra ý tưởng tăng trưởng trước khi bạn quyết định bạn cần làm bất cứ điều gì về lượng lưu lượng mà máy chủ web đang xử lý.

Trong khi các liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. Hãy
Jenny D nói rằng Rebstate Monica

@JennyD Điểm tốt! Tôi sẽ làm việc đó.
ServerChecker

@Moderator Tôi cần định dạng trợ giúp về câu trả lời này. Bước 7 được cho là tập tin conf với thụt lề. Bước 11 không được cho là thụt lề. Các lệnh mã bắt đầu bằng sudocần hiển thị dưới dạng mã, không phải như văn bản thông thường. Tôi đã làm theo các tài liệu về định dạng, nhưng vẫn còn đấu tranh ở đây.
ServerChecker

1
Tôi đã làm những gì tôi có thể - markdown thực sự không làm tốt danh sách hỗn hợp và mã, nhưng tôi nghĩ rằng tôi đã xoay sở để có được nó tốt hơn một chút.
Jenny D nói Phục hồi lại

đối với những người mới sử dụng centos như tôi: apache ps -lyU thay vì ps -ylC apache2
user1928596

3

Những gì bạn có thể tăng MaxRequestWorkers phụ thuộc vào lượng RAM mỗi quá trình httpd / apache của bạn chiếm bao nhiêu. Nếu mỗi cái chiếm tới 50 MB (chỉ cần chọn một số ngẫu nhiên), thì cứ 20 nhân viên yêu cầu bạn có sử dụng cùng một lúc (tức là kết nối đồng thời) sẽ chiếm 1GB. Vì vậy, trong ví dụ đó, bạn có thể có tối đa 8GB * 20 = 160 MaxRequestWorkers. Tuy nhiên, bạn không thể sử dụng hết RAM cho apache, bạn cần dành một số cho những thứ khác đang chạy trên đó. Ngoài ra, việc để lại một số RAM dự phòng có thể hữu ích cho hiệu năng vì HĐH sẽ sử dụng nó để lưu trữ mọi thứ và tăng tốc hiệu suất (mặc dù có thể không nên hết kết nối so với máy chủ nhanh hơn vì trang web sẽ xuất hiện chậm trong khi trang web sẽ xuất hiện chậm trình duyệt của người dùng chờ kết nối khả dụng nếu họ sử dụng hết).


Một cách tốt để hồ sơ này là gì? Tôi có thể nhập những lệnh nào để xem bao nhiêu RAM mỗi quá trình apache sử dụng khi tải? Chúng tôi cũng cần phòng RAM cho MySQL (một trang web WordPress) và các quy trình hệ thống bình thường.
ServerChecker

Xem có bao nhiêu tiến trình đang chạy và chạy freelệnh để có đường cơ sở bộ nhớ. Sau đó tăng số lượng tiến trình đang chạy bằng cách tăng MinSpareServers, khởi động lại apache, chạy freelại và làm toán. Kiểm tra moreofless.co.uk/apache-memory-usage để biết thêm chi tiết và giải thích.
g491

Bây giờ tôi đã học được rằng có một cách siêu nhanh để làm điều này. Nó được phác thảo trong liên kết cloudinservice.com trong câu trả lời của tôi dưới đây. Lệnh này là ap.sh mà ai đó đã tìm ra. Ngoài ra, tôi đã học được rằng MaxCl Client hiện đã được đổi tên thành MaxRequestWorkers trong Apache 2.4+.
ServerChecker
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.