簡體   English   中英

大量的Permgen +性能影響

[英]Large Permgen size + performance impact

我們正在tomcat 6上運行liferay門戶。每個portlet是一個包含的Web應用程序,因此它包含portlet本身所需的所有庫。 我們目前有30多個portlet。 這樣的結果是,我們部署的每個portlet的tomcat的permgen都會增加。

現在,我們可以遵循兩條路徑。 將我們每個Portlet常用的一些庫移到tomcat共享庫中。 這將包括諸如spring / hibernate / cxf / ....之類的東西,以減小我們的高熱值,或者更容易的是增加高熱值。

第二種選擇將使我們能夠將每個portlet保持為獨立的實體。

現在的問題是,由於增加了冷氣的大小,會對性能產生負面影響嗎? 我們目前以512MB運行。 我幾乎沒有發現有關此的信息。 但是發現有人在談論人們正在談論以1024MB的permgen大小運行沒有問題。

只要您的服務器上有足夠的內存,我就無法想象任何事情都會出錯。 如果您不這樣做,那么Tomcat甚至可能無法啟動,因為它無法分配足夠的內存。 因此,如果啟動了,那就很好。 就我的經驗來看,1GB PermGen非常完美。

大型PermGen的不利之處在於,它為您留出了更少的系統內存,您可以將其分配給堆(Xmx)。

另一方面,我建議您重新考慮將Portlet視為獨立實體的好處。 例如:

  • 互操作性問題 :如果允許所有Portlet潛在地使用同一庫的不同版本,則存在某些風險,即它們將彼此之間以及與門戶本身不按預期進行協作
  • 性能 :PermGen占用空間只是一回事,但是在Portlet中到處添加jar將需要額外的文件描述符; 我不了解Windows,但是從長遠來看,這將損害linux服務器的性能。
  • 更改的自由 :如果您正在使用maven構建portlet,那么從lib/ext libs切換到portlet的lib庫僅是更改依賴項范圍的問題(對於門戶網站libs可能更煩人); 據我所知,Liferay SDK還通過添加其他ant任務來解決依賴關系並根據需要將其從portlet的lib刪除,從而使使用ant進行相似切換的操作變得容易。

PermGen內存可以被完整的收集垃圾回收,因此增加它可能會在進行完整的收集時增加GC時間。

這些收集不應該經常進行,並且通常只需要不到一秒鍾就可以完成1GB的permgen內存-我只是從(我有些朦朧)的內存中提取這個數字,所以如果您真的擔心GC時間到您自己進行一些計時測試(使用-verbose:gc並閱讀日志,更多詳細信息在這里

彼爾姆根尺寸超出OLD Gen-所以不要混淆。 關於第二點的意見-由於內存非常便宜,因此我們可以盡可能地增加permsize-但這會引發一些有關如何管理代碼的問題。 為什么我們需要這么多的燙發-JTa是否正在消耗那么多-我們正在加載多少個類? 應用程序正在打開多少個文件描述符(使用lsof命令檢查)。 我們應該設法回答這些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM