Tomcat 性能調優(yōu)

Tomcat 容器內的優(yōu)化

一、 tomcat的3種運行模式

1、 bio

默認的模式,性能非常低下,沒有經過任何優(yōu)化處理和支持. 一個線程處理一個請求。缺點:并發(fā)量高時,線程數較多,浪費資源。
Tomcat7或以下,在Linux系統(tǒng)中默認使用這種方式。

2、 nio

nio(new I/O),是Java SE 1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運行性能。

利用Java的異步IO處理,可以通過少量的線程處理大量的請求。
配置方式:

打開 tomcat 安裝目錄 \conf\server.xml文件,定位到這一行:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

將其修改為

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

3、apr

安裝起來最困難,但是從操作系統(tǒng)級別來解決異步的IO問題,大幅度的提高性能.
即Apache Portable Runtime,從操作系統(tǒng)層面解決io阻塞問題。
Tomcat7或Tomcat8在Win7或以上的系統(tǒng)中啟動默認使用這種方式。
Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。
具體安裝辦法 參見這個地址:https://my.oschina.net/lsw90/blog/181161

4、 在那里看我們的tomcat以何種工作模式啟動的?

Tomcat啟動的時候,可以通過log看到Connector使用的是哪一種運行模式:
Starting ProtocolHandler ["http-bio-8080"]
Starting ProtocolHandler ["http-nio-8080"]
Starting ProtocolHandler ["http-apr-8080"]

二、 執(zhí)行器(線程池)

默認的tomcat沒有啟用線程池

在tomcat中每一個用戶請求都是一個線程,所以可以使用線程池提高性能。這里前臺其實有一個調度線程,然后調度線程會放入線程池內,然后到到一定的時候線程池的任務變成工作線程

1、開啟并使用

打開 tomcat 安裝目錄 \conf\server.xml文件,找到下面這段注釋并打開:

<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="150" minSpareThreads="4"/>
-->

然后找到下面的這個配置,注釋掉上面的 Connector ,打開下面被注釋掉的 Connector

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->

2、參數說明

Attribute Description
threadPriority (優(yōu)先級) (int)線程的線程優(yōu)先級執(zhí)行程序,默認是5(NORM_PRIORITY常數)
daemon(守護進程) (boolean)是否應該守護程序線程,線程默認是true
namePrefix(名稱前綴) (String) The name prefix for each thread created by the executor. The thread name for an individual thread will be namePrefix+threadNumber
maxThreads(最大線程數) (int) The max number of active threads in this pool, default is 200
minSpareThreads(最小活躍線程數) (int) The minimum number of threads always kept alive, default is 25
maxIdleTime(空閑線程等待時間) (int) 一個空閑的線程shutsdown之前的毫秒數,除非活動線程的數量不等于minSpareThreads。默認值為60000(1分鐘)
maxQueueSize(最大的等待隊里數,超過則請求拒絕) (int) Integer.MAX_VALUE可運行的最大數量可以排隊等待執(zhí)行的任務之前,我們拒絕他們。默認值是Integer.MAX_VALUE
prestartminSpareThreads (是否在啟動時就生成minSpareThreads個線程) (boolean) minSpareThreads是否應該開始在開始執(zhí)行程序,默認是false
threadRenewalDelay(重建線程的時間間隔) (long) If a ThreadLocalLeakPreventionListener is configured, it will notify this executor about stopped contexts. After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time, this option sets a delay between renewal of any 2 threads. The value is in ms, default value is 1000 ms. If value is negative, threads are not renewed.

二、 連接器(Connector)優(yōu)化

1、介紹

Connector是連接器,負責接收客戶的請求,以及向客戶端回送響應的消息。所以 Connector 的優(yōu)化是重要部分。默認情況下Tomcat支持200線程訪問,超過這個數量的連接將被等待甚至超時放棄,所以我們需要提高這方面的處理能力。

打開 tomcat 安裝目錄 \conf\server.xml文件,找到Connector的配置部分:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

其中 port 代表服務接口;protocol 代表協(xié)議類型;connectionTimeout 代表連接超時時間,單位為毫秒;redirectPort 代表安全通信(https)轉發(fā)端口,一般配置成443。

可以看到除了這幾個基本配置外并無特殊功能,所以我們需要對 Connector 進行擴展。

