打破PermGen神話

神話破滅 在我的最新文章中,我解釋了可能導致java.lang.OutOfMemoryError:PermGen空間崩潰的原因 現在該討論該問題的可能解決方案了。 或者,更確切地說,是關于互聯網對可能解決方案的建議。 不幸的是,我只能說,我對MythBusters的內心Jamie Hyneman進行了不同的“專家意見”喚醒。

我搜索了有關解決java.lang.OutOfMemoryError:PermGen空間崩潰的方法的當前常識,并瀏覽了幾十個頁面,這些頁面似乎更適合Google結果。 幸運的是,大多數建議已被提煉為備受推崇的StackOverflow的主題 。 如您所見,該主題非常受歡迎,并獲得了一些頗受好評的答案。 但是具有諷刺意味的是,整個主題包含的零解決方案我可以向我推薦。 好吧,除了“查找內存泄漏的原因”外,這當然是絕對正確的,但對回答“如何解決內存泄漏”的問題不是很有幫助。 讓我們回顧一下SO頁面上提出的建議。

使用-XX:MaxPermSize = XXXM

導致java.lang.OutOfMemoryError的原因有兩個:PermGen空間錯誤。

一種是應用程序服務器和/或應用程序確實確實使用了太多的類,以致它們不適合默認大小的永久代。 絕對有可能,但實際上并非如此。 在這種情況下,增加永久代的大小確實可以節省一天。 如果您唯一的問題是如何在太多的小房子里放太多家具,那就買更大的房子!

但是,如果您的愛心媽媽每周都會給您寄去新家具呢? 您可能無法一遍又一遍地搬到更大的房子。 正如我在上面提到的上一篇文章中所描述的,這正是內存泄漏以及類加載器泄漏的情況。 在此讓我清楚:永久代大小的增加不會使您免于類加載器泄漏。 它只能推遲。 并更難預測服務器將淘汰多少次重新部署。

-XX:+ CMSPermGenSweepingEnabled

關于StackOverflow的最流行的答案是將這些選項添加到服務器的命令行中。 而且,他們說:“也可以添加-XX:+ UseConcMarkSweepGC。 只是要確定”。 這些JVM標志的第一個問題是沒有關于它們真正作用的解釋。 無論是在SO答案中(我都不喜歡告訴您在沒有理由的情況下要做某事的答案),還是在整個Internet中都是如此。

確實,除了此頁面之外,我找不到有關這些選項的任何文檔。 但是,實際上,這甚至沒有關系。 絕不會對垃圾收集器選項進行任何修補,以防在班機泄漏時發生。 因為按照定義, 內存泄漏是GC不足的情況。 如果從服務器的類加載器中的某個地方到應用程序的對象或類之間存在有效的實時硬引用,則GC將永遠不會將其視為垃圾,也永遠不會對其進行回收。 當然,所有這些JVM標志看起來都很聰明和神奇。 在某些情況下,可能確實需要使用它們 但是它們肯定不夠 ,不能解決您的永久代泄漏。

使用JRockit

下一個建議是切換到JRockit JVM。 理由是,由于JRockit沒有永久代,因此無法用完它。 當然,這是一個有趣的主張。 不幸的是,它也不能解決我們的問題。

此“解決方案”的唯一結果將是獲取java.lang.OutOfMemoryError:Java堆空間,而不是java.lang.OutOfMemoryError:PermGen空間。 在沒有單獨生成類定義的情況下,JRockit為它們使用通常的Java堆空間。 而且,只要泄漏的根本原因沒有得到解決,只要有足夠的時間,這些類定義甚至可以填滿最大的堆。

重新啟動服務器

假裝問題已解決的另一種方法是不時重新啟動應用程序服務器。 例如,無需重新部署應用程序,只需重新啟動整個服務器即可。 但是,當您第一次看到部署了多個應用程序的應用程序服務器時,您會知道在生產環境中幾乎不可能做到這一點。 這并不是真正的解決方案。 這是將您的頭藏在沙子里的一種方法。

使用Tomcat

實際上,這并不是以前的絕望之作-最近的Tomcat版本確實嘗試解決類加載器泄漏。 自己看看他們的文檔 。 如果您可以將Tomcat用作目標服務器,并且如果您的泄漏是Tomcat可以成功應對的泄漏之一,那么也許,也許您很幸運,問題就為您解決了。

在此處使用<您最喜歡的探查器工具>

也可能是可行的解決方案。 但是,再加上幾個IF 。 首先,您應該能夠在受影響的環境中使用該探查器。 正如我之前在其他文章中提到的那樣, 探查器施加的開銷水平在(生產)環境中可能是不可接受的。 其次,您必須知道如何使用探查器提取所需的信息并確定泄漏的位置。 而我10多年的經驗表明,這種情況很少發生。

