Php-fpm hồ bơi cpu cao

NGINX nổi tiếng là bộ cân bằng tải, bộ đệm và máy chủ web hiệu suất cao, cung cấp năng lượng cho hơn 40% trang web bận rộn nhất trên thế giới. Đối với hầu hết các trường hợp sử dụng, cài đặt NGINX và Linux mặc định hoạt động tốt, nhưng để đạt được hiệu suất tối ưu đôi khi cần một chút điều chỉnh. Bài đăng trên blog này thảo luận về một số cài đặt NGINX và Linux cần xem xét khi điều chỉnh hệ thống

Bạn có thể điều chỉnh hầu hết mọi cài đặt, nhưng bài đăng này tập trung vào một số cài đặt mà việc điều chỉnh mang lại lợi ích cho người dùng nhất. Có những cài đặt mà chúng tôi khuyên bạn chỉ nên thay đổi nếu bạn hiểu sâu về NGINX và Linux hoặc theo chỉ dẫn của nhóm Hỗ trợ hoặc Dịch vụ chuyên nghiệp của chúng tôi và chúng tôi không đề cập đến những cài đặt đó ở đây. Nhóm Dịch vụ Chuyên nghiệp đã làm việc với một số trang web bận rộn nhất thế giới để điều chỉnh NGINX nhằm đạt được mức hiệu suất tối đa và sẵn sàng làm việc với bạn để tận dụng tối đa việc triển khai NGINX hoặc NGINX Plus của bạn

Giới thiệu

Hiểu biết cơ bản về kiến ​​trúc NGINX và các khái niệm cấu hình được giả định. Bài đăng này không cố gắng sao chép tài liệu NGINX, nhưng cung cấp tổng quan về các tùy chọn khác nhau và liên kết đến tài liệu liên quan

Một nguyên tắc tốt cần tuân theo khi điều chỉnh là thay đổi một cài đặt tại một thời điểm và đặt cài đặt đó trở lại giá trị mặc định nếu thay đổi không cải thiện hiệu suất

Chúng tôi bắt đầu thảo luận về điều chỉnh Linux, vì giá trị của một số cài đặt hệ điều hành xác định cách bạn điều chỉnh cấu hình NGINX của mình

Điều chỉnh cấu hình Linux của bạn

Các cài đặt trong nhân Linux hiện đại (2. 6+) phù hợp với hầu hết các mục đích, nhưng việc thay đổi một số mục đích có thể mang lại lợi ích. Kiểm tra nhật ký hạt nhân để biết các thông báo lỗi cho biết cài đặt quá thấp và điều chỉnh cài đặt đó theo lời khuyên. Ở đây, chúng tôi chỉ đề cập đến những cài đặt có nhiều khả năng được hưởng lợi nhất từ ​​việc điều chỉnh theo khối lượng công việc bình thường. Để biết chi tiết về cách điều chỉnh các cài đặt này, vui lòng tham khảo tài liệu Linux của bạn

Hàng đợi tồn đọng

Các cài đặt sau liên quan đến các kết nối và cách chúng được xếp hàng đợi. Nếu bạn có tỷ lệ kết nối đến cao và bạn đang nhận được mức hiệu suất không đồng đều (ví dụ: một số kết nối dường như bị đình trệ), thì việc thay đổi các cài đặt này có thể hữu ích

  • net.core.somaxconn – Số lượng kết nối tối đa có thể xếp hàng chờ NGINX chấp nhận. Giá trị mặc định thường rất thấp và điều đó thường chấp nhận được vì NGINX chấp nhận các kết nối rất nhanh, nhưng có thể đáng để tăng giá trị này nếu trang web của bạn có lưu lượng truy cập lớn. Nếu thông báo lỗi trong nhật ký hạt nhân cho biết giá trị quá nhỏ, hãy tăng giá trị đó cho đến khi hết lỗi

    Ghi chú. Nếu bạn đặt giá trị này lớn hơn 512, hãy thay đổi tham số backlog thành lệnh NGINX listen để khớp

  • net.core.netdev_max_backlog – Tốc độ mà các gói được lưu vào bộ đệm của card mạng trước khi chuyển giao cho CPU. Việc tăng giá trị có thể cải thiện hiệu suất trên các máy có lượng băng thông lớn. Kiểm tra nhật ký kernel để biết các lỗi liên quan đến cài đặt này và tham khảo tài liệu về card mạng để được tư vấn về cách thay đổi nó

