Tôi có thể tạo phiên TCP / IP để chạy dưới 60 giây không?


8

Máy chủ của chúng tôi bị quá tải với các phiên TCP / IP, chúng tôi có 1200 - 1500 trong số chúng. Hầu hết chúng được treo ở trạng thái TIME_OUT. Nó chỉ ra rằng một kết nối ở trạng thái TIME_OUT chiếm một ổ cắm cho đến khi hết thời gian 60 giây.

Vấn đề là máy chủ không phản hồi và nhiều khách hàng không được phục vụ.

Tôi đã thực hiện một thử nghiệm đơn giản: tải xuống tệp XML từ máy chủ bằng Internet Explorer 8.0 Quá trình tải xuống kết thúc sau một phần giây. Nhưng sau đó tôi thấy rằng kết nối TCP / IP đang bị treo ở trạng thái TIME_OUT trong 60 giây.

Có cách nào để thoát khỏi TIME_OUT chờ đợi hoặc làm cho nó ít hơn để giải phóng ổ cắm cho các kết nối mới không?

Tôi hiểu tại sao kết nối TCP / IP vào trạng thái TIME_OUT, nhưng tôi không hiểu tại sao Internet Explorer không đóng kết nối sau khi quá trình tải xuống tệp XML kết thúc.

Các chi tiết.

Máy chủ của chúng tôi chạy dịch vụ web được viết bằng Perl (mod-perl). Dịch vụ cung cấp dữ liệu thời tiết cho khách hàng. Client là một ứng dụng Flash (thực ra là điều khiển Flash ActiveX được nhúng trong ứng dụng Windows).

HĐH: Ubuntu

Tùy chọn "Keep Alive" của Apache được đặt thành 0


Nếu bạn hiểu tại sao nó vào trạng thái TIME_OUT, thì bạn phải hiểu tại sao điều này là cần thiết để ngăn chặn các cuộc tấn công và vấn đề khác. Bạn có thể giảm thời gian chờ này, nhưng có những hậu quả khác để làm điều đó.
davr

Cú pháp là KeepAlive on|off. KeepAlive 0là cú pháp Apache 1.1; Tôi giả sử bạn không sử dụng nó.
mark4o

Phiên 1500 T / O không làm cho hệ thống của bạn không phản hồi. Có một lý do khác.
poige

Là kết nối đi qua một bộ định tuyến giá rẻ?
LatinSuD

Câu trả lời:


7

Đây là một cài đặt trong ngăn xếp TCP của bạn. Vì chúng tôi không biết bạn đang sử dụng nền tảng nào nên chúng tôi không thể nói chính xác nó được gọi là gì và làm thế nào để thay đổi nó.

CẬP NHẬT

Vì vậy, bạn đang sử dụng Ubuntu. Bạn có thể sử dụng sysctlđể giảm net.inet.tcp.mslgiá trị xuống một nửa TIME_WAITthời lượng mong muốn (tính bằng mili giây - xem man -S 4 tcp), vd sysctl net.inet.tcp.msl=2500. Cảnh giác với những tác động của việc làm như vậy đối với các gói đi lang thang có thể đến sau khi hết TIME_WAITthời gian.


Máy chủ của chúng tôi chạy Ubuntu, tôi đã cập nhật thông tin chi tiết
ngang

«1200 - 1500 trong số họ» sẽ không thay đổi ngay cả máy tính, vì vậy đó không phải là lý do để điều chỉnh msl
poige

1

Tôi giả sử bạn có nghĩa là TIME_WAIT. Thiết bị ngang hàng khởi tạo đóng hoạt động là thiết bị nhập TIME_WAIT(xem sơ đồ chuyển trạng thái tại đây ) vì vậy nếu bạn có thể yêu cầu khách hàng của mình đóng kết nối thì bạn sẽ chuyển TIME_WAITsang máy khách. Xem câu trả lời này để biết thêm chi tiết và liên kết đến một bài viết hay về TIME_WAITcác vấn đề và cách giải quyết chúng.

Một cách khác, nếu bạn không thể khiến máy khách gặp sự cố đóng hoạt động, là đặt lại kết nối bằng cách đặt linger thành false trước khi đóng nó. Điều này gây ra một RSTđược gửi chứ không phải FIN.


Ồ, cảm ơn bạn rất nhiều! Nhưng làm cách nào tôi có thể kiểm soát kết nối TCP / IP khi người dùng tải tệp XML bằng Internet Explorer?
mệnh

TIME_WAITlà bình thường và trừ khi hiệu suất máy chủ của bạn bị ảnh hưởng vì đó không phải là điều tôi lo lắng quá nhiều. Khi ổ cắm ở trong TIME_WAITđó sẽ chiếm một số tài nguyên nhưng điều đó không có nghĩa là kết nối vẫn mở hoặc máy chủ vẫn đang xử lý nó.
Len Holgate

0

Máy chủ không phản hồi có khả năng không liên quan gì đến số lượng kết nối ở trạng thái TIME_WAIT. Không rõ ý của bạn là gì khi "chiếm một ổ cắm" - máy chủ từ lâu đã có closeổ cắm tại thời điểm đó. Hệ thống sẽ có thể xử lý hàng chục ngàn kết nối ở trạng thái TIME_WAIT.

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.