快捷搜索:  汽车  科技

面试题接口测试怎么测(性能测试经典面试题)

面试题接口测试怎么测(性能测试经典面试题)f、如果老年代执行Full GC之后,无法进行对象的保存,则会产生OOM异常,OutOfMemoryError异常。  e、如果老年代也满了,那么将产生Major GC(Full GC)回收,将进行老年代的清理b、如果伊甸园区内存不足,那么会自动执行Minor GC回收 操作,将伊甸园区的无用内存空间进行清理,Minor GC的清理范围只在Eden园区,清理之后会继续判断Eden园区的内存空间是否充足?如果内存空间充足,则将新对象直接在Eden园区进行空间分配。c、如果Minor GC回收后伊甸园区的内存空间依然不足,则会判断存活区的空间,如果存活区还有剩余空间,那么会将Eden区部分活跃对象保存在存活区,随后继续判断Eden区的内存空间是否充足,如果内存充足怎则将新对象直接在Eden园区进行空间分配。d、如果存活区没有内存空间,则继续判断老年区。则将部分存活对象保存在老年代,而后存活区将

上一期我们公布了性能测试经典面试题的第一部分和第二部分,本期我们继续更新性能测试经典面试题的第三部分。

51:GC回收的流程

运行时有新的对象时,就会涉及到内在空间的使用问题,正常每个栈内存为4k,每个堆内存8k。

GC回收时一般是按以下流程进行:

a、判断Eden区是否有内存空间,如果此时有内存空间,则直接将新对象保存在伊甸园区。

b、如果伊甸园区内存不足,那么会自动执行Minor GC回收 操作,将伊甸园区的无用内存空间进行清理,Minor GC的清理范围只在Eden园区,清理之后会继续判断Eden园区的内存空间是否充足?如果内存空间充足,则将新对象直接在Eden园区进行空间分配。

c、如果Minor GC回收后伊甸园区的内存空间依然不足,则会判断存活区的空间,如果存活区还有剩余空间,那么会将Eden区部分活跃对象保存在存活区,随后继续判断Eden区的内存空间是否充足,如果内存充足怎则将新对象直接在Eden园区进行空间分配。

d、如果存活区没有内存空间,则继续判断老年区。则将部分存活对象保存在老年代,而后存活区将有空余空间。

e、如果老年代也满了,那么将产生Major GC(Full GC)回收,将进行老年代的清理

f、如果老年代执行Full GC之后,无法进行对象的保存,则会产生OOM异常,OutOfMemoryError异常。  

52:JVM常见调优参数
  • -Xms:初始堆大小
  • -Xmx:最大堆大小 初始堆大小一般会设置为与最大堆大小一至,对于32位的操作一般-Xmx设置为1.5G-2.5G即可,如果是64位的操作系统,一般不做限制。
  • -XX:NewSize=n:设置年轻代大小
  • -XX:MaxNewSize设置新生代最大空间大小
  • -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
  • -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
  • -XX:MaxPermSize=n:设置持久代大小
  • -Xss:设置每个线程的堆大小总内存大小: Max memory = [-Xmx] [-XX:MaxPermSize] number_of_threads * [-Xss]
53:JVM中内存为何分代

通过分代可以更好的处理内存的使用以及内存的回收。

54:如何判断一个对象是否应该被回收

通常出现以下情况时,可以将这具对象回收:

a、该对象没有与GC roots相连

b、该对象没有重写finalize()方法或finalize()已经被执行过则直接回收(第一次标记)、否则将对象加入  到F-Queue队列中(优先级很低的队列)在这里finalize()方法被执行,之后进行第二次标记,如果对象仍然应该被GC则GC,否则移除队列。

55:回收方法区回收对象

方法区回收价值比较低,主要回收废弃的常量和无用的类。

如何判断无效类:

a、该类所有实例都被回收(Java堆中没有该类的对象)

b、加载该类的ClassLoader已经被回收

c、该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方利用反射访问该类

56:垃圾收集算法有哪些

常见的垃圾收集算法有以下几种:

a、标记 -清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。

b、复制算法,“复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

c、标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

d、分代收集算法,“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。  常用的垃圾回收器一般都采用分代收集算法。

57:常见的垃圾回收器有哪些

常见的垃圾回收器主要包括以下几种:

1)串行:垃圾回收器 (Serial Garbage Collector)

Serial收集器,串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。

2)串行:ParNew收集器

ParNew收集器,ParNew收集器其实就是Serial收集器的多线程版本。

3)并行:Parallel收集器

Parallel收集器,Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。

4)并行:Parallel Old 收集器

Parallel Old 收集器,Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法

