Thiết lập PHP-FPM: sử dụng pm tĩnh để có hiệu suất tối đa

Thiết lập PHP-FPM: sử dụng pm tĩnh để có hiệu suất tối đa

Phiên bản chưa chỉnh sửa của bài viết này ban đầu được xuất bản trên haydenjames.io và xuất bản ở đây với sự cho phép của cô ấy tác giả.

Tóm lại, tôi sẽ cho bạn biết cách định cấu hình PHP-FPM tốt nhất để tăng thông lượng, giảm độ trễ và sử dụng CPU và bộ nhớ một cách nhất quán hơn. Theo mặc định, dòng PM (trình quản lý quy trình) trong PHP-FPM là năng động, và nếu bạn không có đủ bộ nhớ thì tốt hơn nên cài đặt ondemand. Hãy so sánh 2 tùy chọn điều khiển dựa trên tài liệu php.net và xem tùy chọn yêu thích của tôi khác với chúng như thế nào tĩnh chiều đối với lưu lượng truy cập lớn:

chiều = năng động — số lượng tiến trình con được cấu hình động dựa trên các chỉ thị sau: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
chiều = theo yêu cầu - các quy trình được tạo theo yêu cầu (trái ngược với tạo động, khi pm.start_servers được khởi chạy khi dịch vụ khởi động).
chiều = tĩnh - số lượng tiến trình con được cố định và được biểu thị bằng tham số chiều.max_children.

Để biết chi tiết, xem danh sách đầy đủ các chỉ thị toàn cầu php-fpm.conf.

Điểm tương đồng giữa trình quản lý quy trình PHP-FPM và bộ điều khiển tần số CPU

Điều này có vẻ lạc quan, nhưng tôi sẽ liên kết điều này với chủ đề về cấu hình PHP-FPM. Ai chưa từng gặp phải tình trạng bộ xử lý bị chậm ít nhất một lần - trên máy tính xách tay, máy ảo hoặc máy chủ chuyên dụng? Ghi nhớ thang đo tần số CPU? Các tùy chọn này có sẵn cho nix và Windows có thể cải thiện hiệu năng và khả năng phản hồi của hệ thống bằng cách thay đổi cài đặt điều tiết bộ xử lý từ ondemand trên hiệu suất*. Lần này, hãy so sánh các mô tả và xem xét những điểm tương đồng:

thống đốc=theo yêu cầu — chia tỷ lệ động của tần số bộ xử lý tùy thuộc vào tải hiện tại. Nhanh chóng tăng đến tần số tối đa và sau đó giảm xuống khi thời gian không hoạt động tăng lên.
thống đốc=bảo thủ= chia tần số động tùy thuộc vào tải hiện tại. Tăng giảm tần số mượt mà hơn so với ondemand.
Thống đốc = hiệu suất - tần số luôn lớn nhất.

Để biết chi tiết, xem danh sách đầy đủ các thông số điều chỉnh tần số bộ xử lý.

Bạn có thấy điểm tương đồng không? Tôi muốn đưa ra sự so sánh này để thuyết phục bạn rằng tốt nhất nên sử dụng chiều tĩnh cho PHP-FPM.

Đối với tham số bộ điều chỉnh bộ xử lý hiệu suất giúp tăng hiệu suất một cách an toàn vì nó gần như phụ thuộc hoàn toàn vào giới hạn CPU của máy chủ. Tất nhiên, ngoài ra còn có các yếu tố như nhiệt độ, sạc pin (trong máy tính xách tay) và các tác dụng phụ khác của việc bộ xử lý liên tục chạy ở mức 100%. Cài đặt hiệu suất đảm bảo hiệu suất xử lý nhanh nhất. Đọc, ví dụ, về tham số Force_turbo trong Raspberry Pimà bảng RPi sẽ sử dụng bộ điều chỉnh hiệu suất, trong đó sự cải thiện hiệu suất sẽ rõ rệt hơn do tốc độ xung nhịp CPU thấp.

Sử dụng pm static để đạt được hiệu suất máy chủ tối đa

Tùy chọn PHP-FPM chiều tĩnh phần lớn phụ thuộc vào bộ nhớ trống trên máy chủ. Nếu bộ nhớ thấp thì nên chọn ondemand hoặc năng động. Mặt khác, nếu bạn có bộ nhớ, bạn có thể tránh chi phí quản lý quy trình PHP bằng cách đặt pm tĩnh đến dung lượng máy chủ tối đa. Nói cách khác, nếu mọi thứ được tính toán tốt, bạn cần thiết lập chiều.static tới khối lượng tối đa của các quy trình PHP-FPM có thể được thực thi, mà không tạo ra vấn đề với bộ nhớ hoặc bộ nhớ đệm thấp. Nhưng không cao đến mức áp đảo các bộ xử lý và tích lũy một loạt các hoạt động PHP-FPM đang chờ được thực thi.

Thiết lập PHP-FPM: sử dụng pm tĩnh để có hiệu suất tối đa

