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

Tuần vừa rồi, Khi máy chủ chạy Ngix bị lỗi do máy chủ của tôi hosting quá nhiều website( vài trăm site).

Nginx bị lỗi, các website không truy cập được. Khi vào xem log thì thấy thông báo sau:

2010/04/16 13:24:16 [crit] 21974#0: *3188937 open() “/usr/local/nginx/html/50x.html” failed (24: Too many open files), client: 88.x.y.z, server: example.com, request: “GET /file/images/background.jpg HTTP/1.1”, upstream: “http://10.8.4.227:81//file/images/background.jpg”, host: “example.com”

Nguyên nhân là do Ngix mở quá nhiều file khi chạy.

Trong Linxux, cần phải tăng số file giới hạn được mở cho hệ điều hành.

Bạn có thể làm như  sau:

su – nginx

Để xem số softfile và hard file hệ điều hành cho phép mở, bạn gõ lệnh sau:
ulimit -Hn
ulimit -Sn

Có 2 cách sau để chỉnh sửa lỗi:
Cách 1 Tăng số file giới hạn ở mức hệ điều hành

Your operating system set limits on how many files can be opened by nginx server. You can easily fix this problem by setting or increasing system open file limits under Linux. Edit file /etc/sysctl.conf, enter:

Hệ điều hành thường thiết đặt số file được mở bởi nginx. Bạn có thể tăng con số này lên bằng cách:
# vi /etc/sysctl.conf
Thêm vào dòng sau:
fs.file-max = 70000
Lưu file lại.  Sửa  file /etc/security/limits.conf:
# vi /etc/security/limits.conf

Đặt lại soft và hard limt cho người dùng chạy nginx server:

nginx soft nofile 10000
nginx hard nofile 30000

Lưu file. Sau đó chạy lệnh sau để thay đổi:
# sysctl -p

Cách 2 Thay đổi tham số trong Nginx config

Nginx có tham số là worker_rlimit_nofile cho phép tự thay đổi số file cần mở trong ở mức tiến trình. Để cấu hình số lượng file tối đa được mở. Biên tập file nginx.conf:

# vi /usr/local/nginx/conf/nginx.conf
Thêm dòng sau:

# set open fd limit to 30000
worker_rlimit_nofile 30000;

Lưu file, reload lại nginx webserver
# /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
# su – nginx

Kiểm tra các thông số
$ ulimit -Hn
$ ulimit -Sn

:

30000
10000

 

Nếu các cách trên vẫn không được. Bạn vào file khởi động: /etc/init.d/nginx

thêm vào các dòng sau:

ulimit -Hn 30000

ulimit -Sn 10000

Chúc may mắn.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: