面试:性能方面

1:linux性能方面相关操作

1:查看当前终端启动的所有进程的命令是什么?
  ps -ef:查看当前系统所有进程
  ps  :查看当前终端相关的进程
  定位具体某个进程使用管道 |grep 过滤
2:动态查看当前系统进程的命令是什么?    ps是静态的   top
3:使用top命令监控进程编号为1的进程状态信息?   top -p 1
4:查看centos系统,cpu详细硬件信息的命令是什么?   lscpu   cat /proc/cpuinfo
5:查看centos系统内存静态使用情况的命令是?   free -m
6:查看centos系统内存动态使用情况?   vmstat 3
7:buffer和cache的区别是什么?  内存和磁盘的关系   buffer  读缓存数据     cpu读取时候,为了提高效率,把数据存储在内存里,读缓存   cache  写缓存数据     cpu把数据写到磁盘,因为cpu和磁盘数据相差很大,把数据先写到内存,内存达到配置参数百分之多少时候一并把内存数据写入磁盘
8:swap空间的作用是什么,一般设置为多大?   交换区,交换空间,内存和磁盘的交换,磁盘划取一个区域swap格式化成swap格式,内存不够的时候从磁盘借用空间交换空间   用来增加linux虚拟内存空间,一般大小为实际上的物理内存的2倍
9:如何查看centos系统磁盘的大小?   df -h         -h方便查看,以g为单位
10:cpu监控里面iowait的含义是什么?   指的是cpu等待磁盘操作所花费的资源百分比   内存缓存一开始也是没有数据的,读的时候开始也没有数据,从磁盘读取数据,读的时候磁盘慢了cpu还是需要等待的     不可能什么数据都放内存,磁盘500g内存8个g     cpu等待磁盘的I/O操作
11:cpu监控里面的ide的含义是什么?   指的是cpu空闲时间占的百分比
12:如何查看centos系统内存硬件信息?   cat /proc/meminfo
13:如何查看linux的发现版本?   cat /etc/issue
14:如何查看linux系统内核版本信息?   uname -a
15:centos磁盘监控的命令有哪些?   iostat   dstat   磁盘每秒读写的速度,
16:centos网络监控的命令有哪些?   netstat   dstat     net:recv和send这里监控网络速度的,收发字节
17:评定cpu性能瓶颈的参考标准是什么?   us < 85%  sy<5%   比这个高就要告警,cpu很忙,
18:评定内存性能瓶颈参考标准是什么?   多个指标   free空间很少,swap使用了,si和so数量不断变化,而且量比较大,就认为内存瓶颈   内存使用率达到85%以上,swap空间使用了,si和so不断变化,不断进行内存切换  这时候认为内存存在瓶颈
19:评定磁盘性能瓶颈参考的标准是什么?   top命令监控,wait数值通过都是0,如果wait长期有5%以上,就可以说明cpu等待磁盘消耗的资源比较明显了   主要看wait这个指标,等待I/O操作
20:评定网络性能瓶颈的标准是什么?   netstat查看网络统计信息,看是否存在dropped被丢掉的数据包   已经是否有TCP大量的重传数据包出现
21:使得当前系统cpu达到100%使用率的方法有哪些?   构造这种极端场景看软件反应怎么样,会不会卡死和异常,构造测试环境   通过编写大量循环的语句,使得cpu繁忙    python脚本可以失效,一个while死循环
22:使得当前系统内存泄露的原因   在c或者c++编写的软件程序中,程序申请了内存没有使用free释放内存,这个就会导致内存泄露   使用java类似编程语言,垃圾回收不充分,受到影响(中断,系统非常繁忙受到影响),导致垃圾回收失败,长期以往就会造成内存泄露   不断积累下去机器可能down机
23:使得当前系统网络繁忙的方法有哪些?   上传下载大容量的数据文件,比如:wget下载等,让网络非常繁忙
24:使得当前系统磁盘繁忙的方法有哪些?   短时间构造大量磁盘读写操作
25:winscp的作用是什么,在工作当作如何应用?   运行在windows下面的一个文件传输客户端,通过22端口与sshd服务器连接,   进行windows到linux系统之间的文件加密传输,   用于windows和linux之间传输文件
26:xshell,putty的作用是什么,在工作中如何应用?   都是windows下面的客户端工具,用于远程登录linux主机   相当于一个linux的终端,一般使用操作远程服务器
27:如何查看windows系统下,端口80的网络连接情况?   netstat -ano|findstr 80
28:如何查看contos系统下,端口80的网络连接情况?   lsof -i:80     系统80端口在监听,可以查看服务器服务端口有没有启动,直接查看   lsof -i:3306   lsof -i:22     用于检测服务器有没有正常启动,如果没有正常启动端口肯定没有开的
29:给centos系统eth0接口配置ip地址xxx,子网掩码xxx   ifconfig eth0 192.168.xxx.xxx netmask 255.255.255.0   route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1:配置路由,临时配置
30:重启centos网络的方法有哪些,请解释他们的区别?   service network restart/stop/start    主要使用这个   /etc/init.d/network restart 

 2:性能相关问题

