1、首先,确定整体瓶颈在哪
依据请求的流程,可大致分为 前端 -> 网络 -> 后端 三段。其中前端性能这里不做讨论,网络的话,测试性能的时候最好保持网络干扰最小。
2、其次,确定后端瓶颈在哪
后端处理一条请求时,大概会经过 应用程序 -> 中间件 -> 应用程序 -> 数据库 4段,其中中间件可能有也有可能没有。
3、最后,逐步分析每个地方的瓶颈
分析应用程序、中间件、数据库瓶颈时,重要原则就是:CPU -> 内存 -> 网络 -> 磁盘(性能最慢的设备会是瓶颈点)
1)应用程序瓶颈:
2)中间件瓶颈:
中间件大多为第三方产品,提高硬件设备性能是唯一的办法:建立集群(增加机器数量)、使用多核CPU、增加内存、使用千兆网卡和网线、使用固态硬盘等
3)数据库瓶颈:
1、首先要确定CPU基础信息
使用lscpu命令查看 CPU配置信息。在 Linux 下,类似 lsxxx 这样的命令都是用来查看基本信息的,如 ls 查看当前目录文件信息,lscpu 就用来查看 CPU 信息,类似还有 lspci 查看 PCI 信息。
2、计算cpu核数
一个核心就是一个物理线程,英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥CPU性能。
3、CPU 使用情况分析
使用top命令查看cpu的使用情况
重点关注这么几个字段:
1)load average:三个数字分别表示最近 1 分钟,5 分钟和 15 分钟的负载,数值越大负载越重。一般要求不超过核数,比如对于单核情况要 < 1。如果机器长期处于高于核数的情况,说明机器 CPU 消耗严重了。
2)%Cpu(s):表示当前 CPU 的使用情况,如果要查看所有核(逻辑核)的使用情况,可以按下数字 “1” 查看。这里有几个参数,表示如下:
- us 用户空间占用 CPU 时间比例
- sy 系统占用 CPU 时间比例
- ni 用户空间改变过优先级的进程占用 CPU 时间比例
- id CPU 空闲时间比
- wa IO等待时间比(IO等待高时,可能是磁盘性能有问题了)
- hi 硬件中断
- si 软件中断
- st steal time
3)每个进程的使用情况
这里可以罗列每个进程的使用情况,包括内存和 CPU 的,如果要看某个具体的进程,可以使用 top -p pid 查看。
1、使用free命令查看内存使用情况
这里存在一个计算公式, 还有个 shared
字段,这个是多进程的共享内存空间,不常用
MemTotal = used + free + buff/cache(单位 K)
我们注意到 free 很小,buff/cache 却很大,这是 Linux 的内存设计决定的,Linux 的想法是内存闲着反正也是闲着,不如拿出来做系统缓存和缓冲区,提高数据读写的速率。但是当系统内存不足时,buff/cache 会让出部分来,非常灵活的操作。
2、内存使用情况分析
使用top 命令查看内存使用情况。运行时默认是按照 CPU 利用率进行排序的,如果要按照内存排序,该怎么操作呢?两种方法,一种直接按 “M”(相应的按 “P” 是 CPU),另外一种是在键入 top 之后,按下 “F”,然后选择要排序的字段,再按下 “s” 确认即可。
可以看到,我按照 “%MEM” 排序的结果。这个结果对于查看系统占用内存较多的哪些进程是比较有用的。
然后这里我们会重点关注几个地方,上面横排区,和前面几个命令一样可以查看系统内存信息,中间标注的横条部分,和内存相关的有三个字段:VIRT、RES、SHR。
参考文章:
一文掌握 Linux 性能分析之内存篇
如何查看Linux的内存使用状况