結論

到目前為止,我們還沒有看到java.lang.OutOfMemoryError:PermGen空間錯誤的任何確定解決方案。 在某些情況下,有些方法是可行的。 但是,令我震驚的是,大多數建議都完全無效 ! 您可能會浪費數天或數周的時間來嘗試它們,甚至沒有開始解決真正的問題:找到流氓的根本原因,以防泄漏!

幸運的是,從1.1版本開始, Plumbr還發現了PermGen泄漏 。 它告訴您阻止類加載器被釋放的根本原因,從而節省了尋找漏洞的時間。 因此,下一次,當遇到java.lang.OutOfMemoryError:PermGen空間消息時, 下載Plumbr并永久擺脫該問題。

參考: Plumbr博客博客上來自我們JCG合作伙伴 Nikita Salnikov Tarnovski的 PermGen神話 。

翻譯自: https://www.javacodegeeks.com/2012/12/busting-permgen-myths.html

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

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

相關文章

Linux獲取當前年月日后綴精確到微秒,例如2017-05-06T23:57:07.713171

代碼如下&#xff1a;詳細見注釋 #include <stdio.h> #include <string.h> #include <time.h> #include <sys/time.h>int main() {struct timeval start;struct tm *local_time NULL;static char str_time[100];char ms[16];gettimeofday( &start…

PhiloGL學習(5)——神說要有光,便有了光

前言 上一篇文章中介紹了如何創建三維對象及加載皮膚&#xff0c;本文為大家介紹如何為場景添加光源。 一、 原理分析 光在任何地方都是非常重要的&#xff0c;無論在哪里都說是要發光發熱&#xff0c;光和熱也是分不開的。光線分為點光源和線光源&#xff0c;所謂點光源和線光…

android 彈出彈框2秒消失_基于HTML5 Canvas 實現彈出框

前言用戶鼠標移入時&#xff0c;有彈出框出現&#xff0c;這樣的需求很常見。這在處理 HTML 元素實現時簡單&#xff0c;但是如果是對 HTML5 Canvas 構成的圖形進行處理&#xff0c;這種方法不再適用&#xff0c;因為 Canvas 使用的是另外一套機制&#xff0c;無論在 Canvas 上…

【CSS】小妙招,各種問題總結方法處理

1.實現div文字溢出自動省略號截取 overflow:hidden; /*超過部分不顯示*/       text-overflow:ellipsis; /*超過部分用點點表示*/       white-space:nowrap;/*不換行*/ 2.規定行數的截取效果 text-overflow: ellipsis; /*有些示例里需要定義該屬性&#xff0c…

Java2Days 2012:Java EE

Java2Days會議是東歐的主要活動&#xff0c;目的是介紹Java開發的最新趨勢。 今年&#xff0c;該活動于10月25日至26日在保加利亞的索非亞舉行。 我在那里&#xff0c;并有機會與一些SAP的同事一起品嘗了一些最新的Java&#xff0c;云和移動內容&#xff0c;這些內容已直接發送…

html5布局總結,HTML5網頁布局的總結

可以通過 和 將 html 元素組合起來。html 塊元素大多數 html 元素被定義為塊級元素或內聯元素。編者注&#xff1a;“塊級元素”譯為 block level element&#xff0c;“內聯元素”譯為 inline element。塊級元素在顯示時&#xff0c;通常會以新行來開始(和結束)。例子&#x…

c++ 優先隊列_C/C++數據結構:隊列結構最全解析!帶你零基礎入門隊列結構

前言上一章節針對于C語言棧結構做了解析&#xff0c;不清楚的可以回顧一下。本章節主要針對于C語言的基礎數據結構隊列做以解析。數據結構之隊列隊列是一種特殊的 線性表 &#xff0c;特殊之處在于它只允許在表的前端&#xff08;front&#xff09;進行刪除操作&#xff0c;而在…

bit-map再顯身手:test.txt中有42億個無符號整數, 求不存在于test.txt中的最小無符號整數。限制: 可用內存為600MB....

先看看這個題目&#xff1a;test.txt中有42億個無符號整數&#xff0c; 求不存在于test.txt中的最小無符號整數. 限制&#xff1a; 可用內存為600MB. 又是大數據。 看到42億&#xff0c; 有靈感沒&#xff1f; 要知道&#xff0c; 2的32次方就是42億多一點點啊。42億個無符號…

周期均方根和有效值的區別_黑豬肉和白豬肉有啥區別?

為啥散養黑豬肉的價格要比白豬貴很多?這其中的原因不看不知道!市面上的散養黑豬肉通常要比白豬肉貴很多&#xff0c;但是仍有不少人喜歡買黑豬肉回家吃&#xff0c;散養黑豬肉和白豬肉不僅僅是口感上有所差距&#xff0c;其價值差距體現在很多方面&#xff0c;接下來小編就和大…

BZOJ1734: [Usaco2005 Feb]Aggressive cows 憤怒的牛

【傳送門&#xff1a;BZOJ1734】 簡要題意&#xff1a; 約翰有N 間牛棚&#xff0c;這些牛棚坐落在一條直線上&#xff0c;第i 間牛棚位于坐標Xi 的位置。他要把C 頭 奶牛安排在這些牛棚里。每間牛棚最多可以放一頭奶牛&#xff0c;也可以空著。這些奶牛的脾氣都很暴燥&#xf…

CSS基礎范例

1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 <style>7 *{8 margin: 0; /*重置*/9 padding: 0…

