2010-04-02 31 views
9

Tôi gặp sự cố với các tệp đang mở trong Ubuntu 9.10 khi chạy máy chủ trong Python2.6 Và vấn đề chính là, tôi không biết tại sao lại như vậy ..lỗi socket.accept 24: Đối với nhiều tệp đang mở

tôi đã thiết

ulimit -n = 999999

net.core.somaxconn = 999999

fs.file-max = 999999

và l sof cho tôi khoảng 12000 tập tin mở khi máy chủ đang chạy.

Và tôi cũng đang sử dụng epoll.

Nhưng sau một thời gian nó bắt đầu đưa ra exeption:

File "/usr/lib/python2.6/socket.py", dòng 195, ở chấp nhận lỗi: [Errno 24] Quá nhiều tập tin mở

Và tôi không biết làm thế nào nó có thể đạt đến giới hạn tập tin khi nó không đạt được.

Cảm ơn bạn đã trợ giúp)

+0

Trả lại "ulimit -n" là gì? Hệ thống có thực sự cho phép bạn đặt thành 999999 không? –

+1

Bạn có thể nhấn giới hạn mô tả tập tin cho mỗi quá trình và bạn không lưu ý cách bạn đã sửa đổi nó. Xem '/usr/include/linux/limits.h NR_OPEN' Bạn làm gì với 12k file mở ?? – msw

+0

Về điều này "/usr/include/linux/limits.h NR_OPEN" tôi không biết, nó đã được đặt thành 1024, đã thay đổi lên đến 65536. Giới thiệu về "ulimit -n" trả lại 999999 Sẽ kiểm tra máy chủ ngay bây giờ tùy chọn NR_OPEN mới này.Và sẽ trả lời) Cảm ơn) –

Trả lời

20

Params định cấu hình kết nối mở tối đa.

tại /etc/sysctl.conf

add:

net.core.somaxconn=131072 
fs.file-max=131072 

và sau đó:

sudo sysctl -p 

tại /usr/include/linux/limits.h

thay đổi :

NR_OPEN = 65536 

tại /etc/security/limits.conf

add:

*    soft nofile   65535 
*    hard nofile   65535 
+0

Chức năng của giới hạn này là gì? Giữ một người dùng độc hại từ ...? – meawoppl

+0

giới hạn số lượng mô tả mở cho mỗi người dùng. Vì vậy, nếu ví dụ DB của bạn ăn tất cả các bộ mô tả, máy chủ web của bạn sẽ vẫn hoạt động. –

6

Bạn cũng có thể làm điều này từ mã python của bạn như dưới đây

import resource 
resource.setrlimit(resource.RLIMIT_NOFILE, (65536, 65536)) 

Đối số thứ hai là tuple (soft_limit, hard_limit). Giới hạn cứng là trần cho giới hạn mềm. Giới hạn mềm là những gì thực sự được thực thi cho một phiên hoặc quá trình. Điều này cho phép quản trị viên (hoặc người dùng) đặt giới hạn cứng cho mức sử dụng tối đa mà họ muốn cho phép. Những người dùng và quy trình khác sau đó có thể sử dụng giới hạn mềm để tự giới hạn việc sử dụng tài nguyên của mình ở mức thấp hơn nếu họ muốn.

+0

Điều này có thực hiện thay đổi tạm thời hay vĩnh viễn không? – Michael

+0

@Michael Tôi đã cập nhật câu trả lời. –

+0

Bản cập nhật giúp giải thích chức năng, nhưng câu hỏi của tôi là liệu điều này có làm thay đổi vĩnh viễn hay liệu tôi có khởi động lại trình thông dịch Python hay không, nó sẽ đặt lại giới hạn. – Michael

Các vấn đề liên quan