Cách kiểm tra kích thước vòng rx, max_backlog và max_syn_backlog


41

Rất thường xuyên trong quá trình khắc phục sự cố và điều chỉnh những thứ tôi thấy mình đang nghĩ về các cài đặt kernel Linux sau:

net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn

Khác hơn fs.file-max, net.ipv4.ip_local_port_range, net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, và net.ipv4.tcp_wmem, họ có vẻ là các nút bấm quan trọng để gây rối với khi bạn đang điều chỉnh một hộp cho các cấp cao đồng thời.

Câu hỏi của tôi: Làm thế nào tôi có thể kiểm tra xem có bao nhiêu mặt hàng trong mỗi hàng đợi đó? Thông thường mọi người chỉ đặt chúng ở mức siêu cao, nhưng tôi muốn ghi lại các kích thước hàng đợi đó để giúp dự đoán sự thất bại trong tương lai và nắm bắt các vấn đề trước khi chúng biểu hiện theo cách đáng chú ý của người dùng.


Đây là một câu hỏi tuyệt vời. Tôi quan tâm đến vấn đề incast và truyền lại TCP độ phân giải cao.
dhchdhd

Câu trả lời:


29

Tôi cũng đã tự hỏi điều này và được thúc đẩy bởi câu hỏi của bạn!

Tôi đã thu thập mức độ tôi có thể đến gần từng hàng đợi mà bạn đã liệt kê với một số thông tin liên quan đến từng hàng. Tôi hoan nghênh ý kiến ​​/ phản hồi, bất kỳ cải tiến nào để giám sát giúp mọi thứ dễ quản lý hơn!

net.core.somaxconn

net.ipv4.tcp_max_syn_backlog

net.core.netdev_max_backlog

$ netstat -an | grep -c SYN_RECV 

Sẽ hiển thị số lượng kết nối toàn cầu hiện tại trong hàng đợi, bạn có thể ngắt kết nối này trên mỗi cổng và đưa kết nối này vào câu lệnh exec trong snmpd.conf nếu bạn muốn thăm dò ý kiến ​​từ ứng dụng giám sát.

Từ:

netstat -s

Chúng sẽ cho bạn thấy tần suất bạn thấy các yêu cầu từ hàng đợi:

146533724 packets directly received from backlog
TCPBacklogDrop: 1029
3805 packets collapsed in receive queue due to low socket buffer

fs.file-max

Từ:

http://linux.die.net/man/5/proc

$ cat /proc/sys/fs/file-nr
2720    0       197774

Tệp này (chỉ đọc) cho số lượng tệp hiện được mở. Nó chứa ba số: Số lượng xử lý tệp được phân bổ, số lượng xử lý tệp miễn phí và số lượng xử lý tệp tối đa.

net.ipv4.ip_local_port_range

Nếu bạn có thể xây dựng danh sách loại trừ các dịch vụ (netstat -an | grep LISTEN) thì bạn có thể suy ra có bao nhiêu kết nối đang được sử dụng cho hoạt động phù du:

netstat -an | egrep -v "MYIP.(PORTS|IN|LISTEN)"  | wc -l

Cũng nên theo dõi (từ SNMP):

TCP-MIB::tcpCurrEstab.0

Cũng có thể thú vị khi thu thập số liệu thống kê về tất cả các trạng thái được nhìn thấy trong cây này (được thiết lập / time_wait / fin_wait / etc):

TCP-MIB::tcpConnState.*

net.core.rmem_max

net.core.wmem_max

Bạn sẽ phải dtrace / strace hệ thống của bạn cho các yêu cầu setockopt. Tôi không nghĩ rằng số liệu thống kê cho các yêu cầu này được theo dõi khác. Đây thực sự không phải là một giá trị thay đổi từ sự hiểu biết của tôi. Ứng dụng bạn đã triển khai có thể sẽ yêu cầu số tiền tiêu chuẩn. Tôi nghĩ rằng bạn có thể 'hồ sơ' ứng dụng của bạn với strace và định cấu hình giá trị này cho phù hợp. (bàn luận?)

net.ipv4.tcp_rmem

net.ipv4.tcp_wmem

Để theo dõi mức độ gần với giới hạn của bạn, bạn sẽ phải xem mức trung bình và tối đa từ các trường tx_queue và rx_queue từ (một cách thường xuyên):

# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 00000000:0FB1 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262030037 1 ffff810759630d80 3000 0 0 2 -1                
   1: 00000000:A133 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262029925 1 ffff81076d1958c0 3000 0 0 2 -1                

Để theo dõi các lỗi liên quan đến điều này:

# netstat -s
    40 packets pruned from receive queue because of socket buffer overrun

Cũng nên theo dõi nhóm 'bộ đệm' toàn cầu (thông qua SNMP):

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Memory Buffers
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 74172456
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 51629704

2

Tôi nghĩ bạn có thể lấy dữ liệu đó bằng SystemTap. Dưới đây là hướng dẫn tham khảo Redhat (pdf) . Ngoài ra còn có một hướng dẫn cho người mới bắt đầu (pdf) .

Công cụ này trông đủ linh hoạt để cho phép bạn lấy dữ liệu đó, đặc biệt probe::netdev.rxtrông giống như thứ gì đó sẽ cung cấp cho bạn thông tin về các mục nhập đến, bây giờ bạn "chỉ" cần tìm kích thước thực của hàng đợi trong bộ đệm hoặc thứ gì đó đếm được mọi thứ rời khỏi hàng đợi

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.