測試環境搭建流程_前端構建 DevOps 搭建 DevOps 基礎平臺(中)

前言搭建基礎平臺搭建上篇的時候的時候&#xff0c;已經介紹過了項目流程設計、數據庫搭建、jwt 登錄等模塊。此篇我們介紹分支管理設計及其他的基礎模塊。后端模塊DevOps - Gitlab Api使用(已完成&#xff0c;點擊跳轉)DevOps - 搭建 DevOps 基礎平臺(已完成 50%)基礎平臺搭建…

什么是PermGen泄漏?

接下來是對Java應用程序中特定類型的內存問題的實用介紹。 即–我們將分析導致java.lang.OutOfMemoryError&#xff1a;PermGen空間的錯誤 堆棧跟蹤中的癥狀。 首先&#xff0c;我們將介紹理解該主題所需的核心概念&#xff0c;并說明什么是對象&#xff0c;類&#xff0c;類…

html浮動炫酷樣式,jQuery和CSS3炫酷表單浮動標簽特效

這是一款炫酷的jQuery和CSS3表單浮動標簽特效。浮動標簽是指輸入框中的文字或占位文本在輸入框聚焦的時候&#xff0c;以動畫的方式浮動到指定的地方。浮動標簽特效是一種新穎時尚的動畫特效&#xff0c;不僅效果很酷&#xff0c;而且能以明確的方式提示用戶該輸入框應該填寫上…

rto凈化效率計算公式_全面剖析 石油化工行業RTO蓄熱式焚燒爐的優勢要素

在我國的國民經濟發展中&#xff0c;石油化工產業是重要的能源基礎工業&#xff0c;但是廢氣的治理問題一直困擾著許多企業。直到RTO蓄熱式焚燒爐的面世&#xff0c;為石油化工行業的廢氣治理帶來了新希望。如今&#xff0c;有機廢氣治理工作越來越受到廣泛重視&#xff0c;傳統…

python作業:高級FTP程序

要求&#xff1a; 用戶加密認證允許同時多用戶登錄每個用戶有自己的家目錄 &#xff0c;且只能訪問自己的家目錄對用戶進行磁盤配額&#xff0c;每個用戶的可用空間不同允許用戶在ftp server上隨意切換目錄允許用戶查看當前目錄下文件允許上傳和下載文件&#xff0c;保證文件一…

webpack學習筆記 (一)

一、安裝nodejs&#xff1b; 點擊打開nodejs官方站點&#xff1b; 點擊下圖框住的按鈕&#xff0c;下周nodejs安裝包&#xff1b; 安裝下載好的安裝包。 安裝完畢之后&#xff0c;在cmd中輸入node -v查看是否已經安裝成功 如果有版本號顯示&#xff0c;則代表安裝成功&#xf…

將渦輪增壓器添加到JEE Apps

我扮演的關鍵角色之一是在本地社區中傳播Akka。 作為討論的一部分&#xff0c;人們通常會想到的問題/疑問是Akka如何針對編寫良好的Java / JEE應用程序提供更好的可伸縮性和并發性。 由于底層硬件/ JVM保持不變&#xff0c;因此參與者模型如何比傳統的JEE應用程序發揮更多的功…

python package_python之package定義

一.簡單說明 python是通過module組織代碼的&#xff0c;每一個module就是一個python文件&#xff0c;但是modules是通過package來組織的。我們平時在簡單測試的時候 一般就是幾個Python文件存放在同級的目錄下&#xff0c;但是當我們開始嘗試開發更為復雜的項目時&#xff0c;p…

html 手機端無法拖動地圖,關于騰訊地圖api的禁止地圖拖動問題

禁用滾動和拖動*{margin:0px;padding:0px;}body, button, input, select, textarea {font: 12px/16px Verdana, Helvetica, Arial, sans-serif;}p{width:603px;padding-top:3px;overflow:hidden;}.btn{width:142px;}#container{min-width:600px;min-height:767px;}//初始化函數…