一.上节回顾 上一节,我们探究了网络延迟增大问题的分析方法,并通过一个案例,掌握了如何用hping3.tcpdump.Wireshark.strace 等工具,来排查和定位问题的根源. 简单回顾一下,网络延迟是最核心的网络性能指标.由于网络传输.网络包处理等各种因素的影响,网络延迟不可避免.但过大的网络延迟,会直接影响用户的体验. 所以,在发现网络延迟增大的情况后,你可以先从路由.网络包的收发.网络包的处理,再到应用程序等,从各个层级分析网络延迟,等到找出网络延迟的来源层级后,再深入定位瓶颈所在…
一.中断的魅力 1.中断在生活的魅力 比如你订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是,配送员送外卖是不等人的,到了你这儿没人取的话,就直接走人了.所以你指能苦苦等着,时不时去门口看看外卖送到没,而不能干其他事情. 不过呢,如果你在订外卖的时候,你就跟配送员约定好,让他送到后给你打个电话,你就不用苦苦等待了,就可以去忙别的事情,直到电话一响,接电话.取外卖就可以了 这里的"打电话",其实就是一个中断.没接到电话的时候,你可以做其他的事情:只有接到了电话…
一.上节回顾 上一节,我带你一起梳理了常见的性能优化思路,先简单回顾一下.我们可以从系统和应用程序两个角度,来进行性能优化. 从系统的角度来说,主要是对 CPU.内存.网络.磁盘 I/O 以及内核软件资源等进行优化. 而从应用程序的角度来说,主要是简化代码.降低 CPU 使用.减少网络请求和磁盘 I/O,并借助缓存.异步处理.多进程和多线程等,提高应用程序的吞吐能力. 性能优化最好逐步完善,动态进行.不要追求一步到位,而要首先保证能满足当前的性能要求. 性能优化通常意味着复杂度的提升,也意味着可…
一.上节回顾 专栏更新至今,四大基础模块的最后一个模块——网络篇,我们就已经学完了.很开心你还没有掉队,仍然在积极学习思考和实践操作,热情地留言和互动.还有不少同学分享了在实际生产环境中,碰到各种性能问题的分析思路和优化方法,这里也谢谢你们. 今天是性能优化答疑的第五期.照例,我从网络模块的留言中,摘出了一些典型问题,作为今天的答疑内容,集中回复.同样的,为了便于你学习理解,它们并不是严格按照文章顺序排列的. 每个问题,我都附上了留言区提问的截屏.如果你需要回顾内容原文,可以扫描每个问题右下方的…
一.上节总结 专栏更新至今,四大基础模块的第三个模块——文件系统和磁盘 I/O 篇,我们就已经学完了.很开心你还没有掉队,仍然在积极学习思考和实践操作,并且热情地留言与讨论. 今天是性能优化的第四期.照例,我从 I/O 模块的留言中摘出了一些典型问题,作为今天的答疑内容,集中回复.同样的,为了便于你学习理解,它们并不是严格按照文章顺序排列的. 每个问题,我都附上了留言区提问的截屏.如果你需要回顾内容原文,可以扫描每个问题右下方的二维码查看. 二.问题 1:阻塞.非阻塞 I/O 与同步.异步 I/…
一.上节总结回顾 上一节,我们回顾了经典的 C10K 和 C1000K 问题.简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 100 万个请求(并发连接 100 万)的问题. I/O 模型的优化,是解决 C10K 问题的最佳良方.Linux 2.6 中引入的 epoll,完美解决了C10K 的问题,并一直沿用至今.今天的很多高性能网络方案,仍都基于 epoll. 自然,随着互联网技术的普及,催生出更高的性能需求.从 C10…
一.上节回顾 上一节,我们了解了 NAT(网络地址转换)的原理,学会了如何排查 NAT 带来的性能问题,最后还总结了 NAT 性能优化的基本思路.我先带你简单回顾一下. NAT 基于 Linux 内核的连接跟踪机制,实现了 IP 地址及端口号重写的功能,主要被用来解决公网 IP 地址短缺的问题. 在分析 NAT 性能问题时,可以先从内核连接跟踪模块 conntrack 角度来分析,比如用systemtap.perf.netstat 等工具,以及 proc 文件系统中的内核选项,来分析网络协议栈的…
一.上节回顾 上一节,我们学了网络性能优化的几个思路,我先带你简单复习一下. 在优化网络的性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序.套接字.传输层.网络层再到链路层等每个层次,进行逐层优化.上一期我们主要学习了应用程序和套接字的优化思路,比如: 在应用程序中,主要优化 I/O 模型.工作模型以及应用层的网络协议: 在套接字层中,主要优化套接字的缓冲区大小. 今天,我们顺着 TCP/IP 网络模型,继续向下,看看如何从传输层.网络层以及链路层中,优化 Linu…
一.上节回顾 上一节,我们一起学习了怎么使用动态追踪来观察应用程序和内核的行为.先简单来回顾一下.所谓动态追踪,就是在系统或者应用程序还在正常运行的时候,通过内核中提供的探针,来动态追踪它们的行为,从而辅助排查出性能问题的瓶颈. 使用动态追踪,便可以在不修改代码也不重启服务的情况下,动态了解应用程序或者内核的行为.这对排查线上的问题.特别是不容易重现的问题尤其有效. 在 Linux 系统中,常见的动态追踪方法包括 ftrace.perf.eBPF/BCC 以及 SystemTap 等. 使用 p…
一.上节回顾 上一节,我们一起学习了,应用程序监控的基本思路,先简单回顾一下.应用程序的监控,可以分为指标监控和日志监控两大块. 指标监控,主要是对一定时间段内的性能指标进行测量,然后再通过时间序列的方式,进行处理.存储和告警. 而日志监控,则可以提供更详细的上下文信息,通常通过 ELK 技术栈,来进行收集.索引和图形化展示. 在跨多个不同应用的复杂业务场景中,你还可以构建全链路跟踪系统.这样,你就可以动态跟踪调用链中各个组件的性能,生成整个应用的调用拓扑图,从而加快定位复杂应用的性能问题. 不…