1:性能简单来说
  多,快,好,省
  多:
尽可能处理多业务,多用户量,系统能够容纳多用户
  快:
以多快的速度处理用户的访问,不仅要快而且正确率高
  
好:稳定性,长时间运行
  
省:节省资源,让cpu,内存,网络带宽等占比比较低

2:
性能测试和环境和配置息息相关,性能测试设计的时候必须有个背景叫环境,环境是什么,硬件配置是什么软件版本收什么

3:
性能测试
  有相关需求:这个内存,这个cpu,TPS和RT响应时间

4:
负载测试
  
系统在不同负载下的性能表现,看看系统性能什么时候变差了,是一个过程,通过该项测试可以探索到系统在不同负载下的性能变化曲线,从而寻找到性能的拐

5:
压力测试:
  系统在高负载下的性能表现,该项测试主要为了探索系统能够承受最大的负载以及此时系统的吞吐率,
  
超高负载下是否会出现崩溃而无法访问(极限性能测试)

6:
稳定性测试:
  以正常负载或略高于正常负载来对系统进行长时间的测试,  一般来说12小时  7*24小时
7:什么时候需要做性能测试:
    业务系统对性能有明确的要求性能验收-A    性能测试:甲方或者相关方对性能指标有要求
    需要评估业务系统的性能效率性能评估-B    负载测试:不断加压获取指标数据进行评估
    验证在高并发下,系统业务是否有问题-功能缺陷发现  压力测试:发现死锁问题,内存泄露问题,垃圾回收问题,缺陷发现
    验证在高并发下,技术架构是否有问题-技术缺陷发现/性能调优验证在高并发下,系统是否可靠运行-稳定性缺陷发现  稳定性测试:长时间跑
    验证在系统变更后,系统性能表现变化情况-基滩对照C  基准测试:基准对照

8:
性能关键指标破析
  
1:并发用户数
  
2:吞吐量
  
3:点击数
  
4:响应时间
  
5:资源使用率
  6:思考时间

9:性能测试流程
  
1:性能需求分析(卖家模块性能测试)  哪些核心场景需要做性能测试
  
2:制定测试计划  谁做,什么时候做
  3:
编写测试方案(用例)  编写测试用例
    
业务测试用例,性能自动化脚本开发,编写测试用例这块就已经可以开始做脚本开发了
  4:
搭建测试环境
    网络延时注入,导入数据,性能监控工具开销的剔除(监控工具cpu比例0.几可以剔除)
  5:
构造测试数据
  6:性能脚本的开发
  7:执行测试
  8:结果分析/测试报告

 3:性能测试分析与调优

1:Tomcat配置和调优
  1:设置Tomcat堆内存,优化新生代老年代之间的比例  垃圾回收机制
    内存分配区域,区域新生代分配一段时间,老年带分配一段区域,区域满了就可以回收,没慢就不用回收,堆内存越大,那么肯定回收起来越慢
    新生代,老年代:监工盘查的时候,正在干活就放在后面区域,每次来都在干活就可能放到老年代里去了,老年代的内存回收频率和次数远远低于新生代
            新生代可能几s就回收一次,老年代可能1天才几次---正规服务器可以这样,小的虚拟机估计老年代也要几分钟回收一次,根据访问量并发数量来
    老年代这个堆空间通常比年轻代的堆空间大,并且其空间增长速度较缓
  
