【Tomcat】Tomcat配置與優化(內存、并發、管理)【自己配置】

一、JVM內存配置優化

主要通過以下的幾個jvm參數來設置堆內存的:
-Xmx512m     最大總堆內存,一般設置為物理內存的1/4
-Xms512m     初始總堆內存,一般將它設置的和最大堆內存一樣大,這樣就不需要根據當前堆使用情況而調整堆的大小了
-Xmn192m     年輕帶堆內存,sun官方推薦為整個堆的3/8
堆內存的組成     總堆內存 = 年輕帶堆內存 + 年老帶堆內存 + 持久帶堆內存
年輕帶堆內存     對象剛創建出來時放在這里
年老帶堆內存     對象在被真正會回收之前會先放在這里
持久帶堆內存     class文件,元數據等放在這里
-XX:PermSize=128m     持久帶堆的初始大小
-XX:MaxPermSize=128m     持久帶堆的最大大小,eclipse默認為256m。如果要編譯jdk這種,一定要把這個設的很大,因為它的類太多了。

?

在開發當中,當一個項目比較大時,依賴的jar包通常比較多,我們都知道,在應用服務器啟動時,會將應用引用到的所有類通過ClassLoader 依次全部加載到內存當中。Java的邏輯內存模型大致分為堆內存、棧內存、靜態內存區,也稱持久區,該區的內存不會被GC回收。堆內存用于存儲類的實例、 數組等引用類型數據,也就是用new生成的對象,都存放在這里,棧內存存儲局部變量(如:方法參數),靜態內存區存儲常量、靜態變量、類元數據信息(方 法、屬性等)。開發當中常遇到的三類內存溢出異常:

  • java.lang.OutOfMemoryError: Java heap space異常
    表示堆內存空間滿了,如果不是程序邏輯的bug,可能是因為項目中引用的jar比較多,導到內存溢出。JVM默認堆的最小使用內存為物理內存的1/64, 最大使用內存為物理內存的1/4,如8G的物理內存,JVM默認堆的最小和最大內存分別為128m和2048m。通過調整JVM的-Xms(初始內存)和 -Xmx(最大內存)兩個參數加大內存使用限制。
  • java.lang.OutOfMemoryError: PermGen space異常
    表示靜態內存區滿了,通常是由于加載的類過多導致。jdk8以下版本通過修改JVM的-XX:PermSize和-XX:MaxPermSize兩個參 數,限制靜態區最小和最大內存范圍。jdk8改變了內存模型,將類定義存放到了元數據(MetaspaceSize)空間,而元數據空間是與堆空間共享同 一塊內存區域的,所以在JDK8以后版本不會存在PermGen space異常了,故不用設置此參數。
  • java.lang.StackOverflowError異常
    表示棧內存溢出。通常是由于死循環、無限遞歸導致。

?

優化方法:(linux與windows都親測有效)

修改Tomcat的內存配置,打開$TOMCAT_HOME/bin/catalina.sh文件(Windows系統是catalina.bat文件),大楖在250行左右,在JAVA_OPTS參數上添加內存參數設置即可。完整的JVM參數設置如下所示:

linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless=true"

windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入?

set JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless=true

?如果是Windows配置服務式的參考我的另一篇博客:

windows下注冊tomcat服務以及設置jvm參數

?

?

-server參數:表示以服務模式啟動,啟動速度會稍微慢一點,但性能會高很多。不加這個參數,默認是以客戶端模式啟動。
java.awt.headless=true參數:與圖形操作有關,適用于linux系統。如生成驗證碼,含義是當前使用的是沒有安裝圖安裝圖形界面的服務器,應用中如果獲取系統顯示有關參數會拋異常。

?

驗證是否配置成功:

可通過jmap -heap proccess_id或者是擦看Tomcat日志查看設置是否成功。
1.通過查看tomcat啟動日志查看;

  (1)通過catalina.bat啟動查看日志:

