性能瓶颈分析整体思路

一、web应用的性能分析

1、首先,确定整体瓶颈在哪

依据请求的流程,可大致分为 前端 -> 网络 -> 后端 三段。其中前端性能这里不做讨论,网络的话,测试性能的时候最好保持网络干扰最小。

2、其次,确定后端瓶颈在哪

后端处理一条请求时,大概会经过 应用程序 -> 中间件 -> 应用程序 -> 数据库 4段,其中中间件可能有也有可能没有。

3、最后,逐步分析每个地方的瓶颈

分析应用程序、中间件、数据库瓶颈时,重要原则就是:CPU -> 内存 -> 网络 -> 磁盘(性能最慢的设备会是瓶颈点)

1)应用程序瓶颈:

  • CPU:应用程序运行在内存中,性能开销一般是CPU闲置导致,所以增加多线程提高CPU利用率是最快的提升性能的方法。
  • 内存:减少链表等需要内存寻址的操作
  • 网络:避免在for循环中建立网络连接,以及等待磁盘IO
  • 磁盘:避免在for循环中等待磁盘IO

2)中间件瓶颈:

      中间件大多为第三方产品,提高硬件设备性能是唯一的办法:建立集群(增加机器数量)、使用多核CPU、增加内存、使用千兆网卡和网线、使用固态硬盘等

3)数据库瓶颈:

  • 磁盘:数据库的数据存在磁盘中,与磁盘进行IO交互是消耗性能最多的地方,减少磁盘访问可以最显著的提升效率(建立索引,优化sql,避免全盘扫描
  • 网络:如果数据库是独立部署的,网络传输是第二大消耗性能的地方,批量传输数据减少网络交互,分页技术减少返回数据都可以优化该处性能

二、Linux服务器性能分析—CPU

1、首先要确定CPU基础信息

使用lscpu命令查看 CPU配置信息。在 Linux 下,类似 lsxxx 这样的命令都是用来查看基本信息的,如 ls 查看当前目录文件信息,lscpu 就用来查看 CPU 信息,类似还有 lspci 查看 PCI 信息。

  • Architecture: #架构 
  • CPU(s): #逻辑cpu颗数 
  • Thread(s) per core: #每个核心的线程数量 
  • Core(s) per socket: #每颗物理CPU的核数
  • CPU socket(s): #物理CPU个数 
  • Vendor ID: #cpu厂商ID 
  • CPU family: #cpu系列 
  • Model: #型号 
  • Stepping: #步进 
  • CPU MHz: #cpu主频 
  • Virtualization: #cpu支持的虚拟化技术 
  • L1d cache: #一级缓存(google了下,这具体表示表示cpu的L1数据缓存) 
  • L1i cache: #一级缓存(具体为L1指令缓存) 
  • L2 cache: #二级缓存

2、计算cpu核数

  • CPU总核数 =物理CPU个数 * 每颗物理CPU的核数 =2*4=8
  • 总逻辑CPU数=物理CPU个数 * 每颗物理CPU的核数 * 超线程数* 复用比=2*4*2=16

一个核心就是一个物理线程,英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥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 查看。

三、Linux服务器性能分析—内存

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。

  • VIRT:virtual memory usage,进程占用的虚拟内存大小。
  • RES:resident memory usage,进程常驻内存大小,也就是实际内存占用情况,一般我们看进程占用了多少内存,就是看的这个值。
  • SHR:shared memory,共享内存大小,不常用。

参考文章:

一文掌握 Linux 性能分析之内存篇

如何查看Linux的内存使用状况

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Nginx负载均衡的性能测试和瓶颈分析,可以采取以下步骤: 1. 安装和配置Nginx:确保Nginx已正确安装和配置,并且负载均衡功能已启用。 2. 准备测试环境:搭建一个包含多个服务器的测试环境,这些服务器将作为后端服务。 3. 压力测试工具选择:选择一个合适的压力测试工具,例如ApacheBench、JMeter或wrk等。 4. 制定测试计划:确定测试目标、并发用户数量、请求频率、请求类型等测试参数。 5. 进行负载测试:使用选择的压力测试工具对Nginx进行负载测试,模拟实际用户访问场景,记录每个请求的响应时间和吞吐量。 6. 监控和调优:通过监控Nginx服务器的CPU、内存、网络等性能指标,找出可能存在的瓶颈。可以使用工具如top、vmstat等进行系统监控,或者Nginx提供的统计模块ngx_http_stub_status。 7. 调整配置参数:根据监控数据,调整Nginx的配置参数,如worker_processes、worker_connections、keepalive_timeout等,以提高性能并消除瓶颈。 8. 重复测试和分析:重复上述步骤,直到达到预期的性能要求。同时,分析测试结果,确定性能瓶颈所在,并采取相应措施进行优化。 需要注意的是,负载均衡性能测试是一个复杂的过程,需要综合考虑多个因素,如硬件性能、网络延迟、后端服务性能等。在进行测试和分析时,应该综合考虑这些因素,并根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值