nginx uLimit 'worker_connections vượt quá giới hạn tài nguyên tệp mở: 1024'


14

Tôi liên tục nhận được lỗi này nginx/error.logvà nó khiến tôi phát điên:

8096 worker_connections exceed open file resource limit: 1024

Tôi đã thử mọi thứ tôi có thể nghĩ ra và không thể tìm ra điều gì đang giới hạn nginx ở đây. Bạn có thể nói tôi đang thiếu gì không?

nginx.conf có cái này:

worker_processes 4;
events {
        worker_connections 8096;
        multi_accept on;
        use epoll;
}

Tôi đã thay đổi hệ thống Ulimit của mình security/limits.confnhư thế này:

# This is added for Open File Limit Increase
*               hard    nofile          199680
*               soft    nofile          65535

root            hard    nofile          65536
root            soft    nofile          32768

# This is added for Nginx User
nginx           hard    nofile          199680
nginx           soft    nofile          65535

Nó vẫn hiển thị lỗi. Vì vậy, tôi cũng đã thử chỉnh sửa /etc/default/nginxvà thêm dòng này:

ULIMIT="-n 65535"

Nó vẫn hiển thị cùng một lỗi. Không thể tìm ra điều gì đang giới hạn kết nối nginx worker chỉ ở mức 1024. Bạn có thể chỉ cho tôi không?

Tôi đã có Debian 7 + nginx

Câu trả lời:


29

Đặt worker_rlimit_nofile 65535;trong nginx.conf trong bối cảnh chính.


1
Đó là nó! Điều đó đã sửa nó. Oh bạn là một vị cứu tinh. Nó hoạt động ngay cả khi ULimit không được cài đặt thủ công /etc/default/nginx file. Tuyệt vời. Cảm ơn bạn @Xaviour
Neel

1
Xavier làm tốt lắm.
Dave Holland

@Xavier điều này đã loại bỏ thông báo lỗi, nhưng bạn có thể giải thích tại sao điều này hoạt động mà không thay đổi ulimit như được đề cập trong câu trả lời dưới đây? các tìm kiếm của Google yêu cầu thay đổi ulimit trong giới hạn. thông tin hoặc hệ thống, nhưng không có gì phù hợp với tôi.
Bsienn

2

Trở thành người dùng:

su - nginx

Kiểm tra giới hạn:

ulimit -Hn
ulimit -Sn

Chỉnh sửa số lượng tệp mà hệ thống tệp sẽ cho phép bạn mở:

vi /etc/sysctl.conf
fs.file-max = 70000

tải các thay đổi của bạn:

sysctl -p

Xem nếu điều đó giúp.


Tôi đang sử dụng init và havent cài đặt systemctl. Điều đó sẽ làm cho một sự khác biệt?
Neel

Khi tôi đổi thành người dùng Nginx, ulimit -Hn đang hiển thị chính xác ở đó. Sau đó tôi đã kiểm tra init.d/nginxvà nó kiểm tra xem ULIMIT có được đặt trong thư mục mặc định không (nơi nó đã được đặt) và sau đó nó được cho là đặt giá trị đó nhưng không:Check if the ULIMIT is set in /etc/default/nginx
Neel

Sau khi thay đổi tối đa tệp và ngay sau khi tôi chạy sysctl -pub Ubuntu 18.04.2 bị treo, ném quá nhiều tệp mở và không khởi động, phải xóa mã trong khởi động an toàn để khởi động lại hệ điều hành.
Bsienn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.