5)并发标记扫描CMS收集器

CMS收集器,CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。

6)G1收集器

G1收集器,G1 (Garbage-First)是一款面向服务器的垃圾收集器 主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时 还具备高吞吐量性能特征

面试题接口测试怎么测(性能测试经典面试题)(1)

58:类加载过程

面试题接口测试怎么测(性能测试经典面试题)(2)

59:如何找到JVM中最大可使用内存

Runtime类的freeMemory、totalMemory、maxMemory三个方法反映的都是java这个进程的内存情况,跟操作系统的内存有关系。

a、maxMemory()方法

获取java虚拟机可以从操作系统得到的最大的内存,以字节为单位。

如果在运行java程序的时候,没有添加-Xmx参数,那么就是64MB,即maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下从操作系统获取的最大内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp ClassPath -Xmx512m ClassName,那么最大内存就是512x1024x1024字节。

b、totalMemory()方法

获取java虚拟机现在已经从操作系统挖过来的内存大小,即java虚拟机这个进程当时所占用的所有内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里获取的,基本上是用多少挖多少,直挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。

c、freeMemory()方法

获取JVM已经挖到但是还没有占用的内存大小,如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可能会有些大。

60:如何通过不同于80的端口开启nginx?

为了通过一个不同的端口开启Nginx ,你必须进入/etc/Nginx/sites-enabled/ ,如果这是默认文件,那么你必须打开名为“default” 的文件。编辑文件,并放置在你想要的端口:

61:如何监控nginx服务器

通常有两种方法可以监控:status和ngxtop两种监控方法。

62:nginx中主进程与工作进程区别
  • 主进程:主要是配置和维护工作进程
  • 工作进程:主要是处理实际请求的进程  
63:ngx_http_upstream_module作用

ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。

64:nginx中什么是C10K问题

Like server 1 { listen 81; }

C10K问题是指无法同时处理大量客户端(10 000)的网络套接字。

65:Nginx是否支持将请求压缩到上游

可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。

66:Nginx如何配置负载均衡

在HTTP上下文中声明一个upstream指令

#scshop只是一个名字的代号,可以随便写 upstream ecshop { server 192.168.40.135:8081; server 192.168.40.129:80; }

在server上下文中声明调用分发的upstream指令

location / { root html; #下面这行代码是通过proxy_pass指令将客户端访问我们的请求分发到其它服务器上 #http后面的ecshop应该也upstream后面ecshop一至 proxy_pass http://ecshop; index index.php index.html index.htm; }  67:Nginx负载均衡算法

ginx负载均衡的算法通常包括:轮询、最少连接数、ip哈希、通用哈希、最少时间和随机。

68:HTTP协议的接口性能如何做

HTTP协议接口性能通常用两个函数来实现:web_submit_data函数和web_custom_request函数

69:类unix操作系统怎么监控系统资源

关于unix操作系统监控的工具也很多,我们平常用的最多的是nmon工具

70:CPU的工作原理

面试题接口测试怎么测(性能测试经典面试题)(3)

71:CPU监控工具

top、vmstat、sar、ps、iostat等

72:CPU是否到达瓶颈的指标

关于分析CPU是否到达瓶颈的指标如下:

  • 队列长度直观的反应CPU是否存在瓶颈
  • CPU的使用率,建议阀值一般不超过85%
  • 热密集应用程序,找出消耗CPU资源最多的进程
  • wa的值建议阀值不超过25% 否则表示磁盘不平衡  
73:VMM工作原理

面试题接口测试怎么测(性能测试经典面试题)(4)

74:VMM阀值

VMM有两个阀值:

minfree:  

--->空闲列表中可接受的实内存页面帧的最小数量,当空闲列表的大小低于这个数时,VMM开始替换页面,它持续窃取页面,直到空闲列表的大小达到maxfree。

maxfree:  

--->通过VMM页面替换空闲列表可达到的最大大小,当进程终止并释放它们的工作段页面或删除其页面在内存中的文件时,结果是空闲列表的大小可能会超过这个数。

75:内存是否到达瓶颈的指标

关于内存监控的主要指标:

  • 内存的使用率,一般阀值不超过85%,但即使超过85%也不能完全判断内存是不够用的
  • swap的使用,一般swap的使用都为零,如果大于零,说明RAM不够
  • pi与po的值,如果pi和po的值一直很小或者为0说明内存有问题
  • 监控每个进程所消耗的内存值
  • RSS显示为每个进程所消耗的实内存
  • CPU上下文切换次数  

本期的性能测试面试题以及答案的第三部分就到这里,下期继续更新第四部分,记得关注我们哟。

猜您喜欢: