首页 > 其他分享 >记录一次麻烦的压力测试

记录一次麻烦的压力测试

时间:2024-10-22 17:21:50浏览次数:5  
标签:记录 数据库 time nginx 麻烦 测试 sql 执行 cpu

前言:

为了提升性能响应,部署了nginx转发双网关的方式进行压力测试

系统结构图 

 

正文:

第一次执行,发现数据量太大导致数据库服务器的cpu占用过高。

重跑压测脚本,观察数据库服务器资源占用情况,发现压测服务对应的进程占用大量的cpu资源,怀疑是某个数据库sql没有建索引。

占用期间执行sql

SELECT
    s.sid,
    s.serial#,
    s.username,
    s.status,
    ROUND(s.last_call_et / 60, 4) AS elapsed_time_sec, 
    ROUND(q.cpu_time / 1000000, 4) AS cpu_time_sec, 
    q.sql_id,
    q.sql_text,
    s.module
FROM
    v$session s
JOIN
    v$sql q ON s.sql_id = q.sql_id
WHERE
    s.status = 'ACTIVE'
    AND s.username IS NOT NULL
ORDER BY
    cpu_time_sec DESC;

sql输出

执行sql                          	        cpu_time
select * from * where arg1 = * and arg2 = *             >5S
insert into **                             >3S
insert into **                             >1S 
update * set * where arg3 = * and arg4 = *              >1S    

优先看了select、update后的where语句是否添加了索引。排查后确认其中select语句没有索引,添加后解决数据库服务器cpu过高问题,select语句耗时时间明显下降。

 

第二次执行,没注意服务器资源占用。重复启动服务导致内存超过80%,不符合压测硬性指标

排查思路:服务部署前计算服务器的可用内存【(总内存-已用内存)×0.8】,服务部署时使用的jvm等参数配置是否会超出可用内存,部署后已经性能执行前检查可用内存。

本次执行失败的原因是,通过jps -l命令查询看到了同一个应用同时启动的两个,应该是第一次启动的服务没有正确关闭。

 

第三次执行,数据库表空间占满内存,联系dba。

询问dba主要解决办法是1、删除数据库的执行日志;2、扩容磁盘空间

问题分析:第二次和第三次问题其实完全可以避免,在性能测试前尤其是可靠性测试,执行前需要记录当前已用磁盘、数据库表空间等信息,如果存在用满的情况直接就能看到。

 

第四次执行,第七个小时开始出现大量错误,到第八个小时恢复正常

如下图

 

把jmeter记录文件拿下来查看失败记录,很明显nginx调用网关报错了

 

服务器报错

 检查了本地数据库,没有失败的交易流水。

这里初步怀疑可能是nginx连接数不够,把worker_connections改为102400

 

第五次执行,执行到第八个小时开始出现大量错误(彻底崩溃)

 

查看nginx日志

 

网上搜了下解决办法,no live upstreams while connecting

增加keepalive以及max_fails=1 fail_timeout=10s配置,

最终配置参数

 

 

解决

 

 

总结:

1、并发测试时关注一下sql执行数据,特别是数据量大的时候sql异常信息会特别明显

2、在性能测试前(尤其是稳定性测试),先记录服务器(应用、数据库)磁盘、内存,防止占用过高导致执行失败

3、用nginx做服务转发时,注意配置线程数、alive等以便支持最大并发

标签:记录,数据库,time,nginx,麻烦,测试,sql,执行,cpu
From: https://www.cnblogs.com/zxylock/p/18493349

相关文章

  • 20241021 校测T1 致敬传奇捆绑测试题目(Perm) 题解
    题解:致敬传奇捆绑测试题目Perm来自不知道什么时候的回忆。给定正整数\(n\),一个\(1\simn\)的排列\(p\)是一个好排列,当且仅当使得对于任意\(1\lek<n\),都有\(\sum_{i=1}^kp_i>p_{k+1}\)。现在请你求出字典序第小的好排列\(p\)。\(1\len\le10^6\),\(1\lek\le......
  • 相关文章整理记录
    C3:Cross-instanceguidedContrastiveClusteringhttps://arxiv.org/pdf/2211.07136v4提出了一种新颖的对比聚类方法,跨实例引导的对比聚类(C3),它考虑了跨样本关系以增加正对的数量,并减轻假负、噪声和异常样本对数据学习表示的影响。特别是,我们定义了一个新的损失函数,该函数使......
  • 2024牛客暑期多校训练营9 - VP记录
    A.ImageScaling签到题,找出举行宽高以后直接除以它们的\(\gcd\)使它们互质即可。(这道题居然会有人又WA又RE,我不说是谁)点击查看代码#include<cstdio>#include<cstring>usingnamespacestd;constintN=505;intn,m,x1,y1,x2,y2;charg[N][N];intgcd(intx,int......
  • LongBench: 一个双语多任务的长文本理解基准测试
    LongBench:开创性的长文本理解评估基准在人工智能和自然语言处理领域,大语言模型(LLMs)的出现无疑是一场革命。这些模型在各种语言任务中展现出惊人的能力,但它们也面临着一个共同的挑战-长文本理解。大多数LLMs只能处理几千个token的输入,这严重限制了它们在处理长篇文档、报......
  • 功能测试的用例评审需要关注哪些环节
    功能测试的用例评审需要关注以下环节:一、测试用例的完整性;二、测试用例的一致性;三、测试用例的可行性;四、与需求的对应关系;五、错误和改进建议;六、测试用例的可理解性;七、风险评估。测试用例的完整性即确保测试用例涵盖了所有的功能需求和测试场景。一、测试用例的完整性确保......
  • 探索Playwright:前端自动化测试的新纪元
    作者:京东保险张新磊背景在前端开发中,自动化测试是确保软件质量和用户体验的关键环节。随着Web应用的复杂性不断增加,手动测试已经无法满足快速迭代和持续交付的需求。自动化测试通过模拟用户与应用的交互,能够高效地执行重复性测试任务,加快测试周期,提升测试覆盖率,从而更早地发......
  • 单元测试方法及其运用
    引言随着软件规模和复杂度的不断提升,开发人员面临着如何保证软件质量与稳定性的挑战。单元测试作为软件测试中不可或缺的一环,能够在早期发现代码中的问题,从而提高软件的可靠性。本文将结合我参与的一个软件项目,详细介绍单元测试中的静态测试与动态测试方法,以及如何确定白盒......
  • 如何进行前端单元测试
    ​前端单元测试的引入为软件开发流程带来了更高的质量和稳定性,需要遵循以下步骤:一、理解单元测试的重要性;二、选择合适的测试框架;三、编写有效的测试用例;四、模拟外部依赖;五、持续维护和优化测试。单元测试的开始,是对前端代码的核心功能进行验证。一、理解单元测试的重要性单......
  • 关于selenium 最近的更新记录
    1、导入元素操作方式有所变动,故导入的内容也要变更:fromselenium.webdriver.common.byimportBy2、获取元素的语句语句:driver.find_element(By.操作方式,"值")如获取ID:driver.find_element(By.ID,"值")获取类名:driver.find_element(By.CLASS_NAME,"值")获取CSS样式:driver......
  • 第7课—设计测试用例方法之白盒测试法(了解)
    白盒测试技术(1)白盒测试(也叫结构测试或者逻辑驱动测试)定义:白盒测试也叫透明盒测试,检查程序内部结构及路径一是否符合规格说明,二是否符合其代码规范。(2)白盒测试常见方法:a.语句覆盖;b.判断覆盖(也称“分支覆盖”);c.条件覆盖;d.判断、条件覆盖;e.条件组合覆盖;f.路径覆盖(分为......