04 2022 档案
摘要:现象 tps出现大幅波动,并慢慢降低,甚至降为0,响应时间随之波动,慢慢升高 通过jstat命令看到,JVM中old区不断增加,FullGC非常频繁,对应的FGC消耗的时间也不断增加 通过jconsole、jvisualvm可以看到,堆内存曲线不断上升看,接近上限时,变成一条直线 应用程序日志报错:
阅读全文
摘要:现象 查询接口,TPS比较低,响应时间比较长,此时数据库服务器的CPU占用率很高,应用服务器负载反而比较低。(如果数据库和应用程序安装在同一天机器上,数据库应用占用的CPU比较高,应用程序多占CPU较低) 案例 下面是某接口压测结果: 此时数据库服务器监控如下: 应用程序服务器监控如下: 从压测结果
阅读全文
摘要:案例 压测过程中,某个接口,30个线程测试,平均响应时达到300多毫秒,TPS是70多,但是此时服务器资源占用都比较低。 问题分析 通过Jprofiler定位响应时间长的问题 1、Jprofiler安装配置 https://www.cnblogs.com/daydayup-lin/p/1614703
阅读全文
摘要:现象 压测过程中,发现应用服务器CPU使用率比较高(80%) 这种现象产生的原因,一可能是接口性能非常好,比如响应时间10ms,TPS很高,此时CPU使用率很高是正常的,不需要做代码层面的优化;还有一种情况就是接口性能不好,可能响应时间>200ms,TPS很低,这种情况下就需要定位问题并做优化了。
阅读全文
摘要:定义 在多线程情况下,如果一个线程拥有某个资源的锁,那么这个线程就可以运行资源相关的代码,其他线程就只能等待其执行完毕后,才能继续争夺资源锁,从而运行相关代码。 场景 车票售卖系统,当剩余车票为1张,此时有A/B/C/D四个用户同时来购票,系统开启了四个线程来执行业务操作。 上图中, 首先A线程刚执
阅读全文
摘要:定义 线程死锁就是有两个线程,一个线程锁住了资源A,又想去锁住资源B,另外一个线程锁定了资源B,又想去锁定资源A,两个线程都想去得到对方的资源而又不愿意释放自己的资源,从而造成了一种互相等待、无法执行的情况。 现象 出现死锁后,TPS降为0,性能测试工具无法得到服务器的响应, 服务器硬件资源空闲 通
阅读全文
摘要:JVM相关知识是性能测试必须要了解的,同时也是面试中经常遇到的问题。 JVM内存管理机制 JVM简介 Java采用了自动管理内存的方式 Java程序是运行在JVM之中的 Java的跨平台是基于JVM的跨平台特性 内存的分配和对象的创建是在JVM中 用户可以通过一系列参数来配置JVM JVM运行时区域
阅读全文