4.7/5 - (3 bình chọn)

Nginx là một trong những webserver được sử dụng phổ biến. Tuy nhiên, lâu lâu nó có báo lỗi “Too Many Open Files”. Bài viết hôm nay sẽ hướng dẫn bạn cách sửa lỗi này.

Nguyên nhân lỗi Too Many Open Files Error

Chúng ta có thể hiểu là Linux có quy định số file được thể mở đồng thời tại một thời điểm (soft/hard limits). Nếu vượt quá số này, chúng ta sẽ gặp lỗi “Too Many Open Files Error”.

Bạn có thể xem giới hạn này bằng cách chạy 2 lệnh sau

$ ulimit -Hn #hard limit
$ ulimit -Sn #soft limit

Chúng ta có vài cách để xử lý việc này. Ví dụ như tăng giới hạn này trong hệ điều hành, hoặc tăng giới hạn trong process của nginx

Sửa lỗi: Too Many Open Files Error

Tiếp theo chúng ta sẽ tìm hiểu qua từng cách làm.

Cách 1: Tăng giới hạn file ở OS

Đầu tiên, bạn dùng lệnh sau để chỉnh sửa file sysctl.conf

nano /etc/sysctl.conf

Bạn tìm đến dòng sau:

fs.file-max = 70000

Nếu không có, hãy bỏ qua, vì nó không phải là nguyên nhân chính gây ra. Nếu có, hãy tăng giá trị của nó lên theo ý mình, nhưng đừng quá cao, sẽ ảnh hưởng tới bộ nhớ của VPS.

Kế tiếp, hãy mở file /etc/security/limits.conf để cấu hình hard limit và soft limit.

nano /etc/security/limits.conf

Bạn hãy thêm 2 dòng sau vào cuối của file.

nginx       soft    nofile   10000 
nginx       hard    nofile  30000

Ở đây các bạn lưu ý: Nếu thông số hard/soft limit khi nãy test lớn 2 thông số trên, thì đều chỉnh thông số trên cao hơn thông số test nha. Ví dụ mình test hệ thống ra được 2 thông số như sau:

# ulimit -Sn
1024
# ulimit -Hn
1048576

Khi đó bạn sẽ cấu hình file limits.conf như sau:

nginx       soft    nofile   10000 
nginx       hard    nofile  1048576

Tiếp là bấm Ctrl + O để save lại rồi bấm Ctrl + X để thoát ra. Rồi chạy lệnh sau để nạp lại cấu hình hệ thống

sysctl -p

Cách 2: Tăng thông số worker_rlimit_nofile  trong cấu hình nginx

Trong nginx cũng có cung cấp hàm để kiểm soát số lượng file mở đồng thời. Bạn chỉ cần tăng thông số này lên là sẽ sửa được lỗi “Too Many Open Files Error”.

Bây giờ hãy mở file cấu hình nginx lên

nano /etc/nginx/nginx.conf

Sau đó tìm xem có dòng worker_rlimit_nofile không. Nếu có thì tăng thông số nó lên, tầm 25000 là được. Nếu không có thì mình thêm vào như sau:

# set open fd limit to 25000 
worker_rlimit_nofile 25000;

Tiếp là bấm Ctrl + O để save lại rồi bấm Ctrl + X để thoát ra. Rồi chạy lệnh sau để nạp lại cấu hình nginx.

systemctl restart nginx

Như vậy là xong. Cuối cùng chúng ta sẽ kiểm tra lại thông số limit như đã hướng dẫn đầu bài.

Lưu ý: Vui lòng chỉ tăng giới hạn tệp NGINX nếu nó thực sự cần thiết. Cài đặt mặc định của Linux và NGINX đủ tốt cho hầu hết các trang web. Nếu bạn không cẩn thận với những giới hạn này, nó có thể ảnh hưởng đến hoạt động của hiệu suất trang web của bạn và thậm chí cả các quy trình khác trong hệ thống.

Ngoài ra, 2 cách trên có thể được hoặc không, tùy vào hệ thống. Nếu cách 1 không được, hãy thử cách thứ 2.

Chúc các bạn sửa lỗi thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *