CPU 性能分析

image.png

内存性能分析

image.png

磁盘和文件系统 I/O 性能分析

image.png

网络性能分析

image.png

应用程序瓶颈

  • 资源瓶颈,其实还是指刚才提到的 CPU、内存、磁盘和文件系统 I/O、网络以及内核资源等各类软硬件资源出现了瓶颈,从而导致应用程序的运行受限。对于这种情况,就可以用前面系统资源瓶颈模块提到的各种方法来分析。

  • 依赖服务的瓶颈,也就是诸如数据库、分布式缓存、中间件等应用程序,直接或者间接调用的服务出现了性能问题,从而导致应用程序的响应变慢,或者错误率升高。这说白了就是跨应用的性能问题,使用全链路跟踪系统,就可以快速定位这类问题的根源。

  • 应用程序自身的性能问题,包括了多线程处理不当、死锁、业务算法的复杂度过高等等。对于这类问题,在前面讲过的应用程序指标监控以及日志监控中,观察关键环节的耗时和内部执行过程中的错误,就可以缩小问题的范围。

如果这些手段过后还是无法找出瓶颈,还可以用系统资源模块提到的各类进程分析工具,来进行分析定位。比如:

  • 可以用 strace,观察系统调用;

  • 使用 perf 和火焰图,分析热点函数;

  • 甚至使用动态追踪技术,来分析进程的执行状态。

小结

从系统资源瓶颈的角度来说,USE 法是最为有效的方法,即从使用率、饱和度以及错误数这三个方面,来分析 CPU、内存、磁盘和文件系统 I/O、网络以及内核资源限制等各类软硬件资源。

从应用程序瓶颈的角度来说,可以把性能问题的来源,分为资源瓶颈、依赖服务瓶颈以及应用自身瓶颈这三类。

  • 资源瓶颈跟系统资源瓶颈,本质是一样的。

  • 依赖服务瓶颈,可以使用全链路跟踪系统进行定位。

  • 而应用自身的问题,可以通过系统调用、热点函数,或者应用自身的指标监控以及日志监控等,进行分析定位。

值得注意的是,虽然把瓶颈分为了系统和应用两个角度,但在实际运行时,这两者往往是相辅相成、相互影响的。系统是应用的运行环境,系统的瓶颈会导致应用的性能下降;而应用的不合理设计,也会引发系统资源的瓶颈。做性能分析,就是要结合应用程序和操作系统的原理,揪出引发问题的真凶。