tomcat-9.0.20部署的問題及性能監控


  最近線上服務器掃描漏洞,掃描出tomcat三個中危漏洞,網上一搜,調的挺麻煩的,看最新的版本似乎都解決了這些漏洞,上tomcat官網下載了最新的9.0.20版本,我下的是壓縮版本的,直接解壓都可以用,沒有配置環境變量,不太清楚配置環境變量除了可以隨地啟動還有什么好處,這邊解壓了tomcat目錄之后,改了幾個地方:

1:啟動窗口亂碼,默認都是UTF-8的,但是控制台是GBK的,要保持一致
打開tomcat目錄下的conf/目錄下logging.properties
找到
java.util.logging.ConsoleHandler.encoding = utf-8這行
更改為
java.util.logging.ConsoleHandler.encoding = GBK

2:啟動時候報這樣的警告:
警告 [main] org.apache.catalina.webresources.Cache.getResource
無法將位於[/WEB-INF/classes/templates/framework/help/helpinfo.html]的資源添加到Web應用程序[/zhfx]的緩存中,
因為在清除過期緩存條目后可用空間仍不足 - 請考慮增加緩存的最大空間。
解決辦法:
在 /conf/context.xml 的 </Context>前添加以下內容(大小默認是1024,單位是KB):
<Resources cachingAllowed="true" cacheMaxSize="100000" />

3:tomcat項目管理頁面
\conf\tomcat-users.xml文件
增加配置
<role rolename="manager-gui"/>
<user username="admin" password="123456" roles="manager-gui"/>
登錄8080端口頁面,點擊manager webapp輸入賬號密碼進入管理頁面

4:設置jvm參數:
bin\catalina.bat文件打開
262行左右,set JPDA= 下面一行添加

set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=500m -XX:MaxPermSize=500m -Djava.awt.headless=true -XX:+PrintGCDetails


參數解釋:
-Xms表示JVM Heap(堆內存)最小尺寸128MB,初始分配
-Xmx表示JVM Heap(堆內存)最大允許的尺寸256MB,按需分配
PermSizeMaxPermSize指明虛擬機為java永久生成對象(Permanate generation)
如,class對象、方法對象這些可反射(reflective)對象分配內存限制,這些內存不包括在Heap(堆內存)區之中
NewSize/MaxNewSize:定義YOUNG段的尺寸,
NewSize為JVM啟動時YOUNG的內存大小(young內存為堆中的新生代,保存剛實列化的對象);
MaxNewSize為最大可占用的YOUNG內存大小。

參數如果不理解,可以參考我轉載的一篇博客,寫的很詳細:https://www.cnblogs.com/grasslucky/p/10900285.html

 

5:注冊為windows服務

打開cmd窗口,window10用戶記得用管理員權限打開,上次被坑了,進入tomcat下名的bin目錄,查看service.bat文件是否存在,輸入命令 service.bat install  ‘服務名’

服務名可寫可不寫,然后看服務管理器,看是否添加好了,添加好了的話,進入屬性設置為自動,這樣如果服務器掛了也會自己啟動,bin目錄下啟動tomcat9.exe,點擊啟動,ok。

 

通過jmap性能監控:

概述:命令jmap是一個多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆內對象示例的統計信息、查看 ClassLoader 的信息以及 finalizer 隊列。

命令:jmap -help:幫助信息

命令:jmap -heap pid
描述:顯示Java堆詳細信息

打印一個堆的信息,包括使用的GC算法、堆配置信息和各內存區域內存使用信息

顯示參數詳解:

Heap Configuration:       //堆內存初始化配置
         MinHeapFreeRatio=40     //對應jvm啟動參數-XX:MinHeapFreeRatio設置JVM堆最小空閑比率(default 40)
         MaxHeapFreeRatio=70  //對應jvm啟動參數 -XX:MaxHeapFreeRatio設置JVM堆最大空閑比率(default 70)
         MaxHeapSize=512.0MB  //對應jvm啟動參數-XX:MaxHeapSize=設置JVM堆的最大大小
         NewSize  = 1.0MB          //對應jvm啟動參數-XX:NewSize=設置JVM堆的‘新生代’的默認大小
         MaxNewSize =4095MB   //對應jvm啟動參數-XX:MaxNewSize=設置JVM堆的‘新生代’的最大大小
         OldSize  = 4.0MB            //對應jvm啟動參數-XX:OldSize=<value>:設置JVM堆的‘老生代’的大小
         NewRatio  = 8         //對應jvm啟動參數-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
         SurvivorRatio = 8    //對應jvm啟動參數-XX:SurvivorRatio=設置年輕代中Eden區與Survivor區的大小比值
          PermSize= 16.0MB       //對應jvm啟動參數-XX:PermSize=<value>:設置JVM堆的‘永生代’的初始大小
          MaxPermSize=64.0MB  //對應jvm啟動參數-XX:MaxPermSize=<value>:設置JVM堆的‘永生代’的最大大小
 
 
          Heap Usage:               //堆內存分步
          PS Young Generation
          Eden Space:          //Eden區內存分布
            capacity = 20381696 (19.4375MB)  //Eden區總容量
            used     = 20370032 (19.426376342773438MB)  //Eden區已使用
            free     = 11664 (0.0111236572265625MB)  //Eden區剩余容量
            99.94277218147106% used  //Eden區使用比率
         From Space:        //其中一個Survivor區的內存分布
             capacity = 8519680 (8.125MB)
             used     = 32768 (0.03125MB)
             free     = 8486912 (8.09375MB)
             0.38461538461538464% used
        To Space:            //另一個Survivor區的內存分布
            capacity = 9306112 (8.875MB)
            used     = 0 (0.0MB)
            free     = 9306112 (8.875MB)
            0.0% used
        PS Old Generation  //當前的Old區內存分布
            capacity = 366280704 (349.3125MB)
            used     = 322179848 (307.25464630126953MB)
            free     = 44100856 (42.05785369873047MB)
            87.95982001825573% used
        PS Perm Generation  //當前的 “永生代” 內存分布
            capacity = 3

 

命令:jmap pid
描述:查看進程的內存映像信息,類似 Solaris pmap 命令。

使用不帶選項參數的jmap打印共享對象映射,將會打印目標虛擬機中加載的每個共享對象的起始地址、映射大小以及共享對象文件的路徑全稱。這與Solaris的pmap工具比較相似。

 

命令:jmap -histo:live pid
描述:顯示堆中對象的統計信息

其中包括每個Java類、對象數量、內存大小(單位:字節)、完全限定的類名。打印的虛擬機內部的類名稱將會帶有一個’*’前綴。如果指定了live子選項,則只計算活動的對象。

 

命令:jmap -clstats pid
描述:打印類加載器信息

-clstats是-permstat的替代方案,在JDK8之前,-permstat用來打印類加載器的數據
打印Java堆內存的永久保存區域的類加載器的智能統計信息。對於每個類加載器而言,它的名稱、活躍度、地址、父類加載器、它所加載的類的數量和大小都會被打印。此外,包含的字符串數量和大小也會被打印。

命令:jmap -finalizerinfo pid
描述:打印等待終結的對象信息

Number of objects pending for finalization: 0 說明當前F-QUEUE隊列中並沒有等待Fializer線程執行final

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM