Tôi có một máy khách node.js (10.177.62.7) yêu cầu một số dữ liệu từ dịch vụ nghỉ ngơi http từ máy chủ (10.177.0.1). Máy khách chỉ đơn giản là sử dụng phương thức http.request() của node.js (agent = false). Khách hàng đang ở trên hộp Ubuntu 11.10.Máy khách gửi FIN ACK bị trễ (~ 500ms) đến máy chủ
Tại sao khách hàng gửi FIN ACK sau 475ms? Tại sao quá chậm? Anh ấy nên gửi FIN ACK ngay lập tức. Tôi có nhiều tình huống như thế này. Khoảng 1% toàn bộ lưu lượng truy cập là yêu cầu với FIN ACK bị trì hoãn.
Cpu không hoạt động trên máy khách là khoảng 99%, vì vậy không có gì thoát CPU.
Cách gỡ lỗi này? Nó có thể là gì? Có tùy chọn sysctl nào tôi cần điều chỉnh không?
Trên ảnh chụp màn hình, cột thứ hai là thời gian trôi qua giữa các gói.
Tôi đã xóa câu trả lời của tôi về HTTP giữ nguyên vì nó đã được loại trừ dứt khoát. Tuy nhiên, không thể nghĩ ra bất kỳ câu trả lời nào khác. FIN nên đi ra ngay sau khi ổ cắm được đóng lại. –
@AlanCurry Nhưng * FIN/ACK * sẽ chỉ đi ra ngoài khi khách hàng đã đọc FIN đến và quyết định đóng socket, có thể mất bất kỳ lượng thời gian nào. Đây là một hành vi của node.js, không phải là ngăn xếp TCP/IP. – EJP
Chắc chắn, nhưng nếu nó đang ở giữa một cuộc gọi đến một thư viện khách hàng http, nó không làm sống động, và tải CPU là 1%, những gì mất nó quá lâu để đóng socket sau khi đọc EOF? –