关于压测过程中服务器报26612: HTTP Status-Code=500 (Internal Server Error)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuecancan/article/details/75003985

在压力测试过程中,总会出现各种各样奇怪的问题,有的是脚本的原因,像参数设置不合理,脚本逻辑错误等;也有服务器返回的各种错误,像:

Action.c(84): Error -26612: HTTP Status-Code=500 (Internal Server Error) for "https:..........."

这个原因可能是因为发的请求太密集,服务器无法响应导致。比如我压测的这支交易,平均响应时间接近2秒,这是单个接口的响应时间,在接口里来说算是很慢的,我发请求的方式是没有时间间隔的发送,中间没有加思考时间,2s内到达的请求肯定不止一个,所以服务器无法响应,最后只能抛出26612: HTTP Status-Code=500 (Internal Server Error) 这种错误。

Error -26612 HTTP Status-Code=500

04-16

cliamcase.c(473) Continuing after Error -26612 HTTP Status-Code=500 (Internal Server Error) for "http//192.168.90.250/crm/insure/hscrm/business/icc/claimcase/claimCaseAction.do?act=onQueryClaimCaseList&clientName=&_currentMenuId=12101" rnrnrnrn服务器为一个apache + 两个tamcat的形式,LoaderRunner测试时模拟50用户时偶尔包如上错误,后面ur为点击菜单事件,点击菜单后查询列表rnrn不知哪位高手有知道n[b]问题补充:[/b]n[size=large][color=red]确实claimCaseAction.do中报java.sql.SQLException,但是为什么一样的查询为什么测了很多次都正常只是有时候会报错呢[/color][/size]n[b]问题补充:[/b]n[size=large][color=darkblue]看来huangnetian 的回答感觉可能是分页查询的方法写的有问题,查询数据的DAO是集成自CommonDAO.java的,以实现分页功能,附近为CommonDAO.java ,请帮忙看一下 感激不尽[/color][/size]n[b]问题补充:[/b]n[color=red]各位先谢过,以下为异常和CommonDAO.javarnjava.sql.SQLExceptionrn at com.zhangsheng.hscrm.framework.common.base.CommonDAO.queryForPage(CommonDAO.java:109)rn[/color]rn[code="java"]rnpackage com.zhangsheng.hscrm.framework.common.base;rnrnimport java.sql.SQLException;rnimport java.util.ArrayList;rnimport java.util.List;rnrnimport org.apache.log4j.Logger;rnrnimport com.hsipcc.system.PageInfo;rnimport com.ibatis.sqlmap.client.SqlMapClient;rnrnrnpublic class CommonDAO rnrn protected SqlMapClient sqlMapClient = DAOConfig.getSqlMapInstance();rn rn public static String doCount = "yes"; //标识当前操作是否计算记录总数rn rn private static Logger logger = Logger.getLogger(CommonDAO.class);rnrn /**rn * 统计记录条数rn * rn * @param id -- SQLIdrn * @param parameterObject --查询参数rn * @return --统计结果rn * @throws SQLExceptionrn */rn public int count(String id, BaseEntity parameterObject) throws SQLException rn BaseEntity count = new BaseEntity();rn int countNum;rn try rn parameterObject.setDoCount(doCount);rn rn count = (BaseEntity) sqlMapClient.queryForObject(id,rn parameterObject);rn rn countNum = Integer.parseInt(count.getSqlCountNum());rn catch (Exception e) rn e.printStackTrace();rn throw new SQLException();rn rn rn return countNum;rn rnrn /**rn * 分页查询rn * rn * @param id -- SQLidrn * @param parameterObject -- 条件参数rn * @param pageInfo -- 分页信息rn * @return --分页的记录集rn * @throws SQLExceptionrn * 修改历史:rn * 1、修改翻页逻辑 modified by tangyh 2008-4-10 rn * rn */rn @SuppressWarnings("unchecked")rn public List queryForPage(String id, BaseEntity parameterObject,rn PageInfo pageInfo) throws SQLException rn List pageList;rn rn if (pageInfo == null) rn pageInfo = new PageInfo();rn rn //每页显示的记录数(默认为20条)rn if (pageInfo.getPageLines() == 0) rn pageInfo.setPageLines(20);rn rn try rn //计算总记录数rn int countResult = count(id , parameterObject);rn //计算总页数rn int pages=(countResult + pageInfo.getPageLines() - 1)/ pageInfo.getPageLines();rn //当前页码rn int curPage=pageInfo.getCurrentPage();rn if (curPage < 1) curPage=1;rn if(curPage > pages ) curPage=pages;rn rn parameterObject.clears();rnrn //总记录数rn pageInfo.setTotalRows(countResult);rn //总页数rn pageInfo.setTotalPages(pages);rn //当前页码rn pageInfo.setCurrentPage(curPage);rn int beginRows = (pageInfo.getCurrentPage()-1) * pageInfo.getPageLines();rn rn pageList = sqlMapClient.queryForList(id, parameterObject, beginRows, pageInfo.getPageLines());rn catch (Exception e) rn e.printStackTrace();rn throw new SQLException();rn rn return pageList;rn rn rn /**rn * @param userIdrn * @return 根据用户Id返回其上司列表rn * @throws SQLExceptionrn */rn public List getUpperUser(String userId) throws SQLExceptionrn String upper = (String)sqlMapClient.queryForObject("queryUppers",userId);rn if (upper == null)rn upper = "";rn rn String uppers[] = upper.split(",");rn List retList = new ArrayList();rn if (uppers != null && uppers .length != 0 && !"".equals(uppers[0]))rn for (String s:uppers)rn retList.add(s);rn rn rn return retList;rn rn rn /**rn * @param userIdrn * @return 根据用户Id返回其Namern * @throws SQLExceptionrn */rn public String getUserName(String userId) throws SQLExceptionrn Object obj = sqlMapClient.queryForObject("queryUserName",userId);rn String name = "";rn if (obj != null) rn name = (String) obj;rn rn return name;rn rn rn /**查询制定序列的序列值:rn * 注意:此方法只用于Oraclern * @param sequencesName 序列名称rn * @return 序列值rn * @throws SQLExceptionrn * @throws NumberFormatExceptionrn */rn public int getSequences(String sequencesName) throws SQLExceptionrn String retVal = "";rn int ret = 0;rn try rn retVal = (String)sqlMapClient.queryForObject("getSequences",sequencesName);rn rn ret = Integer.valueOf(retVal);rn catch (NumberFormatException e) rn logger.error("数据转换异常!");rn catch (SQLException e) rn logger.error("获取序列值时,数据库异常:请检查序列"+sequencesName+"是否存在。", e);rn throw e;rn rn return ret;rn rnrnrnrn[/code]n[b]问题补充:[/b]n[color=darkred][size=x-large]不小心删了几行注释,109行应为[/size][/color]rnrn[code="java"]rnrn pageList = sqlMapClient.queryForList(id, parameterObject, beginRows, pageInfo.getPageLines());rn catch (Exception e) rn e.printStackTrace();rn [color=red]throw new SQLException();[/color]rn rn[/code]rnrn中的throw new SQLException();rnrn谢谢n[b]问题补充:[/b]n开发环境下没有保存不好调试啊 :cry: n[b]问题补充:[/b]n[size=large]谢谢lovewhzlq[/size]rnrn[code="java"]rn--- The error occurred while applying a result map. rn--- Check the queryClaimBillPage-AutoResultMap. rn--- The error happened while setting a property on the result object. rn--- Cause: java.lang.RuntimeException: Error setting property 'setClaimNotificationNumber' of 'com.hundsun.hscrm.business.icc.claim.claimcase.entity.ClaimNotificationBill@1f71a09'. Cause: java.lang.ArrayIndexOutOfBoundsException: 1rnrn[/code]rnrn继续测试发现好像是由以上这个错误引起的,claimNotificationNumber属性对应数据库中“[color=red]01-47-09-116[/color]”这种类型的数据转换成entity时报错了,总共才3000条数据,为什么有时会报这个错误呢 n[b]问题补充:[/b]n :D 没办法,就这点能力 也就搞搞山寨框架n[b]问题补充:[/b]n昨天的问题还没有解决,但是仍然感谢大家的问答。rnrn当并发达到50左右的时候偶尔会报rn# The error happened while setting a property on the result object. rn# --- Cause: java.lang.RuntimeException: Error setting property 'setClaimNotificationNumber' of 'com.icc.claim.claimcase.entity.ClaimNotificationBill@1f71a09'. Cause: java.lang.ArrayIndexOutOfBoundsException: 1 rnrn开发环境上调试都正常,再三考虑后觉得可能由以下问题引起的:rnsql中查询返回使用的是resultClass="ClaimNotificationBill"而非resultMap,造成性能下降,rn没有配置记录集合的映射,没有映射,Ibatis就是瞎子。所有东西都用来反射,那么数据库持久层将是一个大的瓶颈,rn程序运行到此处resultClass="ClaimNotificationBill",ClaimNotificationBill类有一百多个属性,invok时性能影响较大,所以经常在此处报错,rnrn以上猜想,明天再去测下看看

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