本文介紹了Alibaba Cloud Linux 2系統的ECS執行個體執行ss命令時返回的Send-Q欄位值為0的原因及解決方案。
問題描述
在符合如下條件的ECS執行個體中執行ss -lnt命令時,返回的Send-Q欄位值為0。
鏡像:
aliyun-2.1903-x64-20G-alibase-20190507.vhd及之前的版本。核心:
4.19.43-13.al7.x86_64及之前的核心版本。您可以通過uname -r命令來查看核心版本。
系統顯示類似如下。
# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:35107 *:*
LISTEN 0 0 *:38727 *:*
LISTEN 0 0 *:5355 *:*
LISTEN 0 0 *:111 *:*查看ss命令的說明發現,針對處於監聽中(listening)的TCP Socket,Send-Q欄位表示該Socket的syn backlog最大值。在Linux系統中,該欄位實際輸出該listening Socket全串連隊列的最大容量,所以其值不應該為0。
問題原因
kernel-4.19.43-13.al7.x86_64及之前版本的核心未整合tcp_diag模組,因此ss命令會回退到/proc/net/tcp模式。使用/proc/net/tcp模式(不推薦使用)時,輸出結果中listening TCP Socket的tx_queue欄位值均為0,導致ss -lnt命令輸出的Send-Q欄位值也為0。
解決方案
警告
升級核心可能會出現相容性和穩定性問題,建議您查看Alibaba Cloud Linux 2鏡像發布記錄瞭解具體核心功能後謹慎進行操作。
重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。
執行以下命令,確認沒有查詢到
tcp_dial模組。sudo lsmod | grep tcp_diag執行以下命令,升級核心到最新版本。
sudo yum update kernel執行以下命令,重啟執行個體使配置生效。
sudo reboot