?

2.利用 jps+jmap 查看(bootstrap代表的是tomcat)

E:\tomcat\apache-tomcat-7.0.72\bin>jps
324592 Bootstrap
571396 Jps
237820E:\tomcat\apache-tomcat-7.0.72\bin>jmap -heap 324592
Attaching to process ID 324592, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio = 0MaxHeapFreeRatio = 100MaxHeapSize      = 2147483648 (2048.0MB)NewSize          = 1310720 (1.25MB)MaxNewSize       = 17592186044415 MBOldSize          = 5439488 (5.1875MB)NewRatio         = 2SurvivorRatio    = 8PermSize         = 134217728 (128.0MB)MaxPermSize      = 134217728 (128.0MB)G1HeapRegionSize = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 537919488 (513.0MB)used     = 336902296 (321.2950668334961MB)free     = 201017192 (191.7049331665039MB)62.630617316470975% used
From Space:capacity = 89128960 (85.0MB)used     = 45512304 (43.40391540527344MB)free     = 43616656 (41.59608459472656MB)51.06342988855698% used
To Space:capacity = 89128960 (85.0MB)used     = 0 (0.0MB)free     = 89128960 (85.0MB)0.0% used
PS Old Generationcapacity = 1431830528 (1365.5MB)used     = 8897120 (8.484954833984375MB)free     = 1422933408 (1357.0150451660156MB)0.6213808007311882% used
PS Perm Generationcapacity = 134217728 (128.0MB)used     = 44075888 (42.03404235839844MB)free     = 90141840 (85.96595764160156MB)32.83909559249878% used

?

?

3.通過JDK自帶的jvisualvm.exe工具查看

?

4.通過tomcat自帶的項目(manage)查看:

?

參考:https://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html

?

5.用JDK自帶的jconsole查看:

參考:http://www.cnblogs.com/qlqwjy/p/8304211.html

?

6.利用JDK自帶的JPS命令查看JVM信息:?

jps –v :輸出jvm參數

?

例如:  查看本機所有的JVM參數:

$ jps -v
3732 Jps -Dapplication.home=C:\Program Files\Java2\jdk1.7.0_80 -Xms8m
3740 Bootstrap -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:56098 -Dcatalina.base=E:\tomcat\apache-tomcat-7.0.72 -Dcatalina.home=E:\tomcat\apache-tomcat-7.0.72 -Dwtp.deploy=E:\xiangmu -Djava.endorsed.dirs=E:\tomcat\apache-tomcat-7.0.72\endorsed -Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M -Dfile.encoding=GBK
9556 OracleIdeLauncher -Xbootclasspath/a:C:\Program Files\Oracle\sqldeveloper\jdk\lib\tools.jar;C:\Program Files\Oracle\sqldeveloper\jdk\lib\dt.jar -Dsun.java2d.noddraw=true -Dnetbeans.home=/Program Files/Oracle/sqldeveloper/netbeans/platform/ -Dnetbeans.logger.console=true -Dexcluded.modules=org.eclipse.osgi -Dide.cluster.dirs=/Program Files/Oracle/sqldeveloper/netbeans/fcpbridge/:/Program Files/Oracle/sqldeveloper/netbeans/ide/:/Program Files/Oracle/sqldeveloper/netbeans/../ -Xverify:none -Doracle.ide.extension.HooksProcessingMode=LAZY -Dorg.eclipse.equinox.simpleconfigurator.configUrl=file:bundles.info -Dosgi.bundles.defaultStartLevel=1 -Dosgi.configuration.cascaded=false -Dosgi.noShutdown=true -Dorg.osgi.framework.bootdelegation=* -Dosgi.parentClassloader=app -Dosgi.locking=none -Dosgi.contextClassLoaderParent=app -Xbootclasspath/p:/Program Files/Oracle/sqldeveloper/rdbms/jlib/ojdi.jar -Dosgi.classloader.type=parallel -Dosgi.bundlefile.limit=500 -Dide.feedback-server=ide.us.oracle.com -Djavax.xml.transform.TransformerFactory=or
5292  -Dosgi.requiredJavaVersion=1.7 -Xms3072m -Xmx3072m -XX:PermSize=728m -XX:MaxPermSize=728m -XX:+UseParallelGC -XX:+DisableExplicitGC -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails

