43 | 套路篇:网络性能优化的几个思路(上)
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了网络性能优化的方法和思路,重点包括确定优化目标、网络性能工具和网络性能优化。首先,强调了确定优化目标的重要性,指出不同应用中的性能指标优化标准可能会不同,需要进行基准测试以明确优化的标准。其次,介绍了网络性能工具的使用,帮助读者理解和记忆网络相关的性能工具。最后,从应用程序、套接字、传输层、网络层以及链路层等几个角度,分别阐述了网络性能优化的基本思路,包括对网络 I/O 和进程自身的工作模型的优化,以及应用层的网络协议优化方法。整体而言,本文通过系统性的介绍和分析,为读者提供了网络性能优化的基本思路和工具,有助于读者快速了解网络性能优化的相关知识。
《Linux 性能优化实战》,新⼈⾸单¥68
全部留言(29)
- 最新
- 精选
- allan老师,您好,问一下 套接字接收发送缓冲区和TCP接收发送缓冲区,是相同的吗?我的理解这两个应该是相同的缓冲区,只是套接字选项的设置是针对单个套接字,而对 TCP接收发送缓冲区的设置,针对的是 全局的所有套接字 ,是这样理解吗?请老师指教。
作者回复: 是的,内核选项的范围是全局的,套接字接口里面设置的是单个
2019-03-30414 - 耿长学老师,我想咨询下tcp_mem满了如何排查,tcp_mem满了之后新的连接进不来,dmesg看到有tcp_mem:out of mem的提示
作者回复: cat /proc/sys/net/ipv4/tcp_mem 查看配置 cat /proc/net/sockstat 查看当前tcp的统计 然后可以通过 sysctl -w net.ipv4.tcp_mem=新配置 来增大
2019-07-2013 - 明翼跟上了,但是看的有点粗,这个系列我要多看几遍,性能问题无非CPU 内存 IO 网络,感谢老师的课程,对这类问题心理有底了,很喜欢去挑战问题了😁好想加老师微信,大神可以不😳
作者回复: 我们专栏有个微信群可以加入
2019-03-0176 - 腾达tcp_rmem、 tcp_wmem以及其他几个所对应的缓冲区的使用情况,有工具可以查看吗? 像类似“watch -d cat /proc/softirqs” 这样可以观察到缓冲区的变化。另外有图形界面工具吗?查看套接字缓冲区、TCP缓冲区大小变化的图形工具? 另外再问一下,套接字缓冲区、TCP缓冲区 这2个有什么区别吗?
作者回复: 可以通过 /proc/net/sockstat、ss 这些工具来查看。图形界面也有很多,不过一般都是内置在监控系统里面,通过 Web 的方式来展示。比如 zabbix、Nagios等等
2019-03-015 - xfan老师,我是用bpftools生成了一个过滤规则的字节码bytecode,bpfgen dns -- *.www.example.uk,这个规则怎么样加到网卡驱动上去呢,就是怎么安装到 linux18.04 上去呢.我知道load_bpf_file 这个方法,但是我在哪调用呢,老师给我一个思路,我想自己实现一套关于动态使用XDP拦截包的项目
作者回复: 可以去参考一下XDP的文档https://prototype-kernel.readthedocs.io/en/latest/networking/XDP/index.html
2019-03-023 - J!对于kill -9 进程这样的情况,已建立的tcp连接如何处理,还是由操作系统主动回收?
作者回复: 系统会回收掉
2019-03-032 - 科学Jia老师,想问问您:现在我遇到应用程序在负载测试中可能处理速度慢造成了消息响应延迟,我该用什么方法或者工具去查看这个应用程序里每个方法的时间调用?像perf这个工具可以看每个调用方法的cpu利用率一样?
作者回复: 实际上没有通用的方法,uprobe应该是可以用的,不过使用起来还是比较麻烦的。推荐的做法是在应用内部提供metrics 接口,这个接口内部统计每个方法的调用情况。
2019-03-012 - cliff(亮剑)老师好, 说实在,学了两边还是不明白如下数据之间的关系: SO_RCVBUFF, net/core/optmem_max, net/core/rmem_max, net/ipv4/tcp_rmem 和net/ipv4/tcp_mem 比如有如下的测试环境: 1)服务器端: 应用程序开了10个tcp服务器socket,每个设置10K SO_RCVBUFF 设置系统参数如下: net/core/optmem_max = 10K net/core/rmem_max =100K net/ipv4/tcp_rmem 4k 16K 80K net/ipv4/tcp_mem 40K 50K 120K 2)客户端轮流发送TCP消息给服务器: 那假设服务器的应用忙, 所有10个TCP的buffer能缓存100K的TCP数据么? 如果不能, 如何调整系统参数可以满足缓存100K的数据? 先谢谢老师
作者回复: 内核配置选项是全局的,对所有socket生效;系统调用针对的是单个socket,他们的总和受限于内核配置
2019-03-101 - 怀特我之前做过一个优化项目。该项目需要实现一个C/S结构的程序,发送URL给服务器,服务器返回URL的类别,比如属于军事,还是属于体育。 当时在局域网环境下,性能较差,我经过分析之后,“感觉“瓶颈在网络,是因为每个包的有效负载太小,所以改进策略是将多个url拼接在一起再发送出去,然后解析返回的结果给每个url。拼接过程和解析过程都是我自己实现的。 听了倪工的讲座,再回顾当时的实现,能看到当时的不足:我找到了问题的症结所在,但却用了很笨的实现方法来改进。貌似在套接字层增加TCP_CORE,然后在应用程序层将处理改为异步非阻塞的,就可以了吧? 收获颇多,谢谢倪工。
作者回复: 不一定非要异步,但非阻塞、epoll 是比较通用的网络性能优化方法
2019-03-011 - tinsang你好 项目里发现个问题,服务器centos6.5开启tcp服务,客户端每秒100个请求,发现io负载偏高,当前服务端只是接收请求计算 ,cpu使用率也很低,请问如何去定位问题呢
作者回复: 请参考I/O模块排查IO问题
2019-04-29