visualvm工具:监控GC,和线程死锁问题
  2:修改Tomcat线程数  配置Tomcat最大链接数,配置
  3:
修改日志的级别  让日志记录得不要太频繁
  4:JVM GC:设置新生代老年代的比例,老年代大一些2倍
    调大堆内存也是GC的优化
  5:visual监控java程序,监控死锁,查看新生代老年代回收次数和速率
2:Nginx调优
  1:
配置负载策略,不同的策略也会产生不同的性能
    权重,ip_hash
  2:
nginx还可以配置前端界面图片和其他某些格式的压缩
3:Mysql调优
  1:设置mysql最大连接数
  2:Mysql慢查询优化
    加索引,
加外键索引(ref级别),加唯一索引,主键索引等各种索引

4:性能分析与调优的过程

1:性能现象:tps,rt,错误率  有没有问题  有问题的话这就是现象,a没有达标,值超了,有问题进入下一步  
2:全局定向:cpu,内存,磁盘,网络
3:局部剖析:进程,配置,代码层,架构层
简单场景分析:
    假设压测完成后cpu一直下不来的场景
  1:
看服务器资源情况,使用grafana查看,一段时间对比  
  2:
jmeter压测结束后查看grafana监控发现 user+system 系统加用户加起来一起差不多25%    cpu下不来
  3:
分析服务器    top
  4:
分析java进程    容器级别
  5
:找到这个一直使用资源的进程 jps和top  是pid 7 一直使用cpu在25%左右
  
8:到底是哪一个线程导致的cpu高      查看一个进程里开辟的线程参数:top -H -p 7      7是进程号,H查看线程资源,p通过进程id查看指定进程的状态
    看到是pid=77的线程占用资源
  9:
进程的线程分析  --堆栈信息,堆栈记录了所有线程的东西,线程有问题,堆栈一定能看到
  10:
jstack 7 > miaosha.txt    把进程为7的堆栈信息写入一个txt文件便于分析
  11:
在堆栈信息里面记录了线程的信息,使用的线程id  tid==77  线程号  ,堆栈信息文件里的线程号一般使用 16进制记录的
    找到日志信息给研发

5:redis相关  击穿,雪崩现象解读

redis缓存击穿:一个数据,少量数据访问,改加载的没加载,这时候导致击穿到db获取数据
  一个值拿不到还是要去击穿缓存去db里拿数据,比如查询aaa对应键的值redis缓存没有,没有就去db数据库拿,拿完之后可能写到缓存  这就是击穿
  
redis避免频繁访问数据库,redis本身就是保护db,tomcat想去拿数据做一层保护,保护db让去缓存拿数据
  
缓存的key设置一定时间,比如2天,隔多久更新一次,在刚好过期的时间点上大量请求发到redis,这时候redis没这个资源的,还会去数据库请求数据
    这个时候拿不到,就去数据库拿,被击穿了,失去保护的意义了
大量击穿,最后造成雪崩

 6:性能测试实战

1:why:性能测试目标,为什么要做性能测试,目标
  
性能评估:没有确切的需求  对于系统性能没有底
  性能验证:有确切的需求   满足客户的需求
  缺陷发现:发现功能测试发现不了的缺陷  提升质量

  核心指标:测试什么,监控什么
    系统容量:
      静态用户量  数据库用户量
      
在线用户量  登录用户量
      并发用户量  正在访问的量
    
处理速度      每秒请求数。TPS
    
响应时间      RT,最小,最大,平均响应时间
    
资源使用率     cpu/内存/网络/IO
2:where:项目与测试环境
    项目环境搭建
        阿里ECS服务器
    压测工具搭建
        windows/linux
        jmeter
    监控平台搭建
        Nmom
    真实环境模拟
        1:网络延时注入
        2:数据库存量用户导入    
        3:思考时间设置
        4:监控工具开销剔除