?

?

例如:查看Tomcat的JVM參數: (Bootstrap是Tomcat的信息)

liqiang@root MINGW64 /e/xiangmu/sbgl (qlq)
$ jps -v|grep Bootstrap
3740 Bootstrap -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:56098 -Dcatalina.base=E:\tomcat\apache-tomcat-7.0.72 -Dcatalina.home=E:\tomcat\apache-tomcat-7.0.72 -Dwtp.deploy=E:\xiangmu -Djava.endorsed.dirs=E:\tomcat\apache-tomcat-7.0.72\endorsed -Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M -Dfile.encoding=GBK

?

?

?

二、并發配置優化

主要配置Tomcat能處理的請求數,當一個進程的線程數超過500個的話,那么這個進程的運行效率就很低了。表面上看線程越多處理的請求越多,其 實過多的線程會占用CPU在不同線程之間切換的資源,導致CPU在每個線程上處理的時間片極期有限,反而會降低服務器的響應性能。

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"redirectPort="8443" maxThreads="500"minSpareThreads="100"maxSpareThreads="200"acceptCount="200"maxIdleTime="30000"enableLookups="false"/>

?有需要的話在上面標簽最后加上設置tomcat默認編碼格式,如下:

URIEncoding="UTF-8"

?

?

Tomcat的并發請求處理數量=maxThreads + acceptCount

protocol:啟用APR連接模式,提高異步IO處理性能。啟用配置請參考:《開啟Tomcat APR運行模式,優化并發性能》

  一般小型項目直接用protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads:最大能接受的請求數,默認為200
minSpareThreads:最少備用線程數,默認初始化,默認為25
maxSpareThreads:最多備用線程數,一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程
acceptCount:等待處理的請求隊列,默認為100,超過隊列長度,服務器則拒絕客戶端請求,直接返回403
maxIdleTime:如果一個線程在30秒以內沒有活躍,則終止運行并從線程池中移除。除非線程池數量小于或等于minSpareThreads數量。默認值是1分鐘
enableLookups:如果為true,調用request.getRemoteHost會執行DNS反查,反向解析IP對應的域名或主機,效率較低,建議設為false。
更多參數設置,請參考Tomcat官方文檔:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

例如:我的配置(也是我的第一個項目部署的配置)

        <Connector URIEncoding="UTF-8"
      
connectionTimeout="20000"port="80"
       protocol
="org.apache.coyote.http11.Http11NioProtocol"maxThreads="500"
       minSpareThreads
="20"
       acceptCount
="100"disableUploadTimeout="true"
       enableLookups
="false"
       redirectPort
="8443" />

?

tomcat啟動后進行查看:

?

?

?參考:https://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html

三、管理員配置

Tomcat默認沒有配置管理員帳戶的權限,如果要查看app的部署狀態、通過管理界面deploy或undeploy,則需要在tomcat-user.xml中配置具有管理權限登錄的用戶。

<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,manager-status,manager-script,manager-jmx"/>

?

Tomcat官網配置:http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html

?

?

?

更多的參數與解釋:http://blog.csdn.net/kthq/article/details/8618052

        http://www.cnblogs.com/qlqwjy/p/8010705.html

?

轉載于:https://www.cnblogs.com/qlqwjy/p/8037392.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281626.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle 網關下載,oracle透明網關訪問sqlserver2000

