2016-05-23 64 views
1

响应时间随着在Tomcat 8以下简单的servlet 3的servlet运行Java 8:CPU核心与在Tomcat

import javax.servlet.GenericServlet; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebServlet; 

import java.io.IOException; 

@WebServlet(value="/min", name="helloServlet") 
public class HelloServlet extends GenericServlet { 
    @Override 
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 
     double j = 0; 
     for (int i=0 ; i<99999 ; i++) { 
      j += Math.random(); 
     }  
     res.getWriter().println("Hello world!!" + j); 
    } 
} 

我用JMeter的(单独的主机上)来发送其请求

在一个处理器与4个物理核心与超线程已禁用,我预计响应时间与1到4个JMeter线程/用户相似(因为有4个核心)。有8个线程,我预计响应时间会翻倍。

实际上发生在< 4线程/用户是完全不同的。

有1或2个用户,JMeter“图表结果”报告中位数4毫秒。

跟3个用户,中值是38毫秒

具有4个的用户,中位数是53(平均61)

随着8个用户,中值是120(平均135)。

4位和8位用户之间的差异符合我的预期。

但1或2个用户和3或4个用户的区别让我感到惊讶。

关于接下来要做什么的解释或建议?谢谢...

+0

你多少请求作出。我的意思是当你说中位数时什么是样本 –

+0

有1个和2个用户可能有很多东西,可能有任何主要的gc(垃圾收集器)踢在tomcat服务器上。有了3个和4个用户,你可能已经创建了足够的对象,gc会跳过并导致延迟。 –

+0

我建议使用Flight Recorder运行此测试(https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/run.htm#JFRUH164)。它会告诉你时间到了哪里(例如锁定,线程争用,磁盘写入效率低下等)。五分钟的飞行记录通常就足够了 –

回答