Bộ mô tả tệp

Bộ mô tả tệp là tài nguyên hệ điều hành được sử dụng để thể hiện các kết nối và tệp đang mở, trong số những thứ khác. NGINX có thể sử dụng tối đa hai bộ mô tả tệp cho mỗi kết nối. Ví dụ: nếu NGINX đang ủy quyền, nó thường sử dụng một bộ mô tả tệp cho kết nối máy khách và một bộ mô tả tệp khác cho kết nối đến máy chủ được ủy quyền, mặc dù tỷ lệ này thấp hơn nhiều nếu sử dụng các thủ tục HTTP. Đối với hệ thống phục vụ nhiều kết nối, có thể cần phải điều chỉnh các cài đặt sau

  • sys.fs.file-max – Giới hạn trên toàn hệ thống đối với bộ mô tả tệp
  • nofile – Giới hạn bộ mô tả tệp người dùng, được đặt trong /etc/security/limits. tập tin conf

Cổng phù du

Khi NGINX hoạt động như một proxy, mỗi kết nối đến máy chủ ngược dòng sẽ sử dụng một cổng tạm thời hoặc tạm thời. Bạn có thể muốn thay đổi cài đặt này

  • net.ipv4.ip_local_port_range – Bắt đầu và kết thúc phạm vi giá trị cổng. Nếu bạn thấy rằng bạn sắp hết cổng, hãy tăng phạm vi. Một cài đặt phổ biến là cổng 1024 đến 65000

Điều chỉnh cấu hình NGINX của bạn

Sau đây là một số chỉ thị NGINX có thể ảnh hưởng đến hiệu suất. Như đã nêu ở trên, chúng tôi chỉ thảo luận về các lệnh an toàn để bạn tự điều chỉnh. Chúng tôi khuyên bạn không nên thay đổi cài đặt của các lệnh khác mà không có hướng dẫn từ nhóm NGINX

quy trình công nhân

NGINX có thể chạy nhiều worker process, mỗi worker có khả năng xử lý một số lượng lớn các kết nối đồng thời. Bạn có thể kiểm soát số lượng worker process và cách chúng xử lý các kết nối bằng các lệnh sau

  • worker_processes – Số lượng quy trình công nhân NGINX (mặc định là 1). Trong hầu hết các trường hợp, việc chạy một worker process trên mỗi lõi CPU hoạt động tốt và chúng tôi khuyên bạn nên đặt lệnh này thành auto để đạt được điều đó. Đôi khi bạn có thể muốn tăng con số này, chẳng hạn như khi worker process phải thực hiện nhiều thao tác I/O trên đĩa
  • net.core.somaxconn0 – Số lượng kết nối tối đa mà mỗi worker process có thể xử lý đồng thời. Giá trị mặc định là 512, nhưng hầu hết các hệ thống đều có đủ tài nguyên để hỗ trợ số lượng lớn hơn. Cài đặt phù hợp phụ thuộc vào kích thước của máy chủ và tính chất của lưu lượng truy cập và có thể được phát hiện thông qua thử nghiệm

Kết nối Keepalive

