Điều chỉnh hiệu suất cho NGINX

NGINX nổi tiếng là một bộ cân bằng tải hiệu suất cao , bộ đệm và máy chủ web , cung cấp năng lượng cho hơn 40% các 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 để xem xét khi điều chỉnh một 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 vài cài đặt để điều chỉnh có lợi nhất cho người dùng. Có những cài đặt mà chúng tôi khuyên bạn chỉ nên thay đổi nếu bạn có hiểu biết sâu sắc về NGINX và Linux, hoặc theo chỉ dẫn của các 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 vấn đề này ở đâ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 để đạt 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

Một sự hiểu biết cơ bản về các khái niệm cấu trúc và kiến ​​trúc NGINX đượ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 và liên kết khác nhau đến tài liệu có liên quan.

Một nguyên tắc tốt để 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 nó trở về 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 với một cuộc thảo luận về điều chỉnh Linux, bởi 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 các nhân Linux hiện đại (2.6+) phù hợp với hầu hết các mục đích, nhưng thay đổi một số trong số chúng có thể có lợi. Kiểm tra nhật ký kernel cho các thông báo lỗi cho biết rằng cài đặt quá thấp và điều chỉnh nó theo khuyến cáo. Ở đâ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 từ việc điều chỉnh trong khối lượng công việc bình thường. Để biết chi tiết về việc đ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. Nếu bạn có tỷ lệ kết nối đến cao và bạn đang 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ể giúp ích.

  • net.core.somaxconn– Số lượng kết nối tối đa có thể được xếp hàng để NGINX chấp nhận. Mặc định thường rất thấp và thường được chấp nhận vì NGINX chấp nhận kết nối rất nhanh, nhưng có thể đáng để tăng nó nếu trang web của bạn gặp phải lưu lượng truy cập lớn. Nếu thông báo lỗi trong nhật ký kernel chỉ ra rằng giá trị quá nhỏ, hãy tăng nó cho đến khi lỗi dừng lại.Lưu ý: Nếu bạn đặt giá trị này thành giá trị lớn hơn 512, hãy thay đổi backlogtham số thành listenchỉ thị NGINX để khớp.
  • net.core.netdev_max_backlog– Tốc độ mà các gói được đệm bởi card mạng trước khi đưa vào CPU. 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 xem có lỗi liên quan đến cài đặt này không và tham khảo tài liệu về card mạng để được tư vấn về việc thay đổi nó.

Mô tả tập tin

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 mở, trong số những thứ khác. NGINX có thể sử dụng tối đa hai 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 cái khác cho kết nối với máy chủ proxy, 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ụ số lượng lớn 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 rộng của hệ thống cho các mô tả tệp
  • nofile– Giới hạn mô tả tệp người dùng, được đặt trong tệp /etc/security/limits.conf

Cổng phù du

Khi NGINX hoạt động như một proxy, mỗi kết nối đến một máy chủ ngược dòng sử dụng một cổng tạm thời hoặc phù du . 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 của các 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ác 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 chỉ thị 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 chỉ thị 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 quy trình worker, mỗi quy trình 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 quy trình worker và cách chúng xử lý các kết nối với các chỉ thị sau:

  • worker_processes– Số lượng tiến trình NGINX worker (mặc định là 1). Trong hầu hết các trường hợp, việc chạy một tiến trình worker 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 autođể đạt được điều đó. Đôi khi bạn có thể muốn tăng số lượng này, chẳng hạn như khi các tiến trình worker phải thực hiện rất nhiều I / O đĩa.
  • worker_connections– Số lượng kết nối tối đa mà mỗi quá trình công nhân có thể xử lý đồng thời. Mặc định là 512, nhưng hầu hết các hệ thống có đủ tài nguyên để hỗ trợ số lượng lớn hơn. Cài đặt thích 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 cố định

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ợ thủ tục cho cả máy khách và máy chủ ngược dòng. Các chỉ thị sau đây liên quan đến thủ tục khách hàng:

  • keepalive_requests– Số lượng yêu cầu khách hàng có thể thực hiện qua một kết nối duy nhất. Mặc định là 100, nhưng giá trị cao hơn nhiều có thể đặc biệt hữu ích để thử nghiệm với công cụ tạo tải, thường gửi một số lượng lớn yêu cầu từ một khách hàng.
  • keepalive_timeout – Bao lâu một kết nối nhàn rỗi vẫn mở.

Lệnh sau liên quan đến thủ tục ngược dòng:

  • keepalive– Số lượng kết nối tạm thời nhàn rỗi đến một máy chủ ngược dòng vẫn mở cho mỗi quy trình công nhân. Không có giá trị mặc định.

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

proxy_http_version 1.1;
proxy_set_header Connection "";

Ghi nhật ký truy cập

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à cho phép truy cập ‑ bộ đệm nhật ký. Với bộ đệm, thay vì thực hiện một thao tác ghi riêng cho từng mục nhật ký, NGINX sẽ đệ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.