oracle透明網關訪問sqlserver2000介紹oracle 10g透明網關訪問sqlserver2000一、環境如下:ORACLE 10g 安裝在:192.168.0.250 的window2003 server(版本&#xff1a;Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production) SqlServer 2000安裝在:192.16…

C++和C#的指針小解

昨天和趙崇說了一下工作的事情&#xff0c;說起了性能問題就討論起了數據結果和指針對性能的影響。曾經一直沒有想到這方面的事情&#xff0c;這幾天專門抽時間回想一下這方面的知識&#xff0c;然后一點一點的總結一下&#xff0c;看看數據結構和指針在咱們代碼中是怎樣實現效…

使用RoleBasedAuthorization實現基于用戶角色的訪問權限控制

本文將介紹如何通過 Sang.AspNetCore.RoleBasedAuthorization[1] 庫實現 RBAC 權限管理。使用介紹Step 1添加庫 Sang.AspNetCore.RoleBasedAuthorizationInstall-Package Sang.AspNetCore.RoleBasedAuthorizationStep 2在 Program.cs 中添加builder.Services.AddSangRoleBasedA…

【2018-11-15】中證1000指數的估值詳情

中證1000指數選取中證500和滬深300指數樣本股以外的&#xff0c;流動性好的1000只股票組成&#xff0c;與滬深300 和中證500 等形成互補。 中證1000的個股大多數是由市場上流通市值排名在 800 到 1800 名之間的個股組成&#xff0c;是一個適用范圍較廣的小盤指數。 中證1000的…

[Leetcode Week15]Populating Next Right Pointers in Each Node

Populating Next Right Pointers in Each Node 題解 原創文章&#xff0c;拒絕轉載 題目來源&#xff1a;https://leetcode.com/problems/populating-next-right-pointers-in-each-node/description/ Description Given a binary tree struct TreeLinkNode {TreeLinkNode *left…

php 數組 1 開始,php數組使用1

1、array_values($arr) 將數組轉換成索引數組$arr1 [id>10,name>楊過,sex>male,salary>8900];echo .var_export(array_values($arr1),true).;2、array_column($arr,$col,$boll); 獲取多維數組的列表組成的數組。$arr2 [];$arr2 [[id>10,name>楊過,sex>…

印度光伏巨頭Adani與華為簽署500MW采購合同

日前&#xff0c;印度光伏巨頭Adani與華為簽訂了采購合同。Adani未來一年的項目全部采用華為FusionSolar3.0智能光伏解決方案&#xff0c;首期500MW采購合同已經簽署&#xff0c;將采購最新的智能光伏控制器&#xff08;組串逆變器&#xff09;SUN2000-43KTL、數據采集器SmartL…

宣布 .NET MAUI 支持 .NET 7 RC 2

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;6分鐘)支持 .NET 7 Release Candidate 2 的 .NET 多平臺應用程序 UI (MAUI) 現在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主題是質量和對帶有 iOS 16 的 Xcode 14 的 .NET 支持。此…

linux c文件操作,Linux C 文件的輸入/輸出操作

10.1 文件I/O操作概述在Linux系統中&#xff0c;文件I/O操作可以分為兩類&#xff0c;一類是基于文件描述符的I/O操作&#xff0c;另一類是基于數據流的I/O操作。10.1.1 文件描述符簡介在文件操作一章中&#xff0c;也經常提到文件描述符這個概念。所謂文件描述符&#xff0c;就…

個人中心標簽頁導航

新頁面userbase.html,用<ul ><li role"presentation"> 實現標簽頁導航。<ul class"nav nav-tabs"> <li role"presentation"><a href"#">Home</a></li> <li role"presentation&qu…

智慧城市免費WiFi覆蓋怎么實施?武邑開啟智慧生活模式

“真沒想到武邑這個國家級貧困縣也能夠隨地使用無線網絡&#xff0c;我初次考察就喜歡上了這里。”準備前來武邑縣投資的客商王先生說。日前&#xff0c;隨著縣城廣場、商場等公共場所的免費WiFi覆蓋&#xff0c;及移動電子商務借勢O2O的快速發展&#xff0c;衡水市武邑縣正在逐…

Uno開發的小游戲

大家好&#xff0c;我是沙漠盡頭的狼。剛在微信群里逛&#xff0c;有網友發了Uno的在線小游戲&#xff0c;站長覺得不錯&#xff0c;簡單分享下&#xff1a;群聊漲見識Uno是什么&#xff1f;使用 C# 和 WinUI 實現像素完美的多平臺應用程序&#xff0c;用于構建適用于 Windows、…

sqlplus命令行登錄oracle數據庫的N種方法盤點

歡迎訪問我的個人博客IT廢柴&#xff0c;本文永久鏈接移至&#xff1a;sqlplus命令行登錄oracle數據庫的N種方法盤點 sqlplus有幾種登陸方式Oracle數據庫&#xff0c; 比如&#xff1a; 1.以操作系統權限認證的oracle sys管理員登陸 C: > sqlplus "/as sysdba" 2…

拉美光伏新興市場熱潮將至

國際油價下滑對油氣生產國的影響是不言而喻的&#xff0c;受此拖累&#xff0c;可再生能源產業發展也承受了一定壓力。然而&#xff0c;在多國擁有油氣資源的拉美地區&#xff0c;情況卻恰恰相反&#xff0c;許多國家的可再生能源產業非但沒有受低油價拖累&#xff0c;反而快速…

linux下常見生產腳本,不看后悔的Linux生產服務器Shell腳本分享(2)

一、MySQL的熱備份腳本這是MySQL的備份方式之一&#xff0c;腳本如下&#xff1a;#!/bin/bashPATH/usr/local/sbin:/usr/bin:/bin# The Directory of BackupBACKDIR/usr/mysql_backup# The Password of MySQLROOTPASSpassword# Remake the Directory of Backuprm -rf $BACKDIRm…

兄弟連學python——MongoDB相關

1.常用的命令 show dbs 顯示數據庫列表use dbname 進入dbname數據庫&#xff0c;大小寫敏感&#xff0c;沒有這個數據庫也不要緊show collections 顯示數據庫中的集合&#xff0c;相當于表格2.創建&新增 db.users.save({"name":"lecaf"}) …

WPF-12 路由事件之二

WPF 為我們提供了許多不同的事件處理機制——它們是冒泡、隧道和直接的。這些都稱為路由事件直接事件直接在事件源上處理&#xff0c;這個有點像WinForms中的按鈕OnClick事件&#xff0c;直接在事件處理程序中處理業務冒泡事件當事件沒有被元素&#xff08;比如一個文本框&…

對01背包的分析與理解(圖文)

首先謝謝Christal_R的文章(點擊轉到鏈接)讓我學會01背包 本文較長&#xff0c;但是長也意味著比較詳細&#xff0c;希望您可以耐心讀完。 題目: 現在有一個背包(容器),它的體積(容量)為V,現在有N種物品(每個物品只有一個),每個物品的價值W[i]和占用空間C[i]都會由輸入給出,現在…

linux內核源碼剖析 博客,【Linux內存源碼分析】頁面遷移

頁面遷移其實是伙伴管理算法中的一部分&#xff0c;鑒于其特殊性&#xff0c;特地另行分析。它是2007年的時候&#xff0c;2.6.24內核版本開發時&#xff0c;新增碎片減少策略(the fragmentation reduction strategy)所引入的。該策略也稱之為反碎片技術(anti-gragmentation)。…

360的下一代SOC是這個樣子的

幾乎所有大型企業或機構的IT系統中&#xff0c;都會有安全運營中心(SOC)&#xff0c;它是網絡安全防護體系從設備部署到系統建設&#xff0c;再到統一管理&#xff0c;這一發展過程的自然產物。但在國內的實際應用中&#xff0c;SOC的問題多多。 首先是數據類型不全&#xff0c…