2010-01-24 38 views
9

Thư viện TCP/IP xóa có một số hạn chế không? Tôi đã thực hiện một số tìm kiếm nhưng không thể tìm thấy bất kỳ câu trả lời dứt khoát nào.Số cổng mở đồng thời tối đa của Erlang?

Tôi đã đặt biến môi trường ERL_MAX_PORTS thành 12000 và được định cấu hình Yaws để sử dụng kết nối không giới hạn.

Tôi đã viết một ứng dụng khách đơn giản kết nối với một appmod tôi đã viết cho Yaws và đang thử nghiệm số lượng kết nối đồng thời bằng cách khởi chạy X số lượng khách hàng cùng một lúc.

Tôi thấy rằng khi tôi nhận được khoảng 100 khách hàng, máy chủ bịnh ghẻ hờm dừng chấp nhận các kết nối TCP và các lỗi khách hàng với

 
Error in process with exit value: {{badmatch,{error,socket_closed_remotely}} 

Tôi biết có phải là một giới hạn số lượng kết nối đồng thời mở nhưng 100 dường như rất thấp. Tôi đã xem xét tất cả các tài liệu yaws và đã loại bỏ bất kỳ giới hạn nào về các kết nối.

Đây là phiên bản 2.16Ghz Intel Core 2 Duo iMac đang chạy Snow Leopard.

Kiểm tra nhanh trên Máy Vista cho thấy tôi gặp phải sự cố tương tự ở khoảng 300 kết nối.

Bài kiểm tra của tôi có hợp lý không? I E. là nó ngớ ngẩn để mở hơn 100 kết nối đồng thời để kiểm tra đồng thời của Yaws?

Cảm ơn.

+0

Không 'socket_closed_remotely' đề xuất rằng sự cố là trong ứng dụng khách? – Zed

+0

Cập nhật câu trả lời của tôi sau khi bạn chỉnh sửa, có thể là do bạn mở tất cả cùng một lúc. – stacker

+0

Zed: Thông báo lỗi là từ phía máy khách, vì vậy Yaws đang đóng socket. Tôi không thấy bất cứ điều gì đăng nhập vào Yaws. – ckovacs

Trả lời

0

Sau khi thử đề xuất của mọi người và cọ rửa tài liệu Erlang, tôi đã đi đến kết luận rằng vấn đề của tôi là với Yaws không thể theo kịp tải.

Trên cùng một máy, máy chủ web Apache Http Components (không chặn I/O) không có cùng sự cố khi xử lý các kết nối ở cùng ngưỡng.

Cảm ơn sự giúp đỡ của bạn. Tôi sẽ chuyển sang các máy chủ web khác dựa trên erlang, như Mochiweb.

+0

Vâng, Tất nhiên bạn trả lời không phải là câu trả lời đúng. – Farsheed

6

Có vẻ như bạn nhấn một hạn chế của hệ thống, cố gắng tăng số lượng tối đa của tập tin đang mở sử dụng

$ ulimit -n 500 

Python on Snow Leopard, how to open >255 sockets?

Erlang chính nó có một giới hạn 1024:

Từ http://www.erlang.org/doc/man/erlang.html

Số cổng tối đa có thể mở cùng một lúc là 1024 theo mặc định, nhưng có thể được cấu hình bởi môi trường va chịu trách nhiệm ERL_MAX_PORTS.

EDIT:

Hệ thống gọi listen() có tồn đọng tham số mà xác định có bao nhiêu yêu cầu có thể được xếp hàng, xin vui lòng kiểm tra xem một sự chậm trễ giữa các yêu cầu để thiết lập kết nối giúp. Đây có thể là vấn đề của bạn.

+1

Nếu các cổng tối đa bị cạn kiệt, lỗi sẽ là 'enfile' và không phải' socket_closed_remotely'. – Zed

+0

Xin lỗi, tôi quên đề cập đến rằng tôi đã đặt ERL_MAX_PORTS thành 12000 trên cả hai cài đặt OS X và Vista – ckovacs

+0

Cũng đã thử đặt ulimit với cùng một kết quả – ckovacs

3

Tất cả các giới hạn hệ thống Erlang được báo cáo trong Efficiency Guide Erlang:

http://erlang.org/doc/efficiency_guide/advanced.html#id2265856

Đọc từ cổng mở phần:

Số lượng tối đa đồng thời cổng Erlang mở là theo mặc định là 1024. Giới hạn này có thể được tăng lên đến tối đa là 268.435.456 lúc khởi động (xem môi trường ERL_MAX_PORTS biến trong erlang (3)) Giới hạn tối đa 268.435.456 cổng mở ít nhất là trên 32-bit kiến ​​trúc sẽ không thể đạt được do thiếu bộ nhớ.

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