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.
Tạm thời dừng dịch vụ web Apache bằng lệnh sau:
dịch vụ sudo apache2 dừng
- Đợ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.
- Bắt đầu máy chủ web Apache.
dịch vụ sudo apache2 bắt đầu
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.
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.
- 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.
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.
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
- 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.
- 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ý.