Các kết nối cố định có thể có tác động lớn đến hiệu suất bằng cách giảm chi phí CPU và mạng cần thiết để mở và đóng các kết nối. NGINX chấm dứt tất cả các kết nối máy khách và tạo các kết nối riêng biệt và độc lập với các máy chủ ngược dòng. NGINX hỗ trợ keepalives cho cả máy khách và máy chủ ngược dòng. Các chỉ thị sau đây liên quan đến tài sản lưu giữ của khách hàng

  • net.core.somaxconn1 – Số lượng yêu cầu mà khách hàng có thể thực hiện qua một kết nối cố định duy nhất. Giá trị mặc định là 100, nhưng giá trị cao hơn nhiều có thể đặc biệt hữu ích khi thử nghiệm bằng công cụ tạo tải, công cụ này thường gửi một số lượng lớn yêu cầu từ một ứng dụng
  • net.core.somaxconn2 – Kết nối keepalive nhàn rỗi vẫn mở trong bao lâu

Chỉ thị sau đây liên quan đến các thủ tục ngược dòng

  • net.core.somaxconn3 – Số lượng kết nối keepalive nhàn rỗi đến máy chủ ngược dòng vẫn mở cho mỗi worker process. Không có giá trị mặc định

Để kích hoạt các kết nối cố định tới các máy chủ ngược dòng, bạn cũng phải bao gồm các lệnh sau trong cấu hình

proxy_http_version 1.1;
proxy_set_header Connection "";

Ghi nhật ký truy cập

Việc ghi nhật ký mọi yêu cầu tiêu tốn cả chu kỳ CPU và I/O và một cách để giảm tác động là bật bộ đệm nhật ký truy cập. Với bộ đệm, thay vì thực hiện thao tác ghi riêng cho từng mục nhật ký, NGINX đệm một loạt các mục và ghi chúng vào tệp cùng nhau trong một thao tác

Để bật bộ đệm nhật ký truy cập, hãy đưa tham số net.core.somaxconn4 vào chỉ thị net.core.somaxconn5; . Để NGINX ghi bộ đệm sau một khoảng thời gian xác định, hãy bao gồm tham số net.core.somaxconn7. Khi cả hai tham số được đặt, NGINX ghi các mục vào tệp nhật ký khi mục nhật ký tiếp theo không vừa với bộ đệm hoặc các mục trong bộ đệm cũ hơn thời gian đã chỉ định, tương ứng. Các mục nhật ký cũng được ghi khi một worker process đang mở lại các tệp nhật ký của nó hoặc tắt. Để vô hiệu hóa hoàn toàn việc ghi nhật ký truy cập, hãy đưa tham số net.core.somaxconn8 vào chỉ thị net.core.somaxconn9

Gửi file

Lệnh gọi hệ thống backlog0 của hệ điều hành sao chép dữ liệu từ bộ mô tả tệp này sang bộ mô tả tệp khác, thường đạt được bản sao bằng 0, điều này có thể tăng tốc độ truyền dữ liệu TCP. Để cho phép NGINX sử dụng nó, hãy bao gồm chỉ thị backlog1 trong ngữ cảnh backlog2 hoặc ngữ cảnh backlog3 hoặc backlog4. Sau đó, NGINX có thể ghi nội dung được lưu trong bộ nhớ cache hoặc trên đĩa xuống một ổ cắm mà không có bất kỳ ngữ cảnh nào chuyển sang không gian người dùng, giúp quá trình ghi cực kỳ nhanh và tiêu tốn ít chu kỳ CPU hơn. Tuy nhiên, xin lưu ý rằng vì dữ liệu được sao chép bằng backlog0 bỏ qua không gian người dùng, nên nó không phải tuân theo chuỗi xử lý NGINX thông thường và các bộ lọc làm thay đổi nội dung, chẳng hạn như backlog6. Khi ngữ cảnh cấu hình bao gồm cả chỉ thị backlog7 và các chỉ thị kích hoạt bộ lọc thay đổi nội dung, NGINX sẽ tự động vô hiệu hóa backlog7 cho ngữ cảnh đó

Hạn mức

