hiểu mô tả tệp tối đa cho linux và nginx và giá trị tốt nhất cho worker_rlimit_nofile


10

Tôi đã gặp lỗi "quá nhiều mô tả tập tin" dường như phổ biến trên nginx. Sau khi tìm kiếm nhiều, giải pháp rõ ràng là tăng số lượng mô tả tệp có sẵn cho nginx. Nhưng không có đủ thông tin ngoài kia để tôi cảm thấy thoải mái khi làm điều này một cách có ý nghĩa và an toàn. Dưới đây là những điểm chính mà hầu hết các chủ đề diễn đàn / email bao gồm:

  • HĐH có tổng giới hạn mô tả tệp riêng (trên hệ thống của tôi, cat /proc/sys/fs/file-maxxuất ra "100678")
  • mỗi người dùng cũng có thể có giới hạn riêng (nhưng trên hệ thống của tôi, chạy ulimitkhi bất kỳ người dùng nào xuất "không giới hạn", hãy xem cập nhật ở phía dưới với nhiều chi tiết hơn )
  • Một số người đã nói điều gì đó dọc theo những gì người này nói: 'Chỉ thị worker_rlimit_nofile không chỉ định "có bao nhiêu", đó là giới hạn hệ điều hành. Chỉ thị worker_rlimit_nofile chỉ cho phép một cách nhanh chóng và bẩn thỉu để mở rộng giới hạn này nếu nó không đủ. ' Vì vậy, tôi đoán hàm ý là "tốt hơn" để đặt giới hạn cho người dùng hệ điều hành nginx thay vì trong cấu hình?

Tôi chỉ có thể đưa vào giá trị worker_rlimit_nofile lớn hơn số lượng kết nối trên mỗi nhân viên và gọi nó là một ngày, nhưng tôi cảm thấy mình không thực sự biết chuyện gì đang xảy ra ở đây.

  • Tại sao giới hạn cho mỗi công nhân sẽ thấp hơn giới hạn HĐH?
  • Làm thế nào để tôi tìm ra giới hạn của tôi bây giờ là gì?

cập nhật : cho cả người dùng root và người dùng bình thường, đầu ra ulimit "không giới hạn", NHƯNG ulimit -Hnulimit -Sncả đầu ra 1024

Câu trả lời:


10

worker_rlimit_nofilesẽ đặt giới hạn cho các bộ mô tả tệp cho các tiến trình worker trái ngược với người dùng đang chạy nginx. Nếu các chương trình khác chạy dưới người dùng này sẽ không thể xử lý một cách duyên dáng khi hết phần mô tả tệp thì bạn nên đặt giới hạn này ít hơn một chút thì những gì dành cho người dùng.

Đầu tiên, những gì đang sử dụng mô tả tập tin của bạn?

  1. Mỗi kết nối hoạt động với một khách hàng
  2. Sử dụng proxy_pass? Điều đó sẽ mở một ổ cắm cho máy chủ: cổng xử lý các yêu cầu này
  3. Sử dụng proxy_pass đến một cổng cục bộ? Đó là một ổ cắm mở. (Dành cho chủ sở hữu của quy trình đó)
  4. tập tin tĩnh đang được phục vụ bởi nginx

Tại sao giới hạn cho mỗi công nhân sẽ thấp hơn giới hạn hệ điều hành?

Điều này được điều khiển bởi HĐH vì công nhân không phải là quá trình duy nhất chạy trên máy. Để thay đổi nó cho người dùng đang chạy nginx, xem bên dưới. Sẽ rất tệ nếu nhân viên của bạn sử dụng hết tất cả các mô tả tệp có sẵn cho tất cả các quy trình, không đặt giới hạn của bạn sao cho có thể.

#/etc/sysctl.conf
#This sets the value you see when running cat  /proc/sys/fs/file-max
fs.file-max = 65536"


#/etc/security/limits.conf
#this sets the defaults for all users
* soft nofile 4096
* hard nofile 4096

#This overrides the default for user `usernamehere`
usernamehere soft nofile 10240
usernamehere hard nofile 10240

Sau những thay đổi giới hạn bảo mật đó, tôi tin rằng tôi vẫn phải tăng mức độ mềm mại cho người dùng sử dụng ulimit.

Làm thế nào để tôi tìm ra giới hạn của tôi bây giờ là gì?

ulimit -a Sẽ hiển thị tất cả các giới hạn liên quan đến người dùng mà bạn chạy nó.


1
Cảm ơn - bây giờ tôi đã tăng giới hạn mô tả tệp, tôi sắp hết kết nối. Có lẽ bạn cũng có thể giúp tôi với điều đó :) serverfault.com/questions/209014/iêu
John Bachir

1
Lưu ý với người dùng CentOS / Fedora, nếu bạn đã bật SELinux, bạn sẽ cần chạy setsebool -P httpd_setrlimit 1để nginx có quyền để thiết lập rlimit của nó.
Jarrett

2

Phải kiểm tra nguồn trung thực, nhưng nó khá thấp.

Tôi đã sử dụng worker_rlimit_nofile 15000;và không có vấn đề gì, bạn có thể tăng nó một cách an toàn, tuy nhiên, cơ hội hết các mô tả tập tin là rất nhỏ.

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.