Mục lục
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!