3:what:性能测试范围  要测试什么
  单聊场景
  群聊场景
  登录场景
  用户连接数场景
  搜索接口场景
  .....等
4:when:性能测试时机
  基本功能就绪,可立即开展
  
系统发送较大变更,开展基准对照
  性能bug修复,回归测试
5:who:性能测试责任人
  性能测试工程师牵头。开发分析,运维协助
6:how:性能测试如何开展
  提取性能场景
  
jmeter脚本开发
  监控与指标获取:中间件
  压测与调优

 7:Nginx

Nginx:负载均衡
Nginx.conf  配置文件,可以设置监听设置和转发配置
  1:配置监听的机器ip和端口
  2:配置转发机制,默认轮询,weight权重,ip_hash依据ip分配,least_conn哪个访问少转发那个
  3:Nginx还可以设置压缩图片

8:Tomcat

Tomcat:web应用服务器,提供http服务的
Tomcat有个server.xml文件:可以进行各种各样的设置
Tomcat优化:
  1:
设置Tomcat堆内存:修改堆内存可以一定程度上优化Tomcat的性能
  2:
Tomcat的线程数优化    可以设置1000
  3:

 9:jmeter脚本开发

1:什么是集合点?设置集合点有什么意义?
  在性能测试过程中,需要模拟大量用户在同一时刻,访问系统并同时操作某一任务,
  可以通过配置集合点来实现,多个用户同时进行某操作。    比如:秒杀
2:什么是think time ?它的作用是什么?
  思考时间是指用户在进行操作时,每个请求之间的间隔时间,在测试脚本中,
  思考时间体现为脚本中两个请求语句之间的间隔时间。设置思考时间是为了更加真实的模拟用户操作
3:jmeter和lr有什么区别?有什么lr可以做,jmeter不可以做?
  Jmeter便捷简单,LD安装包大,1G多
  Jmeter没有IP欺骗功能,LR有IP欺骗功能,指在一台PC机上可以模拟多个IP地址分配给并发用户,能够更加真实的模拟实际的应用环境
  Jmeter支持代理录制脚本,使用Badboy,LR支持录制脚本,方便使用
  LR体积大,消耗的资源比Jmeter高,高并发情况下,LR可能出现压力机资源瓶颈
  Jmeter只支持WEB、FTP和数据库方面的性能测试  LR支持协议多,能覆盖绝大多数应用,功能强大
  Jmeter不支持网速模拟,LR支持网速模拟
  并Jmeter并发模型单一,LR支持多种并发;
  Jmeter是开源的,可根据需要更改源代码,LR可附加函数库;
  Jmeter报表分析数据较少,LR报告监控的性能指标丰富,界面美观;

 10:性能测试基础题目

1:什么是负载测试?什么是性能测试?
  负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担,在这种测试中,
    将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。
    负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。
  性能测试主要使用场景测试软件系统的性能是否满足生产性能的要求,包括负载测试强度测试数据库容量测试基准测试以及竞争(并发,用户)测试

2:性能测试包含哪些测试?(至少举出三种)
  负载测试、压力测试,稳定性测试,基准测试

3:简述性能测试步骤
  第一步:需求分析、测试计划,设计测试用例
  第二步:测试设计和开发(测试脚本录制及调试,测试场景设计)
  第三步:测试执行(测试环境搭建,场景部署,场景执行,监视场景)
  
第四部:测试结果分析,性能问题定位,测试报告评估

4:
什么时候可以开始执行性能测试?
  功能测试通过,一般需要进行性能测试的系统,
  都是用户量比较大、业务使用比较频繁、比较重要的功能模块

5:
响应时间和吞吐量之间的关系是什么? 
  当系统吞吐量未达到系统处理极限时,系统性能不会衰减,交易平均响应时间一般也不会递增,当系统达到吞吐量极限时,
  
客户端交易会在请求队列中排队等待,等待的时间会记录在响应时间中,故交易平均响应时间一般会递增

