2016-05-23 102 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)。它會告訴你時間到了哪裏(例如鎖定,線程爭用,磁盤寫入效率低下等)。五分鐘的飛行記錄通常就足夠了 –

回答