杭州软件测试培训
达内杭州软件测试培训中心

18357109557

热门课程

达内:性能测试之线程池设置原理

  • 时间:2016-01-11
  • 发布:杭州美工培训
  • 来源:51测试网


    相信很多达内软件测试学员对于设置多大的线程池、根据什么原则设计线程池这样的问题感到困惑,杭州达内软件测试培训专家就来具体讲解线程池设置原理。

    原理:

    tomcat接受一个request后处理过程中,会涉及到cpu和IO时间。其中IO等待时间,cpu被动放弃执行,其他线程就可以利用这段时间片进行操作。所以我们可以采用服务器IO优化的通用规则。

    线程大小 = ( (线程io时间 + 线程cpu) / 线程cpu time) * cpu核数

    示例:

    线程io时间为100ms(IO操作比如数据库查询,同步远程调用等),线程cpu时间10ms,服务器物理机核数为4个。通过上面的公式,我们计算出来的大小是 ((100 + 10 )/10 ) *4 = 44。理论上我们有依据,但是实际计算过程中我们怎么知道线程IO时间和cpu时间呢?

    代码:

    通过java 实现内置的filter接口,可以拿到一个request消耗的总时间


public class MoniterFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException {
long start = System.currentTimeMillis();
String params = getQueryString(httpRequest);
try {
chain.doFilter(httpRequest, httpResponse);
} finally {
logger.info("access url [{}{}], cost time [{}] ms )", uri,
params, cost);
}
private String getQueryString(HttpServletRequest req) {
StringBuilder buffer = new StringBuilder("?");
Enumeration<String> emParams = req.getParameterNames();
try {
while (emParams.hasMoreElements()) {
String sParam = emParams.nextElement();
String sValues = req.getParameter(sParam);
buffer.append(sParam).append("=").append(sValues).append("&");
}
return buffer.substring(0, buffer.length() - 1);
} catch (Exception e) {
}
return "";
}
}

    通过添加切面来监控线程IO耗时(jdk,cglib)


public class DaoInterceptor implements MethodInterceptor {
private static final Logger logger = LoggerFactory.getLogger(DaoInterceptor.class);
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
StopWatch watch = new StopWatch();
watch.start();
Object result = null;
Throwable t = null;
try {
result = invocation.proceed();
} catch (Throwable e) {
t = e == null ? null : e.getCause();
throw e;
} finally {
watch.stop();
logger.info("({}ms)", watch.getTotalTimeMillis());
}
return result;
}
}


    通过上述代码就可以计算出相应时间,从而计算出线程大小。

    杭州达内软件测试培训专家友情提示:计算出的数值只是存在理论情况下,软件测试工程师需要通过压测工具来压一下服务器,同时根据qps值来动态微调刚才计算出的线程池大小。








原文链接:http://www.51testing.com/html/43/n-3703943.html
上一篇:达内:单元测试检查清单
下一篇:达内:功能测试的工作流程

WEB安全探测框架——Recon-ng

达内:测试用例中的电子邮箱文本框

达内介绍iOS功能性UI测试框架EarlGrey

达内:python的web应用开发与测试

选择城市和中心
贵州省

广西省

海南省