Để cho phép truy cập buff bộ đệm nhật ký, bao gồm tham số cho lệnh ; NGINX ghi nội dung bộ đệm vào nhật ký khi bộ đệm đạt giá trị. Để NGINX ghi bộ đệm sau một khoảng thời gian xác định, bao gồm tham số. 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 sẽ không vừa với bộ đệm hoặc các mục trong bộ đệm tương ứng cũ hơn thời gian đã chỉ định. Các mục nhật ký cũng được viết khi một quá trình worker đang mở lại các tệp nhật ký của nó hoặc tắt. Để vô hiệu hóa ghi nhật ký truy cập, bao gồm tham số cho lệnh .buffer=sizeaccess_logsizeflush=timeoffaccess_log

Gửi file

Hệ thống của hệ điều hành sendfile()gọi các bản sao dữ liệu từ một bộ mô tả tệp này sang một bộ mô tả khác, thường đạt được bản sao bằng 0, 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 lệnh sendfiletrong httpngữ cảnh hoặc a serverhoặc locationngữ cảnh. NGINX sau đó có thể ghi nội dung được lưu vào bộ nhớ cache hoặc trên ổ cắm xuống ổ cắm mà không có bất kỳ bối cảnh nào chuyển sang không gian người dùng, khiến việc ghi cực kỳ nhanh và tiêu tốn ít chu kỳ CPU hơn. Tuy nhiên, lưu ý rằng vì dữ liệu được sao chép có sendfile()bỏ qua không gian người dùng, nó không chịu sự điều chỉnh của chuỗi xử lý NGINX thông thường và các bộ lọc thay đổi nội dung, chẳng hạn như gzip. Khi bối cảnh cấu hình bao gồm cả sendfilechỉ thị và chỉ thị kích hoạt bộ lọc thay đổi nội dung, NGINX sẽ tự động vô hiệu hóasendfile cho bối 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ể làm ả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:

  • limit_connvà limit_conn_zone– Giới hạn số lượng kết nối máy khách NGINX chấp nhận, ví dụ từ một địa chỉ IP duy nhất. Đặt chúng có thể giúp ngăn các khách hàng cá nhân mở quá nhiều kết nối và tiêu tốn nhiều hơn phần tài nguyên của họ.
  • limit_rate– Giới hạn tốc độ phản hồi được truyền đến một máy khách, trên mỗi kết nối (để các máy khách mở nhiều kết nối có thể tiêu thụ 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ụ thậm chí cao hơn cho tất cả các khách hàng.
  • limit_reqvà limit_req_zone– Giới hạn tỷ lệ yêu cầu đang được NGINX xử lý, có lợi ích tương tự như cài đặt limit_rate. Họ cũng có thể cải thiện bảo mật, đặc biệt đối với các trang đăng nhập, bằng cách giới hạn tỷ lệ yêu cầu ở mức giá trị hợp lý cho người dùng nhưng quá chậm đối với các chương trình cố gắng áp đảo ứng dụng của bạn bằng các yêu cầu (chẳng hạn như bot trong cuộc tấn công DDoS ).
  • max_connstham số cho lệnh servertrong upstreamkhối cấu hình – Đặt số lượng kết nối đồng thời tối đa được máy chủ chấp nhận trong một nhóm ngược dòng. Áp đặt một giới hạn có thể giúp ngăn chặ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.
  • queue(NGINX Plus) – Tạo một hàng đợi trong đó các yêu cầu được đặt khi tất cả các máy chủ có sẵn trong nhóm ngược dòng đã đạt đến max_connsgiới hạn của chúng . 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 họ chờ (60 giây theo mặc định) trước khi trả về lỗi. Yêu cầu không được xếp hàng nếu bạn bỏ qua lệnh 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ự nằm trong 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 bật bộ đệm ẩn trên một phiên bản NGINX đang tải cân bằng một bộ 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 khách hàng đồng thời giảm tải đáng kể cho các 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 trình bày ở đây. Xem Hướng dẫn quản trị NGINX Plus .

Nén

Nén các phản hồi gửi đến máy khách có thể 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ì 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ả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 kích hoạt 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 quản trị NGINX Plus .

Nguồn : https://www.nginx.com/blog/tuning-nginx/

Xem thêm cái bài viết về NGINX tại đây.

Similar Articles

Comments

Instagram

Most Popular

Điều chỉnh hiệu suất cho NGINX

NGINX nổi tiếng là một bộ cân bằng tải hiệu suất cao , bộ đệm và máy chủ web , cung cấp năng lượng cho hơn 40% các trang web...

Cách sử dụng Screen Linux

Bạn đã bao giờ phải đối mặt với tình huống bạn thực hiện một tác vụ dài hạn trên một máy từ...

Chrome Development Tools – Tips And Tricks

Google Chrome là trình duyệt web phổ biến nhất được sử dụng hiện nay, trong năm 2019 nó chiếm tới 63% lượng...