前言

本文介绍了用ss工具来统计一下当前网络栈的内存使用情况

环境准备

组件 版本
操作系统 Ubuntu 22.04.4 LTS

查看socket内存相关参数,-m 参数

 ss -tm
State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 36 10.8.19.109:ssh 182.148.53.161:25924
skmem:(r0,rb369280,t0,tb133632,f1792,w2304,o0,bl0,d1)

其中关于skmem

skmem:(r<rmem_alloc>,rb<rcv_buf>,t<wmem_alloc>,tb<snd_buf>,
f<fwd_alloc>,w<wmem_queued>,o<opt_mem>,
bl<back_log>,d<sock_drop>)
  • rmem_alloc 已经分配用于接收包的内存,如果应用层能及时消费 TCP 内核层接收到的数据,这个数字基本为 0
  • rcv_buf 接收包可以使用的总内存,与 net.ipv4.tcp_rmem 第二个参数相关
  • wmem_alloc 已经分配用于发送包的内存(已经到达ip层),包已经到达ip层,需要等待网卡将ip层的包取走
  • snd_buf 发送包可以使用的总内存 与 net.ipv4.tcp_wmem 第二个参数相关
  • fwd_alloc 已经分配给socket使用内存,不用于接收/发送使用
  • wmem_queued 已经分配用于发送包的内存(没有到达ip层)
  • opt_mem 用于保存socket option所使用的内存
  • back_log back_log所使用的内存,进程从队列里面拿到新的数据包
  • sock_drop 在将数据包解复用到套接字之前丢弃的数据包数量

计算每一条socket消耗的内存,-tm

socket_memory = r(rmem_alloc) + t(wmem_alloc) + f(fwd_alloc) + w(wmem_queued) + o(opt_mem) + bl(back_log)
 ss -tm
State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 36 10.8.19.109:ssh 182.148.53.161:25924
skmem:(r0,rb369280,t0,tb133632,f1792,w2304,o0,bl0,d1)

可以计算出这条socket消耗的内存: mem = 1792+2304 = 4096 4k内存

计算网络栈所使用的内存

cat /proc/net/sockstat
sockets: used 502
TCP: inuse 65 orphan 0 tw 128 alloc 311 mem 21
UDP: inuse 5 mem 4
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

mem 21,单位是page,查看一下page的大小

getconf PAGESIZE
4096

由此可得,当前tcp网络栈大约使用 mem = 21*4096 = 86016 84k内存

查看协议栈的其他参数信息,-i

 ss -ti
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.3.168:46099 192.168.3.168:58625
cubic wscale:2,7 rto:201 rtt:0.043/0.005 ato:40 mss:65483 rcvmss:1924 advmss:65483 cwnd:10 bytes_acked:12424915507 bytes_received:3150 segs_out:10395577 segs_in:10395575 send 121828.8Mbps lastsnd:2188 lastrcv:2244390049 lastack:2188 rcv_rtt:1 rcv_space:43690
  • rto 重传超时时间,即从数据发送时刻算起,超过这个时间便执行重传,单位ms
  • rtt 一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值,单位ms
  • ato ack的超时时间,单位ms
  • mss 有效数据的最大分段,去掉3层和4层的header,就是MSS MTU - (TCP 标头 + IP 标头) = MSS
  • rcvmss 文档上没有这个参数的介绍,源码注释上标注: MSS used for delayed ACK decisions。对端告诉本端,对端的mss大小
  • advmss 文档上没有这个参数的介绍,源码注释上标注: Advertised MSS。告诉对端,本端的mss的大小
  • cwnd 拥塞窗口的大小: cwnd*mss
  • bytes_acked 已经被ack的字节数
  • bytes_received 收到但没被ack的字节数
  • segs_out 已发送的segment数,segment最大就是一个mss,但是也有可能小于mss(没有塞满一个mss就发送过来了)
  • segs_in 已收到的segment数
  • send 发送速率
  • lastsnd 最后发送一个包距离现在的时间,单位ms
  • lastrcv 最后接收一个包距离现在的时间,单位ms
  • lastack 最后一次收到ack距离现在的时间,单位ms
  • rcv_rtt 文档上没有这个参数介绍
  • rcv_space 用于tcp自动调优,用来调整sender的buffer

联系我

  • 联系我,做深入的交流


至此,本文结束

在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

