业务背景:
最近公司研发了一款对并发要求比较高的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网站遇到访问高峰时,容易发生服务器 ...
随机推荐
-
SQL语句 多表基本操作
创建四张表学生表:学号(Sno).姓名(Sname).性别(Ssex).年龄(Sage)教师表:教师编号(Tno).教师姓名(Tname)课程表:课程编号(Cno).课程名(Cname).教师编号(T ...
-
导出csv文件示例
导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...
-
iis网站发布相关问题
最近在公司的服务器上发布了一个简单的web应用,整个做下来到上线用了将近2天时间,期间出现了各种问题,现在发出来供大家参考: 1.iis上发布后出现访问网站,出现“IIS服务器被配置为不列出此目录的内 ...
-
修改Eclipse的 workspace目录
1.进入 Window > Preferences > General > Startup and Shutdown 选中 Prompt for workspace on start ...
-
C# 委托:把方法组合到一个数组中使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
-
学习JQuery中文文档之index()函数
最初认识index()是在轮播图中,获取当前点击对象在数组中的位置.那时候,对index()的使用只有eq($(this).index()),看了文档之后,才知道自己有多幼稚! <!DOCTYP ...
-
NSString 的常见方法
NSString的常用方法 创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfURL:(NSUR ...
-
javascript动画效果之任意效果任意值
通过学习,我发现当同一个ul下的li标签如果想要不同的效果,那怎么办? 比如第一个li是width变化,第二个li为透明度(opacity)变化,而opacity的值和width的值类型不同,不能通用 ...
-
uri&;url
统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来. 拿人做例子,假设这个世界上所有人的名字都不能重复,那么名字就是URI的一个实例,通过名字这个字符串就可以标识出唯一的一个人.现实当 ...
-
HttpServletResponse 之 sendError( )
直接返回http 401状态,提示重新登录 response.sendError(401, "当前账户未登录或会话失效,请重新登录!) HTTP状态码列表: 100Continue继续.客户 ...