6:软件性能测试的应用领域有哪些?
  能力验证:某系统能否在A条件下具有B能力
  能力规划:如何使系统具有我们要求的性能能力或者某种可能发生的条件下,系统具有如何的性能能力?
  性能调优、缺陷发现。

7:
对于Web系统的响应时间,行业中被广泛认可的用户可以接受的时间是多少秒?
  2/5/10S

8:
在性能测试中,通常需要关注哪些性能指标?
  响应时间、并发数、吞吐量、系统性能计数器、思考时间

9:
请描述什么是吞吐量?
  单位时间内系统处理用户的请求数。
  从业务角度看,吞吐量可以用:请求数/秒、业务数/秒、人数/天或处理业务数/小时等单位来衡量
  从网络角度看,吞吐量可以用:字节/秒来衡量
  对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,它能够说明系统的负载能力

10:TPS是什么意思
  单位时间内处理的事务数

11:TPS和QPS
  当⼀次⽤户操作只包含⼀个请求接⼝时,TPS和QPS没有区别。当⽤户的⼀次操作包含了多个服务请求时
  Qps基本类似于Tps,但是不同的是,对于⼀个页⾯的⼀次访问,形成⼀个Tps;但⼀次页⾯请求,可能产⽣多次对服务器的请求,服

    务器对这些请求,就可计⼊“Qps”之中

12:请举例说明什么时候广义并发和严格并发?
  广义并发:广义的并发实际上是在一个时间内操作事务的虚拟用户,是存在。
    对地铁这个系统而言,每个时间都有新来的人,也有走的人,大家做的事情基本都相同,乘地铁。假定某个时刻地铁大厅中有10000人,检票口候车的有100人,
    刚刚开走的地铁上乘有2000人,那此时对考察的系统(列车)而言,并发就是2000人,而如果考察的是检票处,则并发为100人,
    同样,如果考察的系统是地铁大厅,那此时的并发就是10000人。这种并发我们一般称之为“广义并发”。
  
严格并发:是指大量用户在同一时刻在软件系统上做完全相同的功能操作或相同类型的功能操作。例如双十一的秒杀商品

13: 一个web系统,用户最关注的性能指标是什么?
  响应时间

14:一份性能测试计划,通常包含哪些内容?
  测试目的,测试质量目标,测试环境,测试阶段和范围,测试策略,测试时间安排,测试用例

15:如何识别性能瓶颈?
  找出最先出问题的点,即短板,再进行分析。
  首先,要先做一份现有系统的性能测试报告,如CPU消耗内存消耗磁盘I/O网卡I/O、带宽、页面交换等,
    如果发现其中一项或多项达到瓶颈,那么就要考虑是硬件不够导致性能上不去,还是系统实现不合理导致满了;
    如果是硬件问题,那么就早考虑扩容
    如果是资源都没到极限或确认系统实现有问题,那么就要针对性的对系统相应功能进行相应的拆解或者是监控函数级的耗时

16:性能测试过程中,需要监控OS的哪些资源?
   cpu,内存,磁盘,网络

17:请解释什么是资源竞争?
  多个用户都去用同一个东西,但这个东西被一人锁定,就产生了资源竞争
  竞争锁

18:验证系统在100 TPS下,响应时间小于3s,对于这样的需求,应该采用哪种性能测试方法?
  能力评估

19:从管理员角度视角,主要关注系统性能的哪些指标?
  ①系统的响应时间;
  ②系统状态的相关信息,如:CPU、内存、应用服务器状态、JVM可用内存、数据库的状态等;
  ③系统的可扩展性,处理并发的能力;
  ④系统可能的最大容量,可能的性能瓶颈,通过更换哪些设备或是进行哪些扩展能够提高系统性能;
  ⑤长时间运行是否足够稳定,是否能够不间断的提供业务服务等;
  
20:从开发工程师视角,主要关注系统性能哪些指标?
  (1)系统架构:架构设计是否合理;
  (2)数据库设计:数据库设计是否存在问题;
  (3)代码:代码是否存在性能方面的问题,系统中是否有不合理的内存使用方式;
  
