Tôi nên làm gì nếu máy chủ Nginx có tải CPU cao và sử dụng bộ nhớ xử lý?

Bạn có đột nhiên phát hiện ra rằng mức sử dụng CPU của Nginx đã tăng vọt tại nơi làm việc không? Tệ hơn nữa, nhiều quy trình công nhân của Nginx đang tiêu tốn tài nguyên một cách điên cuồng mỗi khi tôi xem xét các quy trình đó.

Nhìn thấy cảnh này, đầu bạn nóng bừng, không khỏi hét lên: "Trời ơi, server sắp nổ tung à?" Đừng lo lắng, điều này không có nghĩa là máy chủ của bạn sắp "xong" đâu! nhưng Nginx Chúng tôi cần bạn thực hiện tối ưu hóa toàn diện!

Phân tích nguyên nhân tải Nginx quá mức

Tôi nên làm gì nếu máy chủ Nginx có tải CPU cao và sử dụng bộ nhớ xử lý?

Đầu tiên, chúng ta phải tìm hiểu,Tại sao Nginx đột nhiên trở nên "cạn kiệt"?Có rất nhiều nguyên nhân dẫn đến vấn đề, đừng ngại, hãy cùng nhau tìm hiểu dưới đây.

1. Cấu hình không hợp lý

Trong tệp cấu hình Nginx, điểm quan trọng nhất là worker_processes. Tham số này xác định số lượng tiến trình được bắt đầu bởi Nginx.

  • Nếu bạn định cấu hình quá ít quy trình công nhân, tải CPU sẽ tăng vọt; nếu bạn định cấu hình quá nhiều, sẽ không đủ bộ nhớ.
  • Bạn phải tìm một điểm cân bằng, ví dụ,Đặt worker_processes gấp 1 đến 2 lần số lõi CPU.
  • Nếu bạn có 4 lõi thì hãy thử worker_processes 4 Hoặc đặt trực tiếp thành auto.

2. Số lượt truy cập tăng đột biến

Đôi khi, tải của Nginx đột ngột tăng đột biến không phải do bạn mắc lỗi mà do số lượt truy cập quá cao.Các yêu cầu truy cập đồng thời cao sẽ khiến quy trình Nginx của nhân viên bị quá tải., mọi tiến trình đều bị quá tải, CPU và bộ nhớ cũng đầy. Lúc này, bạn có thể cần phải cải thiện tài nguyên máy chủ, chẳng hạn như tăng số lượng lõi CPU hoặc tăng bộ nhớ. Tất nhiên, đây cũng là một lời nhắc nhở: đừng quên xem xét việc giảm tải CDN hoặc cân bằng tải.

3. Gặp phải các cuộc tấn công độc hại

Việc trở nên "rất phổ biến" trên Internet không phải lúc nào cũng là điều tốt. Các cuộc tấn công độc hại có thể nhắm vào bạn bất cứ lúc nào. Nếu bạn nhận thấy mức sử dụng CPU cao bất thường và nguồn IP được yêu cầu đáng ngờ thì rất có thể trang web của bạn đang bị tấn công DDoS. Vào lúc này,Bạn cần triển khai tường lửa hoặc giới hạn tần suất truy cập ngay lập tức, chẳng hạn như sử dụng mô-đun giới hạn hiện tại đi kèm với Nginx hoặc thiết lập danh sách đen IP.

Làm cách nào để giải quyết vấn đề sử dụng bộ nhớ cao của quy trình Nginx?

Vậy câu hỏi đặt ra là tại sao quy trình công nhân Nginx lại chiếm nhiều tài nguyên như vậy? Chúng ta phải bắt đầu với việc cấu hình và tối ưu hóa nó từng bước một.

Phương pháp cấu hình

  1. Mở tệp cấu hình Nginx: Thông thường, file cấu hình chính của Nginx nằm ở /etc/nginx/nginx.conf.

  2. Thiết lập worker_processes: Tìm thấy trong tập tin cấu hình events khối, cài đặt worker_processes giá trị. nếu không events khối, bạn cần tạo một khối.

    nginx
    events {
    worker_connections 1024;
    use epoll;  # 或者适用于操作系统的其他事件模型
    }

1. Đặt đúng worker_connections

nginx worker_connections Tham số xác định số lượng kết nối tối đa mà mỗi quy trình công nhân có thể xử lý. Nếu quá nhỏ, nó sẽ ảnh hưởng đến hiệu suất xử lý đồng thời; nếu quá lớn, nó có thể tiêu tốn quá nhiều tài nguyên.