Trong ảnh chụp màn hình ở trên, máy chủ có pm = tĩnh và pm.max_children = 100, và phần này chiếm khoảng 10 GB trong số 32 GB có sẵn. Hãy chú ý đến các cột được đánh dấu, mọi thứ đều rõ ràng ở đây. Trong ảnh chụp màn hình này có khoảng 200 người dùng đang hoạt động (hơn 60 giây) trong Google Analytics. Ở cấp độ này, khoảng 70% tiến trình con PHP-FPM vẫn không hoạt động. Điều này có nghĩa là PHP-FPM luôn được đặt ở lượng tài nguyên máy chủ tối đa bất kể lưu lượng truy cập hiện tại. Một tiến trình nhàn rỗi chờ lưu lượng truy cập đạt đỉnh và phản hồi ngay lập tức. Bạn không cần phải đợi cho đến khi pm sẽ tạo các tiến trình con và sau đó chấm dứt chúng khi hết thời gian chiều.process_idle_timeout. Tôi đặt giá trị rất cao chiều.max_requestsvì đây là máy chủ đang hoạt động không bị rò rỉ bộ nhớ trong PHP. Bạn có thể cài đặt chiều.max_requests = 0 bằng static nếu bạn hoàn toàn tin tưởng vào các tập lệnh PHP hiện tại và tương lai. Nhưng tốt hơn là nên chạy lại các tập lệnh theo thời gian. Đặt số lượng lớn yêu cầu, vì chúng tôi muốn tránh chi phí chiều không cần thiết. Ví dụ, ít nhất chiều.max_requests = 1000 - tùy theo số lượng chiều.max_children và số lượng yêu cầu mỗi giây.

Ảnh chụp màn hình hiển thị lệnh Linux hàng đầu, được lọc theo bạn (người dùng) và tên người dùng PHP-FPM. Chỉ có khoảng 50 quy trình đầu tiên được hiển thị (tôi không đếm chính xác), nhưng về cơ bản, top hiển thị số liệu thống kê hàng đầu phù hợp với cửa sổ đầu cuối. Trong trường hợp này được sắp xếp theo % CPU (%CPU). Để xem tất cả 100 quy trình PHP-FPM, hãy chạy lệnh:

top -bn1 | grep php-fpm

Khi nào nên sử dụng chiều theo yêu cầu và động

Nếu bạn sử dụng chiều năng động, xảy ra lỗi như thế này:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

Hãy thử thay đổi tham số, lỗi sẽ không biến mất, như được mô tả trong bài đăng này trên Serverfault. Trong trường hợp này, giá trị pm.min quá nhỏ và vì lưu lượng truy cập web thay đổi rất nhiều và có các đỉnh cao và thung lũng sâu nên rất khó điều chỉnh chiều một cách thỏa đáng. năng động. Thông thường chiều được sử dụng ondemand, như đã tư vấn trong cùng một bài viết. Nhưng điều này còn tệ hơn nữa, bởi vì ondemand chấm dứt các quy trình nhàn rỗi về XNUMX khi có ít hoặc không có lưu lượng truy cập và bạn vẫn sẽ phải chịu chi phí thay đổi lưu lượng. Tất nhiên, trừ khi bạn đặt thời gian chờ đợi rất lớn. Và sau đó tốt hơn là sử dụng chiều.static + số lượng cao chiều.max_requests.

PM năng động và đặc biệt là ondemand có thể hữu ích nếu bạn có nhiều nhóm PHP-FPM. Ví dụ: bạn lưu trữ nhiều tài khoản cPanel hoặc nhiều trang web trong các nhóm khác nhau. Tôi có một máy chủ với hơn 100 tài khoản cpanel và khoảng 200 tên miền và pm.static hoặc thậm chí động sẽ không cứu được tôi. Tất cả những gì bạn cần ở đây là ondemandxét cho cùng thì hơn XNUMX/XNUMX số trang web nhận được rất ít hoặc không có lưu lượng truy cập và với ondemand tất cả các tiến trình con sẽ bị loại bỏ, điều này sẽ giúp chúng ta tiết kiệm rất nhiều bộ nhớ! May mắn thay, các nhà phát triển cPanel đã nhận thấy điều này và đặt giá trị thành mặc định ondemand. Trước đây, khi mặc định là năng động, PHP-FPM hoàn toàn không phù hợp với các máy chủ chia sẻ bận rộn. Nhiều người đã sử dụng suPHP, bởi vì chiều năng động tiêu thụ bộ nhớ ngay cả với nhóm nhàn rỗi và tài khoản cPanel PHP-FPM. Rất có thể, nếu lưu lượng truy cập tốt, bạn sẽ không được lưu trữ trên máy chủ có số lượng lớn nhóm PHP-FPM (lưu trữ chia sẻ).

Kết luận

Nếu bạn đang sử dụng PHP-FPM và lưu lượng truy cập của bạn lớn, các trình quản lý quy trình ondemand и năng động đối với PHP-FPM sẽ bị giới hạn thông lượng do chi phí vốn có của chúng. Hiểu hệ thống của bạn và định cấu hình các quy trình PHP-FPM theo dung lượng máy chủ tối đa. Tập đầu tiên chiều.max_children tùy thuộc vào mức sử dụng chiều tối đa năng động hoặc ondemand, sau đó tăng giá trị này lên mức mà bộ nhớ và bộ xử lý sẽ hoạt động mà không bị quá tải. Bạn sẽ nhận thấy điều đó với chiều tĩnh, vì bạn có mọi thứ trong bộ nhớ nên lưu lượng truy cập tăng đột biến sẽ khiến CPU ít tăng đột biến hơn theo thời gian và mức tải trung bình của máy chủ và CPU sẽ cân bằng. Kích thước quy trình PHP-FPM trung bình phụ thuộc vào máy chủ web và yêu cầu cấu hình thủ công, do đó, nhiều trình quản lý quy trình tự động hơn sẽ năng động и ondemand - phổ biến hơn. Tôi hy vọng bài viết này hữu ích.

CẬP NHẬT Đã thêm biểu đồ điểm chuẩn ab. Nếu các quy trình PHP-FPM nằm trong bộ nhớ, hiệu suất sẽ tăng lên nhưng phải trả giá bằng mức tiêu thụ bộ nhớ khi chúng ngồi và chờ đợi. Hãy tìm ra lựa chọn tốt nhất cho mình.

Thiết lập PHP-FPM: sử dụng pm tĩnh để có hiệu suất tối đa

Nguồn: www.habr.com

Thêm một lời nhận xét