Bạn có thể đặt các giới hạn khác nhau giúp ngăn khách hàng tiêu thụ quá nhiều tài nguyên, điều này có thể ảnh hưởng xấu đến hiệu suất của hệ thống cũng như bảo mật và trải nghiệm người dùng. Sau đây là một số chỉ thị liên quan

  • backlog9 và listen0 – Giới hạn số lượng kết nối máy khách mà NGINX chấp nhận, ví dụ từ một địa chỉ IP. Việc đặt chúng có thể giúp ngăn khách hàng cá nhân mở quá nhiều kết nối và tiêu thụ nhiều hơn phần tài nguyên của họ
  • listen1 – Giới hạn tốc độ truyền phản hồi tới máy khách trên mỗi kết nối (để máy khách mở nhiều kết nối có thể sử dụng lượng băng thông này cho mỗi kết nối). Đặt giới hạn có thể ngăn hệ thống bị quá tải bởi một số khách hàng nhất định, đảm bảo chất lượng dịch vụ đồng đều hơn cho tất cả khách hàng
  • listen2 và listen3 – Giới hạn tỷ lệ yêu cầu được xử lý bởi NGINX, điều này có cùng lợi ích như cài đặt listen1. Chúng cũng có thể cải thiện tính bảo mật, đặc biệt là đối với các trang đăng nhập, bằng cách giới hạn tốc độ yêu cầu ở một giá trị hợp lý đối với người dùng nhưng lại quá chậm đối với các chương trình đang cố áp đảo ứng dụng của bạn bằng các yêu cầu (chẳng hạn như bot trong một cuộc tấn công DDoS)
  • Tham số listen5 cho chỉ thị backlog3 trong khối cấu hình listen7 – Đặt số lượng kết nối đồng thời tối đa được máy chủ chấp nhận trong nhóm ngược dòng. Đặt giới hạn có thể giúp ngăn các máy chủ ngược dòng bị quá tải. Đặt giá trị thành 0 (không, mặc định) có nghĩa là không có giới hạn
  • listen8 (NGINX Plus) – Tạo hàng đợi trong đó các yêu cầu được đặt khi tất cả các máy chủ khả dụng trong nhóm ngược dòng đã đạt đến giới hạn listen5. Lệnh này đặt số lượng yêu cầu tối đa trong hàng đợi và, tùy chọn, thời gian tối đa chúng đợi (60 giây theo mặc định) trước khi trả về lỗi. Các yêu cầu không được xếp hàng đợi nếu bạn bỏ qua chỉ thị này

Bộ nhớ đệm và nén có thể cải thiện hiệu suất

Một số tính năng bổ sung của NGINX có thể được sử dụng để tăng hiệu suất của ứng dụng web không thực sự thuộc tiêu đề điều chỉnh, nhưng đáng được đề cập vì tác động của chúng có thể là đáng kể. Chúng bao gồm bộ nhớ đệm và nén

Bộ nhớ đệm

Bằng cách kích hoạt bộ nhớ đệm trên phiên bản NGINX đang cân bằng tải cho một nhóm máy chủ ứng dụng hoặc web, bạn có thể cải thiện đáng kể thời gian phản hồi cho máy khách đồng thời giảm tải đáng kể cho máy chủ phụ trợ. Bộ nhớ đệm là một chủ đề theo đúng nghĩa của nó và chúng tôi sẽ không cố gắng đề cập đến nó ở đây. Xem Hướng dẫn dành cho quản trị viên NGINX Plus

Nén

Việc nén các phản hồi được gửi tới máy khách có thể làm giảm đáng kể kích thước của chúng, vì vậy chúng sử dụng ít băng thông mạng hơn. Tuy nhiên, vì việc nén dữ liệu sẽ tiêu tốn tài nguyên CPU, nên nó hữu ích nhất khi thực sự đáng giá để giảm mức sử dụng băng thông. Điều quan trọng cần lưu ý là bạn không nên bật tính năng nén cho các đối tượng đã được nén, chẳng hạn như các tệp JPEG. Để biết thêm thông tin, hãy xem Hướng dẫn dành cho quản trị viên NGINX Plus