其中Connector 支持參數屬性可以參考Tomcat官方網站(https://tomcat.apache.org/tomcat-8.0-doc/config/http.html)非常多,所以本文就只介紹些常用的。

2、通用屬性

Attribute Description
allowTrace 如果需要服務器能夠處理用戶的HAED/TRACE請求,這個值應該設置為true,默認值是false
asyncTimeout 默認超不時候以毫秒為單位的異步懇求。若是沒有指定,該屬性被設置為10000(10秒)
enableLookups 若是你想request.getRemoteHost()的調用 履行,以便返回的長途客戶端的實際主機名的DNS查詢,則設置為true。設置為false時跳過DNS查找,并返回字符串情勢的IP地址(從而提高性能)。默認景象下,禁用DNS查找。
maxHeaderCount 容器允許的請求頭字段的最大數目。請求中包含比指定的限制更多的頭字段將被拒絕。值小于0表示沒有限制。如果沒有指定,默認設置為100。
maxParameterCount 將被容器自動解析的最大數量的參數和值對(GET加上POST)。參數值對超出此限制將被忽略。值小于0表示沒有限制。如果沒有指定,默認為10000。請注意, FailedRequestFilter 過濾器可以用來拒絕達到了極限值的請求。
maxPostSize 將被容器以FORM URL參數形式處理的最大長度(以字節(jié)為單位)的POST。通過設置此屬性的值小于或等于0可以禁用該限制。如果沒有指定,該屬性被設置為2097152(2兆字節(jié))。上傳提交的時候可以用的
maxSavePostSize 將被容器在FORM或CLIENT-CERT認證中保存/緩沖的POST的最大尺寸(以字節(jié)為單位)。對于這兩種類型的身份驗證,在用戶身份驗證之 前,POST將被保存/緩沖。對于POST CLIENT-CERT認證,處理該請求的SSL握手和緩沖清空期間,POST將被緩存。對于Form認證,POST將被保存,同時用戶將被重定向到登陸 表單。POST將被一直保留直到用戶成功認證或者認證請求關聯(lián)的會話超時。將此屬性設置為-1可以禁用此限制。將此屬性設置為0,POST數據在身份驗證 過程中將不被保存。如果沒有指定,該屬性設置為4096(4千字節(jié))。
parseBodyMethods 以逗號分隔的HTTP方法列表,通過方法列表,等同于POST方法,request 正文將被解析成請求參數。這在RESTful應用程序要支持以POST式的語義解析PUT請求中是非常有用的。需要注意的是設置其他值(不是POST)會導致Tomcat的行為違反servlet規(guī)范的目的。在這里為了符合HTTP規(guī)范明確禁止HTTP方法TRACE。默認值是POST
port TCP端口號,連接器利用該端口號將創(chuàng)建一個服務器套接字,并等待傳入的連接。你的操作系統(tǒng)將只允許一個服務器應用程序在一個特定的IP地址偵聽特定的端口號。如果使用特殊值0(零),則Tomcat將為連接器隨機選擇一個空閑的端口。這是通常只用在嵌入式和測試應用程序。
protocol 設置協(xié)議來處理傳入流量。默認值是 HTTP/1.1,將使用自動切換機制來選擇阻塞的基于Java的連接器或APR /native 為基礎的連接器。如果PATH(Windows)或LD_LIBRARY_PATH(在大多數Unix系統(tǒng))的環(huán)境變量包含在Tomcat的本地庫里,APR /native 連接器將被使用。如果在本地庫中無法找到,阻斷基于Java的連接器將被使用。需要注意的是使用HTTPS比Java連接器與APR /native 連接器有不同的設置。一個明確的協(xié)議,而不是依靠上述自動切換機構,可用以下值: 指定模式 org.apache.coyote.http11.Http11Protocol -阻塞式的Java連接器、 org.apache.coyote.http11.Http11NioProtocol -不阻塞Java連接器、org.apache.coyote.http11.Http11AprProtocol的 -的APR / native 連接器。 也可以使用的用戶自定義的實現??匆豢丛谖覀兊倪B接器比較圖。Java連接器,HTTP和HTTPS,配置是相同的。 APR連接器和APR特定的SSL設置的更多信息,請訪問APR文檔
proxyName 如果這個連接正在使用的代理服務器配置,配置該屬性指定的服務器的名稱,可以調用request.getServerName()返回。有關更多信息,請參見代理支持。
proxyPort 如果這個連接正在使用的代理服務器配置,配置該屬性指定服務器端口,可以調用request.getServerPort()返回。有關更多信息,請參見代理支持。
redirectPort 如果該連接器支持非SSL請求,并且接收到的請求為滿足安全約束需要SSL傳輸, Catalina 將自動將請求重定向到指定的端口號。
scheme 將該屬性設置為你想調用request.getScheme()返回的協(xié)議的名稱。例如,對于SSL連接器,你會將此屬性設置為“HTTPS ”。默認值是“ HTTP ”。
secure 如果你想調用request.isSecure()收到此連接器的請求返回true,請該該屬性設置為true。您希望SSL連接器或非SSL連接器接收數據通過一個SSL加速器,像加密卡,SSL設備,甚至一個web服務器。默認值是假的。
URIEncoding 解決我們的亂碼問題,這將指定使用的字符編碼??,來解碼URI字符。如果沒有指定,ISO-8859-1將被使用。
useBodyEncodingForURI 這指定是否應該用于URI查詢參數,而不是使用URIEncoding contentType中指定的編碼。此設置兼容性Tomcat 4.1.x版(該版在contentType中指定編碼,或者使用request.setCharacterEncoding的方法顯式設置(參數為 URL傳來的值)。默認值false。
useIPVHosts 將該屬性設置為true會導致Tomcat使用收到請求的IP地址,來確定將請求發(fā)送到哪個主機。默認值是假的。
xpoweredBy 將此屬性設置為true會導致Tomcat支持使用Servlet規(guī)范的通知,(在規(guī)范中推薦使用頭字段)。默認值是假的。

2、標準實現

除了上面列出的常見的連接器屬性,標準的HTTP連接器(BIO,NIO和APR/native)都支持以下屬性。

Attribute Description
acceptCount 當所有可能的請求處理線程都在使用時,傳入連接請求的最大隊列長度。當隊列滿時收到的任何請求將被拒絕。默認值是100。
acceptorThreadCount 用于接受連接的線程的數量。在一個多CPU的機器上,增加該值,雖然你可能不會真正需要超過2個。此外,有很多非保持活動連接,您可能需要增加這個值。默認值是 1。
acceptorThreadPriority 接收器線程的優(yōu)先級。該線程用來接受新的連接。默認值是5(java.lang.Thread.NORM_PRIORITY常量)。更多這個優(yōu)先級是什么意思的詳細信息,請查看java.lang.Thread的類的JavaDoc 。
address 對于擁有多個IP地址的服務器,該屬性指定哪個地址將被用于在指定端口上監(jiān)聽。默認情況下,該端口將被用于與服務器相關聯(lián)的所有IP地址。
bindOnInit 控制連接器綁定時套接字的使用。缺省情況,當連接器被啟動時套接字被綁定和當連接器被銷毀時套接字解除綁定。如果設置為false,連接器啟動時套接字被綁定,連接器停止時套接字解除綁定。
compressableMimeType 該值是一個被用于HTTP壓縮的逗號分隔的MIME類型列表。默認值是text / html類型,為text / xml,text / plain。
compression 通常會在ngnix里面配置壓縮 ,開啟壓縮GZIP 為了節(jié)省服務器帶寬,連接器可以使用HTTP/1.1 GZIP壓縮??山邮艿膮档闹凳恰皁ff ”(禁用壓縮),“on ”(允許壓縮,這會導致文本數據被壓縮),“force ”(強制在所有的情況下壓縮),或者一個整數值(這是相當于為“on”,但指定了輸出之前被壓縮的數據最小量)。如果不知道內容長度但被設置為“on”或更積極的壓縮,輸出的數據也將被壓縮。如果沒有指定,該屬性被設置為“關”。 注意:這是使用壓縮(節(jié)省您的帶寬)和使用sendfile功能(節(jié)省你的CPU周期)之間的權衡。如果連接器支持sendfile功能,例如NIO連接,則使用sendfile將優(yōu)先于壓縮。癥狀是48 KB的靜態(tài)文件將未壓縮就發(fā)送。你可以如下文所述通過設置連接器的useSendfile屬性來關閉sendfile,或在默認的conf/web.xml或者你的web應用的web.xml中配置DefaultServlet來改變sendfile的使用量閾值。
compressionMinSize 如果壓縮被設置為“on”,那么該屬性可以用于指定在輸出之前被壓縮的數據的最小量。如果未指定,此屬性默認為“2048”。
connectionLinger 連接器的套接字被關閉時的逗留秒數。如果沒有指定,將使用默認的JVM。
connectionTimeout 在將提交的請求URI行呈現之后,連接器將等待接受連接的毫秒數。使用值-1表示沒有超時(即無限)。默認值是60000(60秒),但請注意,Tomcat的標準server.xml中,設置為20000(即20秒)。
connectionUploadTimeout 上傳數據過程中,指定的以毫秒為單位超時時間。只有在設置disableUploadTimeout為false有效。
disableUploadTimeout 此標志允許servlet容器在數據上傳時使用不同的連接超時,通常較長。如果沒有指定,該屬性被設置為true,禁用上傳超時。
executor 指向Executor元素的引用。如果這個屬性被設置,并且被命名的executor存在,連接器將使用這個executor,而其他所有線程相關屬性將被忽略。請注意共享的executor如果沒有指定到一個連接器,則該連接器將使用一個私有的,內部的executor來提供線程池。
executorTerminationTimeoutMillis The time that the private internal executor will wait for request processing threads to terminate before continuing with the process of stopping the connector. If not set, the default is 0 (zero) for the BIO connector and 5000 (5 seconds) for the NIO and APR/native connectors.
keepAliveTimeout 此連接器在關閉連接之前將等待另一個HTTP請求的毫秒數。默認值是使用已設置的connectionTimeout屬性的值。使用值-1表示沒有超時(即無限)。
maxConnections 在任何給定的時間服務器接受并處理的最大連接數。當這個數字已經達到了,服務器將不會接受任何連接,直到連接的數量降到低于此值?;赼cceptCount的設置,操作系統(tǒng)可能仍然接受連接。默認值根據不同的連接器類型而不同。對于BIO,默認的是maxThreads的值,除非使用了Executor,在這種情況下默認值是executor的maxThreads值 。對于NIO的默認值是10000。APR /native的默認值是8192。 需要注意的是Windows系統(tǒng)的APR/native,所配置的值將減少到小于或等于maxConnections的1024的倍數的最大值。這樣做是出于性能方面的考慮。如果設置的值-1,maxConnections功能被禁用,而且連接數將不做計算。
maxExtensionSize Limits the total length of chunk extensions in chunked HTTP requests. If the value is -1, no limit will be imposed. If not specified, the default value of 8192 will be used.
maxHttpHeaderSize 請求和響應的HTTP頭的(以字節(jié)為單位的)最大尺寸。如果沒有指定,該屬性被設置為8192(8 KB)。
maxKeepAliveRequests HTTP請求最大長連接個數。將此屬性設置為1,將禁用HTTP/1.0、以及HTTP/1.1的長連接。設置為-1,不禁用。如果沒有指定,該屬性被設置為100。
maxSwallowSize The maximum number of request body bytes (excluding transfer encoding overhead) that will be swallowed by Tomcat for an aborted upload. An aborted upload is when Tomcat knows that the request body is going to be ignored but the client still sends it. If Tomcat does not swallow the body the client is unlikely to see the response. If not specified the default of 2097152 (2 megabytes) will be used. A value of less than zero indicates that no limit should be enforced.
maxThreads 最多同時處理的連接數,Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創(chuàng)建的最大的線程數。如果沒有指定,該屬性被設置為200。如果使用了execute將忽略此連接器的該屬性,連接器將使用execute,而不是一個內部線程池來處理請求。
maxTrailerSize 限制一個分塊的HTTP請求中的最后一個塊的尾隨標頭的總長度。如果該值是-1,沒有限制的被強加。如果沒有指定,默認值是8192。
minSpareThreads 始終保持運行最小線程數。如果沒有指定,則默認為10。
noCompressionUserAgents 該值是一個正則表達式(使用java.util.regex),匹配不應該使用壓縮的HTTP客戶端的用戶代理標頭。因為這些客戶端,雖然他們宣稱支持壓縮功能,但實現不完整。默認值是一個空字符串(正則表達式匹配禁用)。
processorCache 協(xié)議處理器緩存Processor對象以提高性能。此設置規(guī)定了這些對象有多少能得到緩存。-1意味著無限制,默認為200。如果不使用Servlet 3.0的異步處理,一個好的默認是使用maxThreads設置。如果使用Servlet 3.0的異步處理,一個好的默認是使用maxThreads和最大預期的并發(fā)請求(同步和異步)的最大值中的較大值。
restrictedUserAgents 該值是一個正則表達式(使用java.util.regex),匹配用戶代理頭的HTTP瀏覽器將不能使用HTTP/1.1或HTTP/1.0長連接,即使該瀏覽器宣稱支持這些功能的。默認值是一個空字符串(正則表達式匹配禁用)。
server 覆蓋服務器的HTTP響應頭。如果設置了這個屬性的值將覆蓋Web應用程序設置的Tomcat的默認頭和任何服務器頭。如果沒有設置,應用程序指定的任何值將被使用。如果應用程序沒有指定一個值,那么Apache-Coyote/1.1將被使用。除非你是偏執(zhí)狂,你將不再需要此功能。
socketBuffer 為套接字輸出緩沖而提供的緩沖區(qū)的大?。ㄒ宰止?jié)為單位)。-1可以被指定來禁止使用的緩沖區(qū)。默認情況下,一個9000個字節(jié)的緩沖區(qū)將被使用。
SSLEnabled 在連接器上使用此屬性來啟用SSL加密傳輸。如果要打開SSL握手/加密/解密,請設置true。默認值是false。當設置這個值為true時,為了傳遞正確的request.getScheme()和 request.isSecure()到servlets,你需要設置scheme和secure屬性。更多信息請查看SSL支持。
tcpNoDelay 如果設置為true,TCP_NO_DELAY選項將被設置在服務器上的套接字上,在大多數情況下,這樣可以提高性能。默認設置為true。
threadPriority 在JVM中請求處理線程的優(yōu)先級。默認值是5(java.lang.Thread.NORM_PRIORITY常量值)。關于優(yōu)先級的更多詳細信息,請查看java.lang.Thread的類的JavaDoc
upgradeAsyncWriteBufferSize The default size of the buffer to allocate to for asynchronous writes that can not be completed in a single operation. Data that can't be written immediately will be stored in this buffer until it can be written. If more data needs to be stored than space is available in the buffer than the size of the buffer will be increased for the duration of the write. If not specified the default value of 8192 will be used.

