Receive queue 和 Send queue 理解说明
2017-01-06 14:33
99 查看
1、关于netstat -anq 的 Recv-Q与Send-Q说明[root@zayhu01-mb ~]# netstat -anp | headActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2742/sshdtcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 29931/rubytcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 15776/python2.6tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 15783/python2.6tcp 0 0 0.0.0.0:28027 0.0.0.0:* LISTEN 2880/bin/mongodtcp 0 0 0.0.0.0:50491 0.0.0.0:* LISTEN 2567/rpc.statdtcp 0 0 0.0.0.0:24224 0.0.0.0:* LISTEN 29931/rubytcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 31248/zabbix_agentd[root@zayhu01-mb ~]#What It Means"Proto" is short for protocol, which is either TCP or UDP. "Recv-Q" and "Send-Q" mean receiving queue and sending queue. These should always be zero; if they're not you might have a problem. Packets should not be piling up in either queue, except briefly, as this example shows: tcp 0 593 192.168.1.5:34321 venus.euao.com:smtp ESTABLISHED That happened when I hit the "check mail" button in KMail; a brief queuing of outgoing packets is normal behavior. If the receiving queue is consistently jamming up, you might be experiencing a denial-of-service attack. If the sending queue does not clear quickly, you might have an application that is sending them out too fast, or the receiver cannot accept them quickly enough. "Local address" is either your IP and port number, or IP and the name of a service. "Foreign address" is the hostname and service you are connected to. The asterisk is a placeholder for IP addresses, which of course cannot be known until a remote host connects. "State" is the current status of the connection. Any TCP state can be displayed here, but these three are the ones you want to see大致意思如下:Recv-Q Send-Q分别表示网络接收队列,发送队列。Q是Queue的缩写。这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。如下中的示例,短暂的Send-Q队列发送pakets非0是正常状态。如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。Recv-Q:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()Send-Q:对方没有收到的数据或者说没有Ack的,还是本地缓冲区.通过netstat的这两个值就可以简单判断程序收不到包到底是包没到还是包没有被进程recv。例如:[root@zayhu01-mb ~]# netstat -anp|grep 16715 | grep 7070 | grep -v LISTENsctp 0 0 172.34.11.11:7070 172.34.28.118:37733 ESTABLISHED 16715/javasctp 0 604 172.34.11.11:7070 172.34.0.206:36314 ESTABLISHED 16715/javasctp 0 839 172.34.11.11:7070 172.34.17.191:44516 ESTABLISHED 16715/javasctp 0 483 172.34.11.11:7070 172.34.5.72:38376 ESTABLISHED 16715/javasctp 0 482 172.34.11.11:7070 172.34.23.190:60160 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.8.26:41579 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.8.151:60199 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.27.100:38005 ESTABLISHED 16715/javasctp 0 607 172.34.11.11:7070 172.34.11.11:36616 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.10.26:45828 ESTABLISHED 16715/javasctp 0 787 172.34.11.11:7070 172.34.2.121:53356 ESTABLISHED 16715/javasctp 0 752 172.34.11.11:7070 172.34.28.86:37574 ESTABLISHED 16715/javasctp 0 483 172.34.11.11:7070 172.34.16.161:35600 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.0.206:45765 ESTABLISHED 16715/javasctp 0 0 172.34.11.11:7070 172.34.17.191:42716 ESTABLISHED 16715/java[root@zayhu01-mb ~]# netstat -anp|grep 16715 | grep 7070 | grep -v LISTEN | awk '{sum+=$2}END{print sum}' Recv-Q的总和0[root@zayhu01-mb ~]# netstat -anp|grep 16715 | grep 7070 | grep -v LISTEN | awk '{sum+=$3}END{print sum}' Send-Q的总和4503[root@zayhu01-mb ~]#
2、关于 /proc/net/sctp/assocs 文件说明[root@zayhu01-mb ~]# awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs
ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT RPORT LADDRS <-> RADDRS HBINT INS OUTS MAXRT T1X T2X RTXC wmema wmemq sndbuf rcvbufffff88036c975000 ffff88073bf05c00 2 1 3 26 13869 702 0 501 925943431 7070 41343 172.34.11.11 <-> *172.34.16.161 7500 10 10 10 0 0 0 1529 1280 212992 212992ffff880003223000 ffff88073bf07300 2 1 3 35 13106 0 0 501 903426908 7070 37788 172.34.11.11 <-> *172.34.21.131 7500 10 10 10 0 0 0 1 0 212992 212992解释:awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs 输出LPORT列包含7070的行awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs |awk '{for(i=1;i<NF;i++)if($i~/RX_QUEUE/)k=i;print $k}' 输出 RX_QUEUE列awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs |awk '{for(i=1;i<NF;i++)if($i~/RX_QUEUE/)k=i;print $k}'|grep -v "RX_QUEUE"|awk '{sum+=$1}'END'{print sum}' 计算这一列的总和assoc: 表示assoc的内存地址。sock:表示sock的内存地址。STY:表示sctp sock的类型。 SCTP_SOCKET_UDP = 0, SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1, SCTP_SOCKET_TCP = 2,SST: 表示sock的状态。sctp的sock状态延续了tcp协议的状态。 sctp中sock的状态: SCTP_SS_CLOSED = TCP_CLOSE, //7 SCTP_SS_LISTENING = TCP_LISTEN, //10 SCTP_SS_ESTABLISHING = TCP_SYN_SENT, //2 SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, //1 SCTP_SS_CLOSING = TCP_CLOSING, //11ST: 表示assoc的状态。 assoc的状态取值如下: /* SCTP state defines for internal state machine */ SCTP_STATE_EMPTY = 0, SCTP_STATE_CLOSED = 1, SCTP_STATE_COOKIE_WAIT = 2, SCTP_STATE_COOKIE_ECHOED = 3, SCTP_STATE_ESTABLISHED = 4, SCTP_STATE_SHUTDOWN_PENDING = 5, SCTP_STATE_SHUTDOWN_SENT = 6, SCTP_STATE_SHUTDOWN_RECEIVED = 7, SCTP_STATE_SHUTDOWN_ACK_SENT = 8,HBKT: 表示该assoc在hash表中的hash值。ASSOC-ID:表示该连接的ID值。TX_QUEUE: 表示发送缓存的内存使用量,单位:字节。RX_QUEUE: 表示接收队列的内存使用量,单位:字节。UID INODE: 分别表示sock所对应的uid和inode值。LPORT RPORT:分别表示本地端口和远端端口。LADDRS <-> RADDRS :分别表示本地IP地址和远端IP地址。HBINT:表示assoc发送heartbeat的间隔时间OUTS:同INS类似,表示该assoc可以允许发送的最大 stream数,默认值是10。MAXRT:表示该assoc允许的最大重传数,默认值是10T1X:表示该assoc重传的INIT chunk的次数。T2X:表示该assoc重传的SHUTDOWN chunk的次数。RTXC:表示该assoc重传的DATA chunk的次数。
2、关于 /proc/net/sctp/assocs 文件说明[root@zayhu01-mb ~]# awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs
ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT RPORT LADDRS <-> RADDRS HBINT INS OUTS MAXRT T1X T2X RTXC wmema wmemq sndbuf rcvbufffff88036c975000 ffff88073bf05c00 2 1 3 26 13869 702 0 501 925943431 7070 41343 172.34.11.11 <-> *172.34.16.161 7500 10 10 10 0 0 0 1529 1280 212992 212992ffff880003223000 ffff88073bf07300 2 1 3 35 13106 0 0 501 903426908 7070 37788 172.34.11.11 <-> *172.34.21.131 7500 10 10 10 0 0 0 1 0 212992 212992解释:awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs 输出LPORT列包含7070的行awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs |awk '{for(i=1;i<NF;i++)if($i~/RX_QUEUE/)k=i;print $k}' 输出 RX_QUEUE列awk '{for(i=1;i<NF;i++)if($i~/LPORT/)l=i;if($l~/7070|LPORT/)print }' /proc/net/sctp/assocs |awk '{for(i=1;i<NF;i++)if($i~/RX_QUEUE/)k=i;print $k}'|grep -v "RX_QUEUE"|awk '{sum+=$1}'END'{print sum}' 计算这一列的总和assoc: 表示assoc的内存地址。sock:表示sock的内存地址。STY:表示sctp sock的类型。 SCTP_SOCKET_UDP = 0, SCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1, SCTP_SOCKET_TCP = 2,SST: 表示sock的状态。sctp的sock状态延续了tcp协议的状态。 sctp中sock的状态: SCTP_SS_CLOSED = TCP_CLOSE, //7 SCTP_SS_LISTENING = TCP_LISTEN, //10 SCTP_SS_ESTABLISHING = TCP_SYN_SENT, //2 SCTP_SS_ESTABLISHED = TCP_ESTABLISHED, //1 SCTP_SS_CLOSING = TCP_CLOSING, //11ST: 表示assoc的状态。 assoc的状态取值如下: /* SCTP state defines for internal state machine */ SCTP_STATE_EMPTY = 0, SCTP_STATE_CLOSED = 1, SCTP_STATE_COOKIE_WAIT = 2, SCTP_STATE_COOKIE_ECHOED = 3, SCTP_STATE_ESTABLISHED = 4, SCTP_STATE_SHUTDOWN_PENDING = 5, SCTP_STATE_SHUTDOWN_SENT = 6, SCTP_STATE_SHUTDOWN_RECEIVED = 7, SCTP_STATE_SHUTDOWN_ACK_SENT = 8,HBKT: 表示该assoc在hash表中的hash值。ASSOC-ID:表示该连接的ID值。TX_QUEUE: 表示发送缓存的内存使用量,单位:字节。RX_QUEUE: 表示接收队列的内存使用量,单位:字节。UID INODE: 分别表示sock所对应的uid和inode值。LPORT RPORT:分别表示本地端口和远端端口。LADDRS <-> RADDRS :分别表示本地IP地址和远端IP地址。HBINT:表示assoc发送heartbeat的间隔时间OUTS:同INS类似,表示该assoc可以允许发送的最大 stream数,默认值是10。MAXRT:表示该assoc允许的最大重传数,默认值是10T1X:表示该assoc重传的INIT chunk的次数。T2X:表示该assoc重传的SHUTDOWN chunk的次数。RTXC:表示该assoc重传的DATA chunk的次数。
相关文章推荐
- 关于Java堆栈的理解与说明
- 错误“未知重写说明符”的总结以及对using namespace 的理解
- [转载+实践理解]Android动画---如何正确使用平移动画(关于fillBefore和fillAfter的一点说明)(转载)
- SVD实例说明理解
- [堆排序之一]图文说明,快速理解
- 神经网络中epoch, iteration, batchsize相关理解和说明
- Linux通用安装命令理解及说明(转载)
- 关于VC/MFC中内存管理、堆、堆栈概念理解收集的几点说明
- 计算机整数为什么如此进行编码的一个更易理解的说明.值得学习.
- 对指针运算符*文字说明的一点点理解
- 深度学习 8. MatConvNet 相关函数解释说明,MatConvNet 代码理解(四)cnn_train.m 的注释
- 3 Composer难理解?那么说明你对PHP这些功能不了解
- 理解JVM,用代码说明下抽象的概念,易理解和学习 (二)
- 深度学习 14. 深度学习调参,CNN参数调参,各个参数理解和说明以及调整的要领。underfitting和overfitting的理解,过拟合的解释。
- Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
- java 第11次作业:你能看懂就说明你理解了——this关键字
- 1.说说你个人理解的存储解决方案的发展趋势,作图描述。 11.png 2.画一张说明ASM实例同数据库实例协同工作的原理图,并给出语言描述。 14.png 一个监听器可以为多个实例
- Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解
- 今天的Coursera测验做了三次才对这说明对Precision和Recall的理解有问题
- java中this这个概念初学者非常难理解,请举例说明