基于web网站项目的性能测试结果分析
业务背景:
最近公司研发了一款对并发要求比较高的web项目,需要对其压力测试,模拟线上可能存在的问题,这个过程中遇到一些很多问题,这里重新梳理一下思路,希望能给遇到同样问题的小伙伴提供一个参考。
工具描述:
压力工具使用的是:Loadrunner
服务器监控使用的是:nmon
数据库:oracle
web容器:Tomcat + war
项目就好像是一个木桶,性能测试要找到最短的那个板,也就是系统的瓶颈,但是有些部分应用的一些参数配置可能会变成系统的瓶颈。
圈重点,以下是这个性能测试过程中踩的参数配置的坑
1、数据库线程数
oracle是连接数限制的,默认是150个,如果不把这个放开,只需要超过150个连接就开始等待了,等待时间超过了,就认为失败了。开始的时候没有注意到这块,连接数一直上不来,放开了就好了。
查看当前的数据库连接数:select count(*) from v$process ;
修改数据库最大连接数:alter system set processes = 300 scope = spfile;
修改完之后要重启数据库:
关闭数据库:shutdown immediate;
启动数据库:startup;
另外测试过程需要关注数据库的当前连接数来辅助判断问题
当前的session连接数:select count(*) from v$session
2、tomcat连接数配置
tomcat连接数的配置在 tomcat根目录/conf/server.xml中,
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" maxConnections="200" acceptCount="100"/>
maxConnections:最大连接数
acceptCount:最大等待数
tomcat最大连接数取决于maxConnections这个值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。
3、数据库连接池配置
项目使用的是druid连接池,主要关注以下配置,最大连接数以及等待时间
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="10" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="10000" />
最后补充一点系统性能的优化方案(一知半解,先列一下,后续继续学习):
1、SQL执行效率太低
这块可以考虑优化sql本身,比如说查询频繁的加索引,插入频繁的去索引,如果都频繁还可以考虑读写分离,加缓存处理。
2、代码发生死锁(调整代码业务逻辑)
在高并发测试中比较容易检查出来的就是死锁的问题,这块需要开发检查自身的代码逻辑,加一些事务锁之类。
这里附上ORACLE查询锁表及解锁的SQL语句:
-- 查看锁表进程SQL语句:
select * from vsessiont1,vsession t1, vsessiont1,vlocked_object t2 where t1.sid = t2.SESSION_ID; -- 查看导致锁表的sql语句是那一条
select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
from vsqlareaa,vsqlarea a, vsqlareaa,vsession s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#; –- 杀掉锁表进程:
–- 通过上面的查询获取SID和serial#,替换下面的x,y,就可以解除被锁的状态
alter system kill session ‘x,y’;
新手上路,有问题欢迎指正【手动谢谢】~
基于web网站项目的性能测试结果分析的更多相关文章
- 基于web的IM软件通信原理分析
关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...
- VS2010新建Web网站与新建Web应用程序的区别
在Visual Studio 2010中,除了可以使用“创建Web应用程序”的方式来构建自己的Web项目之外,还可以通过创建“Web网站”的方式来构建Web项其中,Web网站的创建方法:打开Visua ...
- VS2010新建Web网站与新建Web应用程序的区别 (转)
在Visual Studio 2010中,除了可以使用“创建Web应用程序”的方式来构建自己的Web项目之外,还可以通过创建“Web网站”的方式来构建Web项其中,Web网站的创建方法:打开Visua ...
- Web应用程序与Web网站及部署在IIS中
在Visual Studio可以创建 Web 应用程序项目或网站项目.通过选择 新建项目 或 打开项目 创建或打开一个 Web 应用程序项目在Visual Studio 文件 菜单. 通过选择 新建网 ...
- [ASP.NET]Web网站与Web应用程序区别
[ASP.NET]Web网站与Web应用程序区别 本文链接:https://blog.csdn.net/a954553391/article/details/86403521 前言:在项目开发中, ...
- 转:Web网站性能测试分析及调优实例
1.背景 前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上线时间非常紧迫,关注度也很高,所以对于整个团队的压力也 ...
- Web网站性能测试分析及调优实例
1 背景 前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上线时间非常紧迫,关注度也很高,所以对于整个团队的压 ...
- Web项目性能测试结果分析
1.测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源.数据库服务器资源等几 ...
- Web网站的性能测试工具
随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器 ...
随机推荐
- VUE 关键字
转 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- Life In Changsha College - SQA计划和系统测试规程
一. SQA计划 (1) 对软件进行测试,保证软件不出问题: (2) 项目需要符合IEEE.ISO等软件工程标准 (3) 软件拥有基本的流程图.类图.数据流图等 (4) ...
- [SD.TEAM语录]AC语录
决定做了就要马上去做,不要有任何犹豫 本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士) 转载自[宝宝巴士SuperDo团队] 原文链接: http:// ...
- Java中的集合(六)继承Collection的Set接口
Java中的集合(六)继承Collection的Set接口 一.Set接口的简介 Set接口和List接口都是继承自Collection接口,它与Collection接口中功能基本一致,并没有对Col ...
- 获取元素节点的子节点 & 获取文本节点
1. 获取元素节点的子节点(**只有元素节点才有子节点): ①. childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 ...
- SpringBoot工程创建的三种方式
一. 通过IDEA的spring Initializer创建 1. 打开创建项目面板 File->New->Project->Spring Initializr 2. 填写Maven ...
- 关于CAS单点登录配置文件误修改导致的JSP报错问题
weblogic环境下搭建CXF环境时,为了避免CAS拦截webservice服务URL所以设置CAS为不拦截,无修改了CAS配置的其它地方导致工程启动正常,一旦访问就会报JSP的错误. [Servl ...
- 【JVM】关于OOM的二三事
组织架构 严格来说,StackOverflowError和OutOfMemoryError都属于错误,而不是异常. java.lang.StackOverflowError public class ...
- ansible取出register变量中最长字符串
背景 在用ansible撰写一个etcd恢复的playbook时,有一个操作是获取etcd启动时的"initial-cluster"启动参数,该参数在etcd集群不同节点不一致,需 ...
- Java实现 蓝桥杯 算法训练 多阶乘计算
试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...