(4)设计与代码:系统中是否存在不合理的线程同步方式,系统中是否存在不合理的资源竞争

21:请描述压力测试和负载测试的区别?
  压力测试的预期结果就是系统出现问题,我们考察的是系统处理问题的能力。
  负载测试是考察软件系统在既定负载下的性能表现。
  
压力测试是能让我们识别系统的弱点和在极限负载下程序将如何运行

22:对于一个缺乏性能明确需求的项目,你是如何提取性能需求的?
  与客户交流,查看历史日志,跟同类产品对比,根据以往的经验

23:一个完整的性能测试用例应该包含哪些内容?
  测试用例编号,项目标题,测试标题,重要级别,预置条件,输入,操作步骤,输出,测试结果,测试者和时间

24:性能测试的步骤以及性能测试最难的地方是什么?
   性能测试步骤:
    1:准备工作,包括系统基础功能验证、测试团队组建、工具的选择、预先的业务场景分析。
    2:测试计划。
    3:测试脚本设计与开发
    4:测试执行与管理。
    5:测试分析
  
性能测试最难的地方:
    性能测试模拟真实负载是比较困难的,性能测试很多情况下只能作为参考,用来发现明显的性能问题。如果要做到100的准确,还是要做线上的即时监控才行

25:如何进行性能测试,如何看它的性能?
  1:性能需求分析:明确到底要不要做性能测试,明确被测系统特点、基本业务、关键业务、用户行为,性能测试范围,明确性能测试目标及性能指标,性能测试策略
  2:进行测试用例的设计、测试脚本开发与调试、测试环境和测试数据的准备
  3:利用jmeter工具进行性能测试。
  4:得出测试数据,进行系统优化,完成测试报告。
  
如果利用jmeter测试工具,利用聚合报告可以看出它的性能,根据性能测试数据与测试性能指标进行比对,达到性能指标说明性能良好

26:APP性能测试的关注点?
  1、响应
  2、内存
  3、cpu
  4、FPS (app使用的流畅度)
  5、GPU过度渲染
  6、耗电
  7、耗流

27:压力测试怎么测,测过最大的用户量多少?
  1需求分析
  2场景建模
  3测试数据准备
  4脚本开发&调试
  5脚本执行&记录监控
  6结果分析&瓶颈定位
  7调优&验证,
  最大用户量是5000

28:
如何识别性能瓶颈?
  性能瓶颈分为:硬件瓶颈软件瓶颈
  性能瓶颈可以通过监控器来分析发现,这些监控器包括应用服务器监控web服务器监控数据库服务器监控器和网络监控器;
  他们可以帮助分析导致响应时间增加原因;性能度量一般包括响应时间、吞吐量、每秒点击率、网络延迟等等

29:
如果web服务器、数据库以及网络都正常,问题会出在哪里
  问题可能出在系统本身应用服务器、或为应用编写的代码中

30:你如何设计负载?标准是什么?
  负载测试计划多少用户数量、使用什么类型的机器、以及在什么环境下进行。
  主要基于两个重要的文档,任务分布图事务信息,
  
任务分布图告诉在负载时间段内,某一事务使用的用户数高峰使用率及低峰使用率均来自该文档,事务信息告诉我们事务名及优先级,在设计场景可以参考

21:软件为什么会有性能问题?
  软件在高负载访问下,业务逻辑比较复杂。软件是运行在环境当中的,不同的软硬件资源都会引起性能问题,还有软件本身的代码、数据库等引起的性能问题

22:请解释什么是内存泄露,内存泄露的危害有哪些?
  内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能回收它们,因为它们正在被引用
  对于长时间运行的程序来说,内存泄漏会使程序占用的内存一直增加,最后就会出现内存耗尽而导致宕机,即使不宕机也会是系统的运行越来越慢,
  
还有就是有些内存有其他资源,比如数据库连接,网络连接等等这些,如果在网上会出现阻塞。

 

posted @ 2022-05-12 22:32  至高无上10086  阅读(161)  评论(0编辑  收藏  举报