3、NIO的具體配置

Attribute Description
pollerThreadCount (int)用來處理輪詢事件的線程的數量。在版本7.0.27及以前版本,默認值是每個處理器1個。版本7.0.28的默認值是每個處理器1個,但不超過2個。當接受一個套接字,操作系統(tǒng)擁有全局的鎖。所以超過2個線程的好處而迅速減小。有一個以上的線程是因為系統(tǒng)需要非常迅速地接受連接。但通常只要增加acceptCount值就可以解決這個問題。增加該值也可能是有用的,當大量發(fā)送文件操作發(fā)生的時候。
pollerThreadPriority (int)輪詢線程的優(yōu)先級。默認值是5(java.lang.Thread.NORM_PRIORITY常量值)。優(yōu)先級的更多詳細信息,可以查考java.lang.Thread類的JavaDoc 。
selectorTimeout (int)選擇輪詢器select()的超時時間(以毫秒為單位)。這個值非常重要,因為連接清理工作也是在同一個線程里的,所以不要將此值設置為一個非常高的。默認值是1000毫秒。
useComet (bool)是否允許Comet servlet。默認值是 true。
useSendfile (bool)使用此屬性來啟用或禁用sendfile的能力。默認值是true。
socket.directBuffer (bool)選擇使??用直接ByteBuffers或Java映射的ByteBuffers。默認是false。當您使用直接ByteBuffers,請確保你分配適當的內存量給直接內存空間。在Sun的JDK中,配置如-XX:MaxDirectMemorySize = 256M。
socket.appReadBufSize (int)在Tomcat中每個連接的開辟連接一個讀ByteBuffer。此屬性控制這個緩沖區(qū)的大小。默認情況下,這個讀緩沖區(qū)大小為8192字節(jié)。對于較低的并發(fā),你可以增加這個值以緩沖更多的數據。對于長連接數很多的情況,你需要降低這個數值或者增加堆大小。
socket.appWriteBufSize (int)在Tomcat中每個連接的開辟連接一個寫B(tài)yteBuffer。此屬性控制這個緩沖區(qū)的大小。默認情況下,這個寫緩沖區(qū)大小為8192字節(jié)。對于較低的并發(fā),你可以增加這個值以緩沖更多的響應數據。對于長連接數很多的情況,你需要降低這個數值或者增加堆大小。這里的默認值是相當低的,如果面對的不是幾萬并發(fā)連接,你應該增大該值。
socket.bufferPool (int)NIO連接器使用NioChannel這個類來持有鏈接到一個套接字的元素。為了減少垃圾收集,NIO連接器緩存這些通道的對象。此值指定這個緩存的大小。默認值是500,表示緩存將持有500個 NioChannel的對象。-1表示不限制緩存大小,0表示不緩存。
socket.bufferPoolSize (int)NioChannel池,也可以是基于尺寸大小,而不是基于對象數的。該大小的計算如下:NioChannel的緩沖區(qū)大小=讀取緩沖區(qū)大小+寫入緩沖區(qū)大小 SecureNioChannel的緩沖區(qū)大小=應用程序讀取緩沖區(qū)大小+應用程序寫入緩沖區(qū)的大小+網絡讀取緩沖區(qū)大小+網絡寫入緩沖區(qū)的大小值(以字節(jié)為單位),默認值1024 * 1024 * 100 (100MB)。
socket.processorCache (int)以減少垃圾收集,Tomcat緩存SocketProcessor對象。該值指定保持在緩存中最多有多少個對象。默認值是500。-1表示不限制緩存大小,0表示不緩存。
socket.keyCache (int)以減少垃圾收集,Tomcat緩存KeyAttachment對象。該值指定保持在緩存中最多有多少個對象。默認值是500。-1表示不限制緩存大小,0表示不緩存。
socket.eventCache (int)以減少垃圾收集,Tomcat緩存PollerEvent對象。該值指定保持在緩存中最多有多少個對象。默認值是500。-1表示不限制緩存大小,0表示不緩存。
selectorPool.maxSelectors (int)以減少選擇器的爭用,在池中使用的選擇器最大個數。命令行org.apache.tomcat.util.net.NioSelectorShared值設置為false時,使用此選項。默認值是200。
selectorPool.maxSpareSelectors (int)以減少選擇器的爭用,在池中使用的最大備用選擇器個數。當選擇器返回到池中時,系統(tǒng)可以決定保留它或者讓他垃圾回收。當org.apache.tomcat.util.net.NioSelectorShared 值設置為false時,使用此選項。默認值是-1(無限制)。
command-line-options 下面的命令行選項可用于NIO連接器:-Dorg.apache.tomcat.util.net.NioSelectorShared=true或false 默認情況下是true。如果你想每個線程使用一個選擇器,將此值設置為false。當你將它設置為false,你可以通過使用selectorPool.maxSelectors屬性控制選擇器池的大小。
oomParachute (int)NIO連接器實現了一個名叫parachute的OutOfMemoryError錯誤的策略。它擁有一個塊的數據作為一個字節(jié)數組。在一個OOM的情況下,這個數據塊被釋放,并報告錯誤。這會給VM足夠的空間來清理。oomParachute代表parachute(字節(jié)數組)的大小(以字節(jié)為單位)。默認值是 1024 * 1024(1MB)。請注意,這僅適用于關于Java堆空間的OOM錯誤,也不是絕對保證,你將能夠恢復所有。如果你有一個Java堆之外OOM的,那么這個parachute也無濟于事。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • Tomcat在各位JavaWeb從業(yè)者常常就是默認的開發(fā)環(huán)境,但是Tomcat的默認配置作為生產環(huán)境,尤其是內存和...
    泡菜愛上WaSabi閱讀 542評論 0 0
  • tomcat通常是作為開發(fā)環(huán)境的容器,其配置也默認是開發(fā)環(huán)境的,在性能提升方面還有很大空間。 本文主要從三個方面介...
    北你妹的風閱讀 2,537評論 0 3
  • 1、目錄:a、基礎調優(yōu)b、JVM 優(yōu)化c、高級調優(yōu)2、基礎調優(yōu):2.1、tomcat的各版本的優(yōu)化參數有點不一樣,...
    笑才閱讀 6,179評論 2 5
  • 增加JVM內存,修復JRE內存泄漏,線程池設置,安裝apr,壓縮 Tomcat性能優(yōu)化方案整理 考慮一下這種場景,...
    SkTj閱讀 926評論 0 0
  • 試想以下這個情景: 你已經開發(fā)好了一個程序,這個程序的排版很不錯,而且有著最前沿的功能和其他一些讓你這程序增添不少...
    FTOLsXD閱讀 453評論 0 3