1. 程式人生 > >效能測試之tomcat執行緒池設定原理

效能測試之tomcat執行緒池設定原理

該設定多大的執行緒池呢?以及根據什麼原則來設計這個執行緒池呢?   思路:   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; } }
  通過上述程式碼就可以計算出相應時間,從而計算出執行緒大小啦。   請記住:計算出的數值只是存在理論情況下,我們還是需要通過壓測工具(loadrunner,jmeter)來壓一下伺服器,同時根據qps值來動態微調剛才計算出的執行緒池大小。

相關推薦

效能測試tomcat執行設定原理

該設定多大的執行緒池呢?以及根據什麼原則來設計這個執行緒池呢?   思路:   tomcat接受一個request後處理過程中,會涉及到cpu和IO時間。其中IO等待時間,cpu被動放棄執行,其他執行緒就可以利用這段時間片進行操作。所以我們可以採用伺服器IO優化的通用

【本人禿頂程式設計師】Tomcat優化配置執行

←←←←←←←←←←←← 快,點關注! 簡介 執行緒池作為提高程式處理資料能力的一種方案,應用非常廣泛。大量的伺服器都或多或少的使用到了執行緒池技術,不管是用Java還是C++實現,執行緒池都有如下的特點: 執行緒池一般有三個重要引數: 最大執行緒數。在程式執行的任何時候

Tomcat優化配置執行高併發連線

原理:在使用和配置tomcat的執行緒池之前明白執行緒池的原理,類似於作業系統中的緩衝區的概念,它的流程如下:先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠 狀態,當客戶端有一個新請求時,就會喚醒執行緒池中的某一個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,

Tomcat優化配置執行

原文地址:https://bbs.aliyun.com/read/307481.html?spm=5176.bbsl239.0.0.nZJ2Kx&fpage=2 簡介執行緒池作為提高程式處理資料能力的一種方案,應用非常廣泛。大量的服務器都或多或少的使用到了執行緒池技

elasticsearch高階配置(二)----執行設定

一個Elasticsearch節點會有多個執行緒池,但重要的是下面四個:  索引(index):主要是索引資料和刪除資料操作(預設是cached型別)  搜尋(search):主要是獲取,統計和搜尋操作(預設是cached型別)  批量操作(bulk):主要是對索引的批量操作(預設是cached型別)  更

Java併發程式設計的藝術九----執行

第一:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 第二:提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 第三:提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源, 還會降低系統的穩定性,使用執行緒池可以進行統

spring mvc tomcat 執行的坑

1 配置tomcat  執行緒池設定為20個執行緒處理請求 2 後臺框架是springmvc   3 模擬10個請求 4  發現tomcat執行緒池沒一個幹活的 5 幹活的是spring自己建立的執行緒 為什麼springmvc

【小家java】Java執行---ForkJoinPool執行的使用以及原理

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

muduo_base程式碼剖析ThreadPool執行

1. 執行緒池 執行緒池的問題本質上也是生產者消費者模型問題 生產者生產產品的過程,實際上就是由程式設計師向任務佇列中新增任務的過程(需要程式設計師控制),實現程式碼見下: 1. print函式是程式設計師自己手動定義的任務函式 2. run(Task

Junit單元測試+aop+spring+執行,在進行Junit測試時切面中執行內呼叫的方法不執行

一、問題背景: 寫了一個切面,指向某service包下的所有類及方法,當該service包下方法被呼叫時切面執行,切面中用了執行緒池ExecutorService pool = Executors.newFixedThreadPool(5);執行緒池內呼叫了dao層的方法。 二、問題描述:單

Java併發程式設計深入執行原理及實現

Java執行緒池在實際的應用開發中十分廣泛。雖然Java1.5之後在JUC包中提供了內建執行緒池可以拿來就用,但是這之前仍有許多老的應用和系統是需要程式設計師自己開發的。因此,基於執行緒池的需求背景、技術要求瞭解執行緒池原理和實現,一方面可以更為深刻理解Java多執行緒開發,有助於解決業務系統中因為執行緒問題

Java併發任務處理Executor執行

乾貨 import org.junit.After; import org.junit.Test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public c

JAVA多執行——常用執行

執行緒池 學習了執行緒池的基本原理後,可以理解執行緒池的型別控制,主要是通過中心池大小,和最大執行緒池大小,以及儲存工作任務的佇列決定。JDK中為我們封裝了常用的四種執行緒池。 在JDK幫助文件中,有如此一段話: “強烈建議程式設計師使用較為方便的Exec

tomcat7優化配置執行

執行緒池指web請求負載的數量,使用執行緒池,可以用較少的執行緒處理較多的訪問,提高tomcat處理請求的能力 具體步驟如下: 在tomcat目錄下的conf中的server.xml中進行配置,一共

併發程式設計(十二)—— Java 執行 實現原理與原始碼深度解析 submit方法 (二)

在上一篇《併發程式設計(十一)—— Java 執行緒池 實現原理與原始碼深度解析(一)》中提到了執行緒池ThreadPoolExecutor的原理以及它的execute方法。這篇文章是接著上一篇文章寫的,如果你沒有閱讀上一篇文章,建議你去讀讀。本文解析ThreadPoolExecutor#submit。  

JDK併發執行四(自定義ThreadFactory)

ThreadPoolExecutor的建構函式中,執行緒的生成有ThreadFactory生成,建構函式中的ThreadFactory預設為Eexecutors.defaultThreadFactory()。自定義ThreadFactory可以根治執行緒池究竟何時建立了多少執

由Java執行的例子到Tomcat執行

執行緒池的作用:   執行緒池作用就是限制系統中執行執行緒的數量。   根據系統的環境情況,可以自動或手動設定執行緒數量,達到執行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用執行緒池控制執行緒數量,其他執行緒排隊等候。一個任務執行完畢,再從佇列的中取最前面的

Tomcat執行與NIO配置

每個web客戶端請求對於伺服器端來說就一個單獨的執行緒,客戶端的請求數量增多將會導致執行緒數就上去了,CPU就忙著跟執行緒切換。 而NIO則是使用單執行緒(單個CPU)或者只使用少量的多執行緒(多CPU)來接受Socket,而由執行緒池來處理堵塞在pipe或者佇列裡的請求.

Tomcat執行實現簡介(一)

目前市場上常用的開源Java Web容器有Tomcat、Resin和Jetty。其中Resin從V3.0後需要購買才能用於商業目的,而其他兩種則是純開源的。可以分別從他們的網站上下載最新的二進位制包和原始碼。 作為Web容器,需要承受較高的訪問量,能夠同時響應不同使用者的請求,能夠在惡劣環境下保持較

Androidjava執行總結

執行緒池 Android培訓實戰教程裡面,耗時的網路操作,都會開子執行緒,在程式裡面直接開過多的執行緒會消耗過多的資源,在眾多的開源框架中也總能看到執行緒池的蹤影,所以執行緒池是必須要會把握的一個知識點; 執行緒執行機制 ·         開啟執行緒過多,會消耗cpu