明察秋毫--用ss工具统计网络栈内存使用的更多相关文章

  1. DSAPI 获取实时统计信息CPU/内存/硬盘/网络

    有时,我们需要获取当前计算机中CPU.内存.硬盘.网络等实时信息,如下图:\ 要实现上述几项信息的获取,通常需要使用Timer控件来间隔获取,以便刷新最新的数据. 本示例中,放一个Timer控件,放一 ...

  2. Windows系统CPU内存网络性能统计第一篇 内存

    最近翻出以前做过的Windows系统性能统计程序,这个程序可以统计系统中的CPU使用情况,内存使用情况以及网络流量.现在将其整理一下(共有三篇),希望对大家有所帮助. 目录如下: 1.<Wind ...

  3. Linux探测工具BCC(网络)

    Linux探测工具BCC(网络) 承接上文,本节以ICMP和TCP为例介绍与网络相关的部分内容. 目录 Linux探测工具BCC(网络) Icmp的探测 TCP的探测 Icmp的探测 首先看下促使我学 ...

  4. Linux 网络栈 转载

    此文章  来自      http://arthurchiao.art/blog/tuning-stack-rx-zh/ [译] Linux 网络栈监控和调优:接收数据(2016) Published ...

  5. 扩展Linux网络栈

    扩展Linux网络栈 来自Linux内核文档.之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问.为了更好地理解本文章中的功能,将这篇文章穿插入内. 简介 ...

  6. 浏览器-09 javascript引擎和Chromium网络栈

    语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...

  7. Linux内核--网络栈实现分析(七)--数据包的传递过程(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7545855 更多请查看专栏,地 ...

  8. Linux内核--网络栈实现分析(六)--应用层获取数据包(上)

    本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http: ...

  9. Linux内核--网络栈实现分析(四)--网络层之IP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7514017 更多请看专栏,地址 ...

  10. Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7497260 更多请看专栏,地址 ...

随机推荐

  1. Java使用snmp协议采集服务器信息

    Java使用snmp协议采集服务器信息    一.snmp简介   SNMP是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及Hubs等)的一种标准协议,它是一种应用层协议. ...

  2. c++线程--快速上手

    线程创建 头文件#include thread 是在 C++11 标准中引入的. C++11 标准引入了对多线程编程的标准化支持,其中包括了线程的创建.管理和同步机制. 头文件提供了基本的线程支持库, ...

  3. 4.2 等差数列及其前n项和

    \(\mathbf{{\large {\color{Red} {欢迎到学科网下载资料学习}} } }\)[[高分突破系列]高二数学下学期同步知识点剖析精品讲义! \(\mathbf{{\large { ...

  4. vue本地项目启动时遇到coreJs相关报错问题处理

    启动项目的时候报错 : 是因为core.js这个包丢失,需要大家重新下载即可 : yarn add core-js

  5. 好上好信息 API 微服务集群在 KubeSphere 的部署实践

    作者:徐鹏.深圳好上好信息(001298).技术副总监.负责云服务器团队的架构设计及业务开发,拥抱云原生,乐于分享,终生学习. 公司简介 好上好信息(001298)是中国大陆一家致力于为中国智造提供全 ...

  6. 题解:P9788 [ROIR 2020 Day2] 区域规划

    题目传送门 洛谷题解 思路 首先我们看下数据范围, \(n <= 3000\) ,范围很小,所以暴力枚举. 于是第一份代码出来了. #include<bits/stdc++.h> u ...

  7. ToDesk云电脑手机也能玩?安卓系统已上线!

    近日,ToDesk云电脑首次发布移动端!这次云电脑将安卓和iOS双系统都安排上了,基本照顾到所有移动端的用户.并且性能也保持了电脑版的高配置,价格还是那么优惠. 我用了一次都有点不想退出了,用来打游戏 ...

  8. Linux利用ftp命令上传下载文件

    Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹.虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器.SSH.远程会话中掌握命令行ftp的使用 ...

  9. NES 模拟器中音画同步问题

    背景 模拟器是与游戏和播放器都有相似之处的系统.模拟器与游戏的相似之处,在于都需要一个采集输入--执行逻辑--然后按一定帧率(通常是 60 FPS)把画面显示出来的循环.但是模拟器又需要模拟音频设备, ...

  10. 别再手动处理数据了!FastGPT 这个新功能让你提前下班

    大家好!今天给大家介绍 FastGPT 4.8.11 版本新增的一个超强节点 - [循环运行]节点.如果你经常需要处理大量数据,这个功能绝对能让你事半功功倍! 这个节点是干嘛的? 想象一下这个场景:你 ...