Chạy lsof -i hiển thị rất nhiều kết nối trong CLOSE_WAIT? Tôi có nên lo lắng không


7

Vì vậy, tôi đang chạy lsof -i | wc -lđịnh kỳ và nó nói với tôi rằng trong số 420 dòng, từ 240 đến 255 đang ở CLOSE_WAITtrạng thái. Làm thế nào để kết nối TCP vào trạng thái này?

Tôi có nên lo lắng không và tôi nên khắc phục sự cố như thế nào?

Câu trả lời:


12

(Tôi sẽ chỉnh sửa câu trả lời của mikegrb, nhưng quyết định rằng tôi đã đánh cắp nó quá nhiều)

CLOSE_WAIT có nghĩa là khá chính xác những gì nó nói - hạt nhân đang chờ quá trình cục bộ để đóng bộ mô tả tệp trước khi xóa mục nhập. Kết nối TCP đã bị phá hủy hoàn toàn và phần cuối có thể nằm dưới ấn tượng rằng kết nối đó là finito, nhưng kết thúc của bạn đang giữ mọi thứ.

Mối quan tâm duy nhất là rất nhiều mục CLOSE_WAIT tiêu thụ bộ nhớ nhân và các mục trong bảng mô tả tệp, đây có thể là một vấn đề nếu có hàng đống chúng. Nếu các mục bạn đang xem là thoáng qua, thì có lẽ chỉ là bạn đang đạp xe qua rất nhiềucủa các kết nối TCP và bạn sẽ thấy một phần nhỏ trong số chúng trong khoảng thời gian nhỏ giữa khi kết nối được đóng và quá trình diễn ra để đóng bộ mô tả tệp. Mặt khác, nếu chúng là vĩnh viễn (các cổng và địa chỉ IP không thay đổi theo thời gian) thì có một cái gì đó bị rò rỉ mô tả và nó cần được sửa để nó luôn đóng fds khi nó kết thúc với chúng. Như mikegrb đã nói, một phiên bản mới hơn có thể đã khắc phục được sự cố, vì vậy một câu hỏi trong danh sách gửi thư có liên quan hoặc kiểm tra các thay đổi có thể được bảo đảm.


Các kết nối TCP trong CLOSE_WAIT có tiêu thụ mô tả tệp không? Bởi vì ngày hôm qua tôi đã nhận được một vấn đề ngoại lệ "Quá nhiều tệp đang mở".
user20414

2
Có, các mục CLOSE_WAIT là các mô tả tệp mở.
womble

2

Trạng thái CLOSE_WAIT có nghĩa là đầu kia đã gửi một đoạn FIN để đóng kết nối. Kết nối vẫn là loại thành lập. Đó là ở chế độ mà bạn có thể nghĩ là một nửa song công, cho phép kết thúc này xóa bất kỳ bộ đệm nào, gửi các bit dữ liệu cuối cùng đến cuối yêu cầu đóng kết nối trước khi đóng kết nối từ đầu này.

Nếu bạn có nhiều kết nối trong CLOSE_WAIT, điều đó có nghĩa là quy trình chịu trách nhiệm sẽ không đóng ổ cắm một khi nó đi vào CLOSE_WAIT. Bạn có thể sử dụng tcpdump hoặc các công cụ chụp lưu lượng mạng khác để xem các gói.

Cũng hãy xem quá trình chịu trách nhiệm. Vì tò mò quá trình chịu trách nhiệm là gì? Nó có thể có sẵn phiên bản cố định mới hơn hoặc có lẽ đã đến lúc nộp báo cáo lỗi;)


Apache Tomcat 5.5.27
user20414

0

nếu bạn hoạt động trong mạng yếu, bạn có thể điều chỉnh:

  • Số lượng mô tả tệp tối đa thông qua ulimitsvà thông qua /proc(toàn hệ thống)
  • Bạn có thể rút ngắn thời gian chờ TCP thông qua /proc

0

Bạn có thể không đóng tài nguyên (xử lý tệp, kết nối mạng) ở đâu đó trong ứng dụng đang chạy trên máy chủ.

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.