日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

服务器上的Linux中Tomcat有时会挂掉的问题及方法

發布時間:2024/7/5 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器上的Linux中Tomcat有时会挂掉的问题及方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QUESTION:服務器上的Linux中Tomcat有時會掛掉的問題及方法?

?

目錄

QUESTION:服務器上的Linux中Tomcat有時會掛掉的問題及方法?

ANSWER:

一、內存不足

二、服務器內存不足

三、解決方法

3.1Tomcat內存優化

3.2代碼優化內存泄漏


ANSWER:

?

正在啟動的tomcat服務器,突然間掛掉,有時運行的好好的,分析了以下原因:

一、內存不足

?

本博主是在阿里云購買的云服務器,2G運行內存,開啟了apache、tomcat服務器,剩余內存不足。

在開發當中,當一個項目比較大時,依賴的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異常?
    表示棧內存溢出。通常是由于死循環、無限遞歸導致。

系統會檢測內存,如果內存占用過大,會自動清理進程。

?

二、服務器內存不足

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

?

三、解決方法

執行以下代碼:

vim /var/log/messages

?

出現如圖所示,就說明內存機制自動清除tomcat進程。內存不足產生溢出。?

?

查看被kill的進程:

grep Kill /var/log/message*

3.1Tomcat內存優化

?

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

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

-server參數表示以服務模式啟動,啟動速度會稍微慢一點,但性能會高很多。不加這個參數,默認是以客戶端模式啟動。?

-Xms–Xmx?JVM內存設置,建議設置成同一個值,可以在命令行中使用 java -Xmx1500m -version 來測試當前服務器可以設置的最大內存。(-Xmx 的值太大時,JVM 無法啟動)。

-Xmn?年輕代?整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m。

-Xss?是指設定每個線程的堆棧大小。一般不超過 1M。

?

3.2代碼優化內存泄漏

通常是ThreadLocal方法出現內存泄漏,優化自己的功能。

?

總結

以上是生活随笔為你收集整理的服务器上的Linux中Tomcat有时会挂掉的问题及方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。