Tôi đang cố tải thử nghiệm một máy chủ Java bằng cách mở một số lượng lớn các kết nối socket đến máy chủ, xác thực , đóng kết nối, sau đó lặp lại. Ứng dụng của tôi chạy rất tốt cho một lúc nhưng cuối cùng tôi nhận được:"java.net.BindException: Địa chỉ đã được sử dụng" khi cố gắng tạo Ổ cắm nhanh chóng và phá hủy để kiểm tra tải
java.net.BindException: Address already in use: connect
Theo tài liệu tôi đọc, lý do cho điều này là ổ cắm kín vẫn chiếm địa chỉ địa phương được giao cho một khoảng thời gian sau khi đóng cửa() là gọi là. Đây là hệ điều hành phụ thuộc nhưng có thể vào thứ tự của phút. Tôi đã thử gọi setReuseAddress(true)
trên ổ cắm với hy vọng rằng địa chỉ của nó sẽ có thể sử dụng lại ngay sau khi close()
được gọi. Thật không may điều này dường như không phải là trường hợp.
Mã của tôi để tạo ổ cắm là:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
Nhưng tôi vẫn nhận được lỗi này:
java.net.BindException: Address already in use: connect after awhile.
Có cách nào khác để thực hiện những gì tôi đang cố gắng để làm gì? Tôi muốn ví dụ: mở 100 ổ cắm, đóng tất cả, mở 200 ổ cắm, đóng tất cả, mở 300, vv lên đến tối đa 2000 hoặc ổ cắm.
Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!
Máy chủ hoặc ứng dụng khách có ném ngoại lệ không? Điều đó có xảy ra sau một số kết nối nhất quán không? –
Bạn có thể cần thay đổi cài đặt TCP của máy, xem http://docs.alfresco.com/4.0/topic/com.alfresco.enterprise.doc/tasks/alf-win-regedit.html –