Làm thế nào để tính toán giá trị phù hợp?

Giả sử bạn có CPU 4 nhân và RAM 16GB, điểm khởi đầu an toàn là worker_connections 4096.

Nhưng nếu trang web của bạn có nhiều lưu lượng truy cập, hãy cân nhắc tăng giá trị này lên 8192 để đảm bảo rằng mỗi quy trình có thể xử lý đủ yêu cầu.

events {
    worker_connections 8192;
}

Bằng cách này, khả năng xử lý của Nginx sẽ được cải thiện rất nhiều.

2. Điều chỉnh keepalive_timeout

Một tham số quan trọng khác để Nginx xử lý các yêu cầu là keepalive_timeout.

Cài đặt này xác định thời gian kết nối của máy khách với máy chủ có thể được duy trì.

Nếu đặt quá lâu sẽ chiếm quá nhiều tài nguyên kết nối..

Bạn có thể thử keepalive_timeout Đặt thành 15 giây để duy trì kết nối và giải phóng tài nguyên.

keepalive_timeout 15;

3. Tối ưu hóa giới hạn mô tả tập tin

Theo mặc định,Linux Hệ thống có giới hạn về số lượng bộ mô tả tệp có thể được mở bởi mỗi quy trình.

Nếu Nginx cần xử lý một số lượng lớn tệp (chẳng hạn như tài nguyên tĩnh), bạn có thể thấy lỗi từ Nginx, nhắc "too many open files".

bạn có thể vượt qua worker_rlimit_nofile Tăng giới hạn mô tả tập tin, ví dụ được đặt thành 65535.

worker_rlimit_nofile 65535;

4. Kích hoạt bộ nhớ đệm và gzip

Bộ nhớ đệm và nén là hai chìa khóa để tối ưu hóa hiệu suất trang web.

Bằng cách kích hoạt chức năng bộ nhớ đệm của Nginx, các tài nguyên tĩnh (chẳng hạn như hình ảnh và tệp JS) có thể được lưu vào bộ nhớ, do đó giảm đáng kể tải cho máy chủ.

Ngoài ra, bật chức năng nén gzip có thể giảm lượng dữ liệu truyền tải và cải thiện tốc độ trang web.

gzip on;
gzip_types text/plain application/javascript;

5. Phân tích việc sử dụng tài nguyên Nginx

Cuối cùng, nếu bạn đã hoàn thành tất cả các tối ưu hóa trên nhưng Nginx vẫn chiếm nhiều CPU, bạn có thể cần sử dụng một số công cụ để phân tích chuyên sâu.

Sử dụng tophtop Xem mức tiêu thụ tài nguyên theo thời gian thực của một quy trình,vượt qua strace Theo dõi các cuộc gọi hệ thống hoặc sử dụng nmon Tạo báo cáo hiệu suất. Chỉ bằng cách phân tích toàn diện hoạt động thực tế của Nginx, chúng tôi mới có thể thực hiện điều chỉnh chính xác hơn.

tóm lại

Đừng hoảng sợ khi mức sử dụng CPU của Nginx tăng đột biến. Nó có thể chỉ là do cấu hình không đúng hoặc lưu lượng truy cập quá mức.

thông qua những điều chỉnh hợp lý worker_processesworker_connectionsBằng cách bật bộ nhớ đệm, tối ưu hóa thời gian chờ và bộ mô tả tệp, bạn có thể giảm đáng kể áp lực tải trên Nginx.

Nginx là một máy chủ web mạnh mẽ, khi được tối ưu hóa đúng cách, có thể mang lại hiệu suất tuyệt vời cho trang web của bạn.

Hãy nhớ rằng, bất kỳ câu hỏi nào cũng có thể được trả lời bằngKhoa họcphương pháp giải quyết, tối ưu hóa hiệu suất máy chủ cũng không ngoại lệ.

Theo dõi và điều chỉnh kịp thời, là chìa khóa để giữ cho Nginx hoạt động hiệu quả. Nếu bạn có thể thành thạo các kỹ thuật này, trang web của bạn sẽ an toàn ngay cả khi đối mặt với lưu lượng truy cập cao hoặc các cuộc tấn công độc hại.

Tôi hy vọng bài viết này đã truyền cảm hứng cho bạn, hãy nhanh chóng tối ưu hóa Nginx của bạn!

发表 评论

Địa chỉ email của bạn sẽ không được công bố. 项 已 * 标注

Di chuyển về đầu trang