溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何對JVM性能進行優(yōu)化

發(fā)布時間:2020-06-09 20:26:33 來源:億速云 閱讀:174 作者:元一 欄目:軟件技術(shù)

序言

JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。

引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。

一、背景
使用JMeter對HTTP接口進行壓力測試時,響應(yīng)很慢。

二、定位問題思路
1、定位耗時的SQL
查看Druid Monitor

2、定位jvm參數(shù)
(1)查看linux服務(wù)器的配置信息
# Linux查看版本當(dāng)前操作系統(tǒng)內(nèi)核信息
uname -a
# Linux查看當(dāng)前操作系統(tǒng)版本信息 
cat /proc/version
# Linux查看版本當(dāng)前操作系統(tǒng)發(fā)行版信息
cat /etc/issue 或 cat /etc/redhat-release
# Linux查看cpu相關(guān)信息,包括型號、主頻、內(nèi)核信息等
cat /proc/cpuinfo 
# Linux查看版本說明當(dāng)前CPU運行在32bit模式下, 但不代表CPU不支持64bit
getconf LONG_BIT 
# 查看硬盤使用狀況
df -h
# 查看內(nèi)存使用狀況
free -m
14
(2)jvm的內(nèi)存使用情況
jps
jstat
jinfo
jmap
jhat
jstack

三、調(diào)優(yōu)思路
(1)mysql
建立主鍵
建立索引

(2)tomcat中間件
調(diào)整server.xml的參數(shù),如配置-Xms4096M -Xmx4096M

# Register custom URL handlers
# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xms4096M -Xmx4096M"
1
2
3
(3)jvm
調(diào)整catalina.sh的Xmx和Xms

<!-- 修改連接數(shù)限制-->
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="300"
minSpareThreads="50"
maxIdleTime="60000"
prestartminSpareThreads = "true"
maxQueueSize = "100"
/>

<!--
maxThreads:最大并發(fā)數(shù),默認(rèn)設(shè)置 200,一般建議在 500 ~ 800,根據(jù)硬件設(shè)施和業(yè)務(wù)來判斷
minSpareThreads:Tomcat 初始化時創(chuàng)建的線程數(shù),默認(rèn)設(shè)置 25
maxIdleTime:如果當(dāng)前線程大于初始化線程,那空閑線程存活的時間,單位毫秒,默認(rèn)60000=60秒=1分鐘。
prestartminSpareThreads:在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數(shù)值,如果不等于 true,minSpareThreads 的值就沒啥效果了
maxQueueSize:最大的等待隊列數(shù),超過則拒絕請求
-->

<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->

<!-- 參數(shù)優(yōu)化配置--> 
<Connector
executor="tomcatThreadPool"
port="8081"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="60000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
maxHttpHeaderSize="8192"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
URIEncoding="utf-8"
processorCache="20000"
tcpNoDelay="true"
connectionLinger="5"/>

<!--
executor:線程池模式
port:應(yīng)用端口
protocol:Tomcat 8 設(shè)置 nio2 更好
connectionTimeout:Connector接受一個連接后等待的時間(milliseconds),默認(rèn)值是60000。
maxConnections:這個值表示最多可以有多少個socket連接到tomcat上
redirectPort:重定向https端口
enableLookups:禁用DNS查詢
acceptCount:當(dāng)tomcat起動的線程數(shù)達到最大時,接受排隊的請求個數(shù),默認(rèn)值為100。
maxPostSize:設(shè)置由容器解析的URL參數(shù)的最大長度,-1(小于0)為禁用這個屬性,默認(rèn)為2097152(2M)
maxHttpHeaderSize:http請求頭信息的最大程度,超過此長度的部分不予處理。一般8K。
compression:是否啟用GZIP壓縮 on為啟用(文本數(shù)據(jù)壓縮) off為不啟用, force 壓縮所有數(shù)據(jù)
disableUploadTimeout:這個標(biāo)志允許servlet容器使用一個不同的,通常長在數(shù)據(jù)上傳連接超時。 如果不指定,這個屬性被設(shè)置為true,表示禁用該時間超時。
compressionMinSize:當(dāng)超過最小數(shù)據(jù)大小才進行壓縮
acceptorThreadCount:用于接受連接的線程數(shù)量。增加這個值在多CPU的機器上,盡管你永遠不會真正需要超過2。 也有很多非維持連接,您可能希望增加這個值。默認(rèn)值是1。
compressableMimeType:配置想壓縮的數(shù)據(jù)類型
URIEncoding:網(wǎng)站一般采用UTF-8作為默認(rèn)編碼。
processorCache:協(xié)議處理器緩存的處理器對象來提高性能。 該設(shè)置決定多少這些對象的緩存。-1意味著無限的,默認(rèn)是200。 如果不使用Servlet 3.0異步處理,默認(rèn)是使用一樣的maxThreads設(shè)置。 如果使用Servlet 3.0異步處理,默認(rèn)是使用大maxThreads和預(yù)期的并發(fā)請求的最大數(shù)量(同步和異步)。
tcpNoDelay:如果設(shè)置為true,TCP_NO_DELAY選項將被設(shè)置在服務(wù)器套接字,而在大多數(shù)情況下提高性能。這是默認(rèn)設(shè)置為true。
connectionLinger:秒數(shù)在這個連接器將持續(xù)使用的套接字時關(guān)閉。默認(rèn)值是 -1,禁用socket 延遲時間。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI