成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Tomcat與內存泄露處理

開發 開發工具
隨著開發經歷的增長,已經開發過應用的增多,應用內需要加載的 class 增多,經常就會遇到內存溢出(OOM)。那么,我們該如何處理呢?

似乎從 Java 入門的時候,就有這樣的說法來考查 Java開發者:

Java 不像 C++ 那樣自己管理內存,有Java 虛擬機負責進行垃圾回收,再也沒有內存泄露的問題了。

但是隨著開發經歷的增長,已經開發過應用的增多,應用內需要加載的 class 增多,經常就會遇到內存溢出(OOM)。或者更確切的說,因為加載 class 的增多導致的內存溢出是

  1. java.lang.OutOfMemoryError: PermGen space 

此時,解決OOM的方式一般是:

1. 分析應用的代碼寫的是否有問題,可以通過一些工具觀察應用內占用內存較多的 class 類型 (比如通過 JVisualVM 來分析Java七武器系列多情環 --多功能Profiling工具 JVisual VM,或者通過MAT來分析)

2. 修改 JVM啟動參數,增大關于 Perm Gen 的配置。

在 Tomcat 這一類的 應用服務器中,由于其做為應用的容器運行,可能自身的Perm Gen 占用并不多,但需要考慮部署到容器中的應用占用。有些應用依賴了大量的第三方類庫,也有一些應用會在運行時動態生成大量的 class,這些內容的加載,都容易導致 Perm Gen 的 OOM。

對于 OOM 的處理,內部會在啟動時占用一小塊內存,在 OOM 產生的時候釋放掉來臨時緩解一下,這種稱為oomParachute。

除此之外,Tomcat 在 manager 應用中還提供了發現內存泄漏的功能。

Tomcat 在 manager 應用中還提供了發現內存泄漏的功能

圖上說明寫的明白,該功能主要用于分析在應用停止、重部署、解除部署時是否造成了內存泄漏。

在請求后,manager的上方信息顯示區域會提示當前是否有應用造成的內存泄漏。

manager的上方信息顯示區域會提示當前是否有應用造成的內存泄漏

但需要注意的是此功能會觸發一次 Full GC 的執行,代碼中使用的是 System.gc(),在生產環境中如果使用需要謹慎。

那么,在什么情況下會導致所謂的應用內存泄漏呢?

我們都知道, 為了實現應用間的 class 隔離, Tomcat 對于每個應用,都會單獨使用一個 WebappClassLoader,這樣,多個應用間即使都使用到一個 類庫的不同版本,也不會相互影響造成沖突。

但是,在這種情況下,當一個應用已經執行了停止操作,或者執行了重部署操作,此時是會生成一個新的 classLoader 來加載新部署的應用類信息。

我們知道,在 Java 中,類與類之間是存在引用關系的,類似于強引用,弱引用,幻影引用,用來在GC時將一些不需要的 class 回收掉,騰出空間。按理說之前的 classLoader 本應該被垃圾回收,但在某些時候,由于一些類之前的引用關系導致該 classLoader,以及其加載的一系列 class 文件, 都不能被標識為垃圾,此時這些 class 依然駐留在 Perm Gen,隨著應用多次啟停,多次重部署之后,出現了 Perm Gen 的 OOM。

一般以下類庫的使用容易導致 class loader 逃過垃圾回收,產生內存泄漏:

  • JDBC driver 注冊
  • 一些 logging 框架
  • 沒有移除的 ThreadLocal的使用
  • 未停止的 Thread

此外,一些 Java API 的使用也容易導致此問題,例如

  • javax.imageio API
  • XML 解析
  • RMI 使用

由于這些容易占用 classLoader,導致其不能被回收,如果這些 class 交給各個應用的類加載器進行加載,就會使得 Perm Gen 中這些類越來越多,從而產生泄漏。

為此,在 Tomcat 中引入了JreMemoryLeakPreventionListener 這個組件。實現思路是在 Tomcat 啟動時,通過 System class Loader 來加載這些類。 由于類加載器的加載原理(默認父優先,而且這些系統的類,都會委托給系統類加載器進行加載),這些類不會再被 WebclassLoader 重新加載,從而減小內存泄漏的產生。

默認在 Tomcat 的配置 server.xml 中已經開啟了該組件,所以這些功能你已經不知不覺中在使用。

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-10-26 08:43:18

JavaScript內存處理

2009-06-16 11:11:07

Java內存管理Java內存泄漏

2015-05-14 15:38:40

javajava內存泄露

2011-11-17 13:59:41

Java內存管理內存泄露

2019-02-28 14:28:35

內存泄露tomcat調優

2010-09-25 11:23:15

Java內存泄露

2010-10-25 10:10:27

ibmdwJava

2017-04-13 13:00:27

LinuxWindowstomcat

2017-02-21 16:40:16

Android垃圾回收內存泄露

2017-12-11 11:00:27

內存泄露判斷

2017-11-15 19:30:08

Python內存泄露循環引用

2013-08-07 10:07:07

Handler內存泄露

2022-10-10 11:37:14

Gomap內存

2010-08-10 10:00:57

Flex內存

2011-07-20 17:04:43

Objective-C 內存 內存泄露

2010-06-02 13:00:43

Linux 內存監控

2010-09-25 11:32:24

Java內存泄漏

2022-08-26 07:33:49

內存JVMEntry

2013-12-23 09:25:21

2016-09-12 16:01:28

Android內存泄露內存管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区中文字幕 | 日韩免费av | 美女露尿口视频 | 91在线视频精品 | 久久久国产网站 | 欧美久久一区二区 | 粉嫩一区二区三区国产精品 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 久久一二| 国产精品一区二区久久精品爱微奶 | 亚洲精品大片 | 国产乱码精品1区2区3区 | 中文字幕第一页在线 | 狠狠操在线 | 日韩精品一区二区三区在线 | 欧美1—12sexvideos | 美女黄频| 欧美精品在线一区二区三区 | 国产亚洲一区二区三区在线观看 | 91视频电影 | 99re6热在线精品视频播放 | 亚洲精品一区二区 | 97免费视频在线观看 | 久久久这里只有17精品 | 精品日韩一区二区 | 日韩美女在线看免费观看 | 欧美性另类 | 91在线精品秘密一区二区 | 亚洲视频www | 国产精品久久久久久久久久 | 国产精品3区 | 成人精品一区二区 | 日本在线免费看最新的电影 | 午夜精 | 国产日韩欧美精品一区二区三区 | 涩涩视频在线观看 | 欧美手机在线 | 香蕉视频91 | 91精品福利 | 黄色大全免费看 | 国产精品久久久 |