Tham số chính để điều chỉnh việc sử dụng bộ nhớ của Apache sẽ là MaxClients
. Giá trị quá thấp và bạn sẽ hết các vị trí có sẵn để phục vụ các yêu cầu của khách hàng. Quá nhiều và bạn sẽ sử dụng hết RAM của mình và bắt đầu sử dụng không gian hoán đổi sẽ làm giảm hiệu suất (có thể là sự cố máy chủ).
Một cách điều chỉnh MaxClients
là quan sát việc sử dụng bộ nhớ của hệ thống và điều chỉnh cài đặt lên / xuống khi cần. Nếu máy chủ bắt đầu hoán đổi chỉnh sửa nó xuống. Nếu máy chủ có bộ nhớ trống, hãy đặt nó lên.
Bạn cũng có thể ước tính giá trị tối đa bằng cách xem mức sử dụng bộ nhớ của Apache. Bắt đầu top
và nhấn M
để sắp xếp các quá trình theo bộ nhớ. Bạn sẽ thấy một cái gì đó như:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Trừ các cột RES và SHR để có được mức sử dụng bộ nhớ gần đúng cho mỗi phiên bản Apache. Trong trường hợp này là khoảng 16 MB. Nếu tôi có 4GB RAM và muốn 3 GB trong số đó sẽ được sử dụng cho Apache, cài đặt MaxCl Client của tôi sẽ xuất hiện:
MaxClients = 3000/16 = 188
Vì vậy, trong trường hợp này, tôi có thể bắt đầu với giá trị 150-200 nhưng tôi sẽ xem mức sử dụng bộ nhớ và nếu nó bắt đầu gần với việc sử dụng trao đổi, tôi sẽ giảm MaxClents 10-20%. Cũng lưu ý rằng giá trị của 3GB chỉ là một ví dụ ngẫu nhiên. Trên các máy chủ chỉ chạy Apache, tôi có thể sử dụng gần như tất cả 4GB. Trong các trường hợp khác, tôi chỉ muốn 1 hoặc 2GB cho Apache lưu phần còn lại cho các ứng dụng khác, hệ thống hoặc bộ đệm.
Chỉnh sửa: Trả lời câu hỏi bổ sung
Nhìn chung, không có giá trị ma thuật nào của MaxClents hoặc các tham số cấu hình Apache khác sẽ khiến máy chủ của bạn đột ngột nhanh gấp đôi. Một số máy chủ sẽ xuất hiện để chạy tốt dù MaxCl Client là 10 hay 1000. Có hai trường hợp chính trong đó cài đặt MaxCl Client là "xấu":
- Quá thấp : Khi MaxCl Client quá thấp, bạn sẽ gặp phải tình huống tất cả các máy khách Apache đang được sử dụng và các kết nối mới đi vào hàng đợi chờ khách hàng tiếp theo sẵn sàng. Nếu bạn bật mod_status của Apache, bạn có thể có chế độ xem theo thời gian thực về số lượng khách hàng đang bận rộn tại bất kỳ thời điểm nào. Trạng thái này tương đối dễ chẩn đoán vì trang web sẽ trở nên chậm trong thời gian lưu lượng truy cập cao và tất cả các khách hàng có thể được quan sát thấy đang sử dụng.
- Quá cao : Khi MaxCl Client quá cao, bạn sẽ gặp phải trường hợp cạn kiệt tất cả RAM và bắt đầu sử dụng trao đổi. Khi điều này xảy ra, hiệu suất trang web của bạn sẽ giảm về cơ bản bằng 0 (xem xét sự khác biệt về tốc độ giữa RAM và đĩa). Trạng thái này có thể khó quan sát và chẩn đoán hơn nhiều vì máy chủ sẽ chạy tốt với MaxCl Client cao cho đến khi nó gặp phải lưu lượng truy cập tăng đột biến. Ví dụ: trên một trang web nhận được vài lượt truy cập mỗi giờ, tôi có thể đặt MaxCl Client thành 1000, vượt xa khả năng hỗ trợ của RAM, nhưng chưa bao giờ thấy sự cố do Apache chỉ cần sử dụng một hoặc hai máy khách mỗi lần. Tôi sẽ chỉ phát hiện ra vấn đề khi tôi tăng lưu lượng truy cập, tăng số lượng khách hàng được sử dụng đồng thời, cho đến khi RAM cạn kiệt và không gian trao đổi là cần thiết.
Mặc dù tôi không biết chi tiết về máy chủ, ứng dụng hoặc lưu lượng truy cập của mình nhưng tôi có thể đề xuất các giá trị cấu hình sau đây làm điểm bắt đầu. Hãy thử chúng, theo dõi tải và sử dụng của máy chủ và thay đổi cài đặt nếu cần.
- mod_status : Kích hoạt tính năng này để bạn có thể thấy cách sử dụng của Apache. Để có số liệu thống kê nâng cao hơn, hãy cài đặt ứng dụng giám sát như Zabbix / Nagios để bạn có thể theo dõi việc sử dụng máy chủ và các mẫu lưu lượng truy cập.
- MaxCl Client : Đặt thành giá trị 100-200. Tôi sẽ bắt đầu với giá trị thấp hơn nếu không chắc chắn và theo dõi việc sử dụng bộ nhớ / CPU / Apache. Đây sẽ là thông số chính để điều chỉnh.
- MaxRequestsPerChild : Điều này xác định khi nào máy khách / con Apache sẽ được khởi động lại. Không có giá trị sai (mặc dù các giá trị rất nhỏ có thể không hiệu quả) và nó sẽ phụ thuộc vào nội dung mà bạn phục vụ. Đối với nội dung động, giá trị khác không lớn (giả sử 1000) sẽ ngăn các quá trình httpd của bạn cuối cùng trở nên quá lớn.
- Các tham số khác : Mặc dù tôi chưa thực hiện đo điểm chuẩn kỹ lưỡng cho các tham số còn lại nhưng chúng sẽ có tác động tương đối nhỏ trừ khi bạn đặt chúng thành các giá trị rất thấp hoặc rất cao. Sử dụng mặc định sẽ tốt cho phần lớn các trang web. Xem tài liệu mô-đun Prefork hoặc Worker của Apache để biết mô tả đầy đủ về các tham số và được sử dụng trong mỗi mô-đun (không có điểm nào cố gắng điều chỉnh tham số bạn không sử dụng).
- Điểm chuẩn : Khi bạn điều chỉnh các tham số, tôi sẽ khuyên bạn nên sử dụng một công cụ đo điểm chuẩn như ab (ApacheBench) hoặc bao vây để có được số lượng định lượng về khả năng của máy chủ. Dựa vào cảm giác hoặc tệ hơn, xem nó có bị sập hay không, không phải là một phương pháp tốt để điều chỉnh các tham số của máy chủ web.