Alibaba Cloud Linux 2系統(tǒng)的ECS實(shí)例執(zhí)行ss命令時(shí)返回的Send-Q字段值為0,如何處理?
本文為您介紹Alibaba Cloud Linux 2系統(tǒng)的ECS實(shí)例執(zhí)行ss命令時(shí)返回的Send-Q字段值為0的原因及解決方案。
問(wèn)題描述
在符合如下條件的ECS實(shí)例中執(zhí)行ss -lnt
命令時(shí),返回的Send-Q字段值為0。
鏡像:
aliyun-2.1903-x64-20G-alibase-20190507.vhd
及之前的版本。內(nèi)核:
kernel-4.19.43-13.al7.x86_64
及之前的內(nèi)核版本。
系統(tǒng)顯示類(lèi)似如下。
# 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命令的說(shuō)明會(huì)發(fā)現(xiàn),對(duì)于監(jiān)聽(tīng)中(listening)的TCP socket,Send-Q字段表示該Socket的syn backlog最大值。在Linux系統(tǒng)中,該字段實(shí)際輸出該listening socket全連接隊(duì)列的最大容量,所以其值不應(yīng)該為0。
Send-Q
Established: The count of bytes not acknowledged by the remote host.
Listening: Since Kernel 2.6.18 this column contains the maximum
size of the syn backlog.
問(wèn)題原因
kernel-4.19.43-13.al7.x86_64
及之前的內(nèi)核版本未集成tcp_diag模塊,因此ss命令會(huì)回退到/proc/net/tcp
模式,而/proc/net/tcp
接口(不推薦使用)輸出結(jié)果中l(wèi)istening TCP socket的tx_queue字段值均為0,從而導(dǎo)致ss -lnt
命令輸出的Send-Q字段值也為0。詳情可參見(jiàn)/proc/net/tcp接口介紹文檔。
ss -lnt
命令輸出的Send-Q字段表示listening TCP socket全連接隊(duì)列的最大容量。用戶態(tài)network相關(guān)的工具套件有net-tools與iproute2兩種,其中net-tools自2001年已經(jīng)停止維護(hù),取而代之的是iproute2套件。而ss命令正是iproute2套件的一部分,net-tools中與ss實(shí)現(xiàn)類(lèi)似功能的則是netstat命令。ss命令與netstat命令獲取網(wǎng)絡(luò)信息的區(qū)別如下:
netstat通過(guò)
/proc/net/tcp
接口獲取TCP socket的相關(guān)統(tǒng)計(jì)信息。ss默認(rèn)使用socket接口與tcp_diag內(nèi)核模塊通訊,獲取TCP socket的相關(guān)統(tǒng)計(jì)信息。當(dāng)內(nèi)核不支持tcp_diag內(nèi)核模塊時(shí),會(huì)回退到
/proc/net/tcp
模式。
解決方案
升級(jí)ECS實(shí)例的內(nèi)核到kernel-4.19.43-13.1.al7.x86_64
及之后的版本。