1. 程式人生 > >Tomcat設定最佳執行緒數總結

Tomcat設定最佳執行緒數總結

最佳執行緒數:

效能壓測的情況下,起初隨著使用者數的增加,QPS會上升,當到了一定的閥值之後,使用者數量增加QPS並不會增加,或者增加不明顯,同時請求的響應時間卻大幅增加。這個閥值我們認為是最佳執行緒數。

為什麼要找最佳執行緒數

1.過多的執行緒只會造成,更多的記憶體開銷,更多的CPU開銷,但是對提升QPS確毫無幫助

2.找到最佳執行緒數後通過簡單的設定,可以讓web系統更加穩定,得到最高,最穩定的QPS輸出

最佳執行緒數的獲取:

1、通過使用者慢慢遞增來進行效能壓測,觀察QPS,響應時間

2、根據公式計算:伺服器端最佳執行緒數量=((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間) * cpu數量

3、單使用者壓測,檢視CPU的消耗,然後直接乘以百分比,再進行壓測,一般這個值的附近應該就是最佳執行緒數量。

影響最佳執行緒數的主要因素:

1、IO

2、CPU

根據公式:伺服器端最佳執行緒數量=((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間) * cpu數量

一般來說是IO和CPU。IO開銷較多的應用其CPU執行緒等待時間會比較長,所以執行緒數量可以開的多一些,相反則執行緒數量要少一些,其實有兩種極端,純IO的應用,比如proxy,則執行緒數量可以開到非常大(實在太大了則需要考慮執行緒切換的開銷),這種應用基本上後端(比如這個proxy是代理搜尋的)的QPS能有多少,proxy就有多少。

另一種是耗CPU的計算,這種情況一般來講只能開到CPU個數的執行緒數量。但是並不是說這種應用的QPS就不高,往往這種應用的QPS可以很高。

QPS和執行緒數的關係

1、在最佳執行緒數量之前,QPS和執行緒是互相遞增的關係,執行緒數量到了最佳執行緒之後,QPS持平,不在上升,甚至略有下降,同時相應時間持續上升。

2、同一個系統而言,支援的執行緒數越多(最佳執行緒數越多而不是配置的執行緒數越多),QPS越高

QPS和響應時間的關係

1、對於一般的web系統,響應時間一般有CPU執行時間+IO等待時間組成

2、CPU的執行時間減少,對QPS有實質的提升,IO時間的減少,對QPS提升不明顯。如果要想明顯提升QPS,優化系統的時候要著重優化CPU消耗大戶。

最佳執行緒數和jvm堆記憶體得關係:

以上都是依據效能瓶頸在CPU的情況,對於Java應用還有一個因素是FULL GC,我們要保證在最佳執行緒數量下,不會發生頻繁FULL GC

根據公式::(小GC時間間隔/rt)*(併發執行緒數量 * thm) <=young 計算得到的併發執行緒數量如果<最佳執行緒數量 則可能導致FULL GC較頻繁,實際情況看來這種情況在web系統上非常少。不過可以模擬出來。

所以我們在設定jboss執行緒的時候,可以利用記憶體公式計算出來的執行緒數量來設定,通過壓測和計算得到最佳執行緒數,然後設定執行緒數。

設定執行緒數量:

壓測最佳執行緒數<真實設定的執行緒數量<記憶體極限執行緒數

比如,通過壓測得到某系統的最佳執行緒數量是10,然後通過記憶體計算的執行緒數量是20,則,設定jboss的執行緒數量為15是可行的,如果直接設定了10,由於系統本身會受到一些依賴系統的變化而產生一些變化,比如系統依賴一些IO的響應時間會突然延長,由於執行緒數量還是10,其實這個時候最佳執行緒數量已經變成了13了,由於我們設定死了10,其結果就是導致qps下降,但是如果超過20,則又會引起FULL gc非常頻繁,反過來影響QPS的下降。

jboss的執行緒數設定:

對於jboss而言,設定執行緒數量要看使用了那種執行緒連線,如http、ajp等

http和ajp的設定是完全一樣的,非常簡單:

以ajp為例,找到server.xml或者tomcat-server.xml:

預設執行緒數量是200個

 <Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3" maxThreads="200"minSpareThreads="40" maxSpareThreads="75" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>

這裡將預設的執行緒數量改成了20,當然相應的其他最小空閒執行緒數和最大空閒執行緒數也做一下調整:

<Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3" maxThreads="20" minSpareThreads="20" maxSpareThreads="20" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>

相關推薦

Tomcat設定最佳執行總結

最佳執行緒數: 效能壓測的情況下,起初隨著使用者數的增加,QPS會上升,當到了一定的閥值之後,使用者數量增加QPS並不會增加,或者增加不明顯,同時請求的響應時間卻大幅增加。這個閥值我們認為是最佳執行緒數。 為什麼要找最佳執行緒數 1.過多的執行緒只會造成,更多的記憶體開銷,更多的CPU開銷,但是對提

tomcat最佳執行

效能壓測的情況下,起初隨著使用者數的增加,QPS會上升,當到了一定的閥值之後,使用者數量增加QPS並不會增加,或者增加不明顯,同時請求的響應時間卻大幅增加。這個閥值我們認為是最佳執行緒數。 為什麼要找最佳執行緒數 1.過多的執行緒只會造成,更多的記憶體開銷,更多的

tomcat最大執行、最大等待和最大連線

tomcat是目前較為常用的Web容器,那麼怎麼配置tomcat才能使得自己的服務效率更高,今天我主要解釋一下tomcat的最大執行緒數(maxThreads)、最大等待數(acceptCount)和最大連線數(maxConnections)。     maxThreads

Tomcat簡介(組成,工作原理,執行設定等)

一、簡介:tomcat是一個免費的開放原始碼的web應用伺服器。屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP程式的首選。當在一臺機器上配置好Apache伺服器,可以利用它響應HTML頁面的訪問請求。實際上Tomcat是Apa

(一)執行究竟設定多少合適

        N核伺服器,通過執行業務的單執行緒分析出本地計算時間為x,等待時間為y,則工作執行緒數(執行緒池執行緒數)設定為 N*(x+y)/x,能讓CPU的利用率最大化。 1、瞭解工作執行緒的工作模式,對量化分析執行緒數的設定非常有幫助: 上圖是一個典型的工

執行設定技巧——與CPU的關係

1、簡化設定 一般說來,執行緒池的大小可以這樣設定: 1、如果是CPU密集型應用,則執行緒池大小設定為N+1 2、如果是IO密集型應用,則執行緒池大小設定為2N+1(因為io讀資料或者快取的時候,執行緒等待,此時如果多開執行緒,能有效提高cpu利用率) (其中N為CPU的個數)

執行池大小設定,CPU的核心執行的關係和區別,同步與堵塞完全是兩碼事

執行緒池應該設定多少執行緒合適,怎麼樣估算出來。最近接觸到一些相關資料,現作如下總結。 最開始接觸執行緒池的時候,沒有想到就僅僅是設定一個執行緒池的大小居然還有這麼多的學問,汗顏啊。 首先,需要考慮到執行緒池所進行的工作的性質: IO密集型 CPU密集型 簡單的分析來看,如果是CPU密集

通過設定Weblogic設定執行提高系統併發

使用Weblogic版本:Weblogic 11g(10.3.6) 設定Weblogic的執行緒數有兩種方法, 第一種,通過啟動引數設定: -Dweblogic.threadpool.MinPoolSize=1000 -Dweblogic.threadpool.MaxP

zabbix監控之tomcat執行

vi check_tomcat_thread_num.sh #!/bin/sh port=$1 pstree -a | awk -v port=$port -F'[-*]+' '{a[NR]=$0; if(a[NR-1] ~ port) {printf("%s\n",$

聊下併發和Tomcat執行(錯誤更正)

本文前半部分結論存在嚴重錯誤,請看最後2015-1-20更新部分。 最近一直在解決線上一個問題,表現是: Tomcat每到凌晨會有一個高峰,峰值的併發達到了3000以上,最後的結果是Tomcat執行緒池滿了,日誌看很多請求超過了1s。 伺服器效能很好,Tomcat版本是7.0.54,配置如下

優化Tomcat執行模式、JVM、執行),提高執行效率

一、說明目錄:1、修改Tomcat的Connector執行模式2、配置JVM虛擬記憶體3、禁止DNS查詢4、調整執行緒數二、實現1、修改Tomcat模式Tomcat之bio、nio、apr模式簡述及配置

python多執行非同步post請求指令碼,可以設定持續執行時間、執行、時間間隔

#coding=utf8 ''' random.randint(a, b):用於生成一個指定範圍內的整數。 其中引數a是下限,引數b是上限,生成的隨機數n: a <= n <= b random.choice(sequence):從序列中獲取一個隨機元素 引數

關於tomcat繁忙執行獲取

        在某些情況下,我們需要對tomcat的繁忙執行緒數進行監控以滿足我們隊應用伺服器狀態資訊的把控。那麼我們該如何通過我們自定義的介面來獲得tomcat的繁忙執行緒數?         首先,我們應該想到tomcat本身是否為我們提供了類似的方法,博主在實際開發

Tomcat執行

Tomcat每到凌晨會有一個高峰,峰值的併發達到了3000以上,最後的結果是Tomcat執行緒池滿了,日誌看很多請求超過了1s。 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

CMS gc實踐總結(糾正併發執行)

首先感謝阿寶同學的幫助,我才對這個gc演算法的調整有了一定的認識,而不是停留在過去僅僅瞭解的階段。在讀過sun的文件和跟阿寶討論之後,做個小小的總結。    CMS,全稱Concurrent Low Pause Collector,是jdk1.4後期版本開始引入的新gc演算

web應用效能測試-Tomcat 7 連線執行配置

原文:http://www.jianshu.com/p/8445645b3aff 引言 這段時間折騰了哈java web應用的壓力測試,部署容器是tomcat 7。期間學到了蠻多散碎的知識點,及時梳理總結,構建良好且易理解的知識架構把它們組織起來,以備忘。 對we

tomcat連線執行關係

個人對tomcat聯結器3個屬性maxConnections、maxThreads、acceptCount的理解: 先摘取官網對這3個屬性的描述: acceptCount The maximum queue length for incoming conne

WebLogic10設定執行

 weblogic升級至weblogic9.x以後,自調優及workmanager的使用,已經在weblogic控制檯上無法配置執行緒數了。 需要通過修改config.xml實現在控制檯配置執行緒數。修改方法如下: 在config.xml的server部分配置修改,如下

關於JMeter執行組中執行,Ramp-Up Period,迴圈次數之間的設定概念

關於JMeter執行緒組中執行緒數,Ramp-Up Period,迴圈次數之間的設定概念   筆者是個剛剛踏入壓力測試領域不到2個月的小菜,這裡分享一下執行緒組中3個引數之間關係的個人見解,不喜請!噴!,望大家給出寶貴的想法。 假設: 執行緒數:n Ramp-Up Per

Tomcat 6.0.32中調整JVM大小及最大執行

1、調整JVM大小 調整前:JVM大小檢視,如下圖所示: 【調整方法】編輯startup.bat,新增如下內容儲存,並重啟tomcat即可。 調整後檢視JVM大小: 2、調整最大執行緒數 tomcat 6.0.32預設最大執行緒數為200. 調整前,如下圖所示: c