点击上方蓝字"开发内功修炼",关注并设为星标
飞哥的硬核文章将第一时间送达~~~
实际中 TCP 连接上肯定是要进行数据的收发的,而且还会有 TIME_WAIT 等其它状态。在这些复杂情况下,一条连接占用多大内存呢?飞哥用做了七天的实验结果告诉你!



实验1:ESTABLISH空连接





实验2:客户端 => 服务器发送数据测试






实验3: 服务器 => 客户端发送数据测试







实验4:非 ESTABLISH 状态






总结
我们把实验中的数据来总结一下

可见,内核在 socket 内存开销优化上采取了不少方法:
1. 内核会尽量及时回收发送缓存区、接收缓存区,但高版本做的更好
2. 发送接收缓存区最小并一定不是 rmem 内核参数里的最小值,实际可能会更小
3. 其它状态下,例如对于TIME_WAIT还会回收非必要的 socket_alloc 等对象
开发内功修炼之网络篇专辑:

据说转发、点赞、点在看的都会变的更帅!????
文章围绕TCP连接在复杂情况下的内存占用展开,通过ESTABLISH空连接、数据收发测试、非ESTABLISH状态等实验,总结出内核在socket内存开销优化上采取了及时回收缓存区等方法,高版本表现更好,且实际缓存区最小值可能更小。
1万+

被折叠的 条评论
为什么被折叠?



