Tomcat相關 -- 內存設置

java內存溢出詳解

一、常見的java內存溢出

1、java.lang.OutOfMemmoryError : Java heap space? -- JVM Heap (jvm 堆溢出)

JVM啟動時自動設置JVM Heap的值,其初始空間(即 -Xms)是物理內存的1/64,最大空間(-Xms)不可超過物理內存。

可利用JVM提供的 -Xmn -Xms -Xmx等選項進行設置。

Heap的大小是Young Generation(新生代)和Tenured Generation(老生代)之和。

在JVM中若98%用于GC,那可用的Heap size不足2%時,就會拋出異常。

解決之道:手動設置 JVM Heap的大小。

2、java.lang.OutOfMemoryError : PermGen space -- PermGen space溢出

Permanent Generation space(永生代):指內存的永久保存區域。

此塊內存主要是被JVM存放Class和Meta信息的。Class在被Load時被放入PermGen space區域,它和存放Instance的Heap區域不同,sun的GC不會在主程序運行期對PermGen space進行清理,所以若載入很多的Class,就可能出現PermGen space溢出。

解決之道:手動設置MaxPermSize的大小

3、java.lang.StackOverflowError? -- 棧溢出

JVM依然像C和Pascal一樣,采用棧式的虛擬機。函數的調用過程都體現在堆棧和退棧上。調用構造函數的“層”太多,會把棧區溢出的。

一般來說,棧區遠遠小于堆區,因函數調用過程往往不會多于上千層的,而即便每個函數調用需要1K,那么棧區也不過是需要1MB的空間。

通常棧的大小是1-2MB

解決之道:修改程序。

二、實際環境中的解決方法

在生產環境中tomcat內存設置不好,會出現JVM的內存溢出

1、Linux下的tomcat

修改 TOMCAT_HOME/bin/catalina.sh

位置:cygwin=false前

JAVA_OPTS="-server -Xms256 -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"

2、window下的tomcat

因window下的tomcat啟動分為startup.bat啟動和注冊成了windows服務,以services方式啟動。r所以修改方式不同。

1)startup.bat啟動

在TOMCAT_HOME/bin下找到catalina.bat,用文本編輯器打開,并加上一行:

set JAVA_OPTS= -server -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M

說明:加上 -server 是指啟動jvm時以服務器方式啟動,比客戶端啟動慢,但性能較好,可以自己選擇。

2)windows服務啟動

若tomcat是注冊成為window服務且是以服務方式啟動,那上面方法無效。因此tomcat啟動是讀取注冊表的參數,而不是讀取批處理文件參數。此時有兩種方法來設置JVM參數。

第一種:tomcat提供了一個設置啟動參數的窗體,雙擊TOMCAT_HOME/bin下的tomcat6w.exe? 如圖:

?

Initial memory pool : 指初始化堆內存大小

Maximun memory pool : 指最大堆內存大小

若要設置PermGen池的大小需在Java Option中添加如下參數設置:

Dcatalina.base=%tomcat_home%

-Dcatalina.home=%tomcat_home%

-Djava.endorsed.dirs=%tomcat_home%\endorsed

-Djava.io.tmpdir=%tomcat_home%\temp

-XX:PermSize=256M

-XX:MaxPermSize=256M

-XX:ReservedCodeCacheSize=48M

-Duser.timezone=GMT+08

(PS:網上說每一行后面不要有空格,沒試過)

第二種:打開注冊表->HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java(路徑可能有一點點差別)

修改Options的值,把剛才上面那些參數加進去就OK了。(別忘了先備份一下注冊表)

3、若在myeclipse中啟動tomcat,上面的修改就不起作用。

需在myeclipse中修改即可:

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的

Optional Java VM arguments中添加:-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m

?

三、JVM參數說明:

-server : 一定要作為第一個參數,在多個CPU時性能佳

-Xms : java Heap初始大小。 默認為物理內存的1/64

-Xms : java Heap最大值。建議設為物理內存的一半。不可超

-XX:PermSize : 設定內存的永久保存區初始大小,缺省值:64M

-XX:MaxPermSize : 設定內存的永久保存存區最大大小,缺省值:64M

-XX:SurvivorRatio=2 : 生還者池的大小,默值:2,若垃圾回收變成了瓶頸,可嘗試定制生成池設置

-XX:NewSize : 新生成的池的初始大小 缺省值:2M

-XX:MaxNewSize : 新生成的池的最大大小。缺省值:32M

若JVM的堆的大小大于1GB,則應該配置:-XX:newSize=640m -XX:MaxNewSize=640m -XX:SurvivorRatio=16,或將堆的總大小的50%到60%分配給新生成的池。調大新對象區,減少Full GC次數。

+XX:AggressiveHeap : 會使得Xms沒有意義。這個參數讓JVM忽略Xmx參數。瘋狂地吃完一個G物理內存,再吃盡一個G的swap.

-Xss : 每個線程的Stack大小, “-Xss 15120” 這使得JBoss每增加一個線程,就會立即消耗15M內存,而最佳值應該是128K,默認值:512K

-verbose:gc : 現實垃圾收集信息

-Xloggc:gc.log : 指定垃圾收集日志文件

-Xmn : young generation的heap大小,一般設置為Xmx的1/3或1/4.

-XX:+UseParNewGC : 縮短minor收集的時間

-XX:+UseConcMarkSweepGC : 縮短major收集的時間,此選項在Heap Size比較大而且Major收集時間較長的情況下使用更合適。

-XX:userParNewGC : 可用來設置并行收集(多CPU)

-XX:ParallelGCThreads : 可用來增加并行度(多CPU)

-XX:UseParallelGC : 設置后可使用并行清除收集器(多CPU)

?

出處:http://elf8848.iteye.com/blog/378805

轉載于:https://www.cnblogs.com/amywang/p/4766603.html

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

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

相關文章

CoreWCF 1.0 正式發布,支持 .NET Core 和 .NET 5+ 的 WCF

CoreWCF 項目組正式發布 1.0 版本的 CoreWCF, 這是面向 .NET Core 平臺的 WCF 移植版本。它支持 SOAP、NetTCP 和 WSDL 的相同實現。在代碼中的使用方式于 WCF 相同,但是升級到使用 ASP.NET Core 作為服務宿主,并工作在 .NET Core 平臺上。這是該項目的第…

【經典回放】多種語言系列數據結構算法:快速排序

快速排序(Quicksort)是對冒泡排序的一種改進。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過…

表頭合并_多個Excel表格合并數據麻煩?試試Power Query輕松幫你解決

Hi!大家好!歡迎來到小龍自修室!又到了小龍分享時間!(今天的內容有點多,希望各位看官一定要看到最后!有驚喜)上一篇文字小龍和大家一起制作了一個限定數據內容錄入的電子表格,我的表格我做主!表格…

C++入門指南及實戰 第三步 基本變量

在C編程中,內置了一些基本數據類型用來存儲一些不同類型的值。有字符類型 char 用以存儲字符,如a、b、c、d、-、、1、2、4、3、>、?等;有整形 int 用以存儲整數類型,如1、2、3、4、5、11、111、2311等;有浮點類型 …

OPCServer Modbus使用和配置

一,安裝KEPware.Enhanced.OPC.DDE.KEPServer。(PLC數據傳送給KEPServer,開發的程序用OPCServer讀KEPServer) 設置ip地址后面是指的plc站號,此處必須和plc上站號對應。否則無法接收數據。 打開quick client 查看傳值情況 二.C#程序代碼 引用opcdaauto.dll…

C# 創建命名管道服務器

通過創建 NamedPipeServerStream 的一個新實例,來創建服務器。NamedPipeServerStream 派生自基類 PipeStream,PipeStream 派生自 Stream 基類,因此可以使用流的所有功能,例如,可以創建CryptoStream 或 GZipStream&…

在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress

2019獨角獸企業重金招聘Python工程師標準>>> 在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress 在Banana Pi BPI-M1上使用OxOffice Impress,該簡報大小約26MB,採用自動播放機制。 OxOffice提供 arm linux的版本,可佈署在ar…

免殺新姿勢:利用線程將惡意代碼注入到內存中

本文講的是免殺新姿勢:利用線程將惡意代碼注入到內存中,產生存放遠程攻擊線程的進程在這篇文章中我不想一步一步解釋我編寫的C#代碼,但是我會展示下它能夠繞過殺毒軟件,并且操作非常簡單,而且實用。 首先說明一下&…

【經典回放】多種語言系列數據結構算法:希爾排序

【希爾排序原理】每隔sp(整數)個數即取數并判斷大小,交換,先構造局部有序序列,直到sp為1,構造完整的有序序列。 給出一組數據,如下: 0 1 2 3

Java之解決散列表的沖突用開放定址法和鏈表法

1 問題 理想狀態下,散列表就是一個包含關鍵字的固定大小的數組,通過使用散列函數,將關鍵字映射到數組的不同位置,哈希函數可以將關鍵字均勻的分散到數組的不同位置,不會出現兩個關鍵字散列值相同(假設關鍵…

python 手把手教你基于搜索引擎實現文章查重

前言 文章抄襲在互聯網中普遍存在,很多博主都收受其煩。近幾年隨著互聯網的發展,抄襲等不道德行為在互聯網上愈演愈烈,甚至復制、黏貼后發布標原創屢見不鮮,部分抄襲后的文章甚至標記了一些聯系方式從而使讀者獲取源碼等資料。這…

lru算法實現 redis_使用數組與雙向鏈表實現一個簡單的LRU算法

什么是LRU算法?redis大家都玩過吧,你們好奇redis內存數據存滿之后會發生什么嗎?拋出異常?禁止使用?還是刪除數據?其實redis設計了一種內潤淘汰機制。noeviction(默認策略):屏蔽寫操作&#xff0…

【經典回放】多種語言系列數據結構算法:歸并排序

目錄 干貨1:C#語言實現歸并排序! 干貨2:C語言實現歸并排序! 干貨1:C#語言實現歸并排序! 一、算法 1、思想基礎

Java對象和類

轉自原文:http://www.yiibai.com/java/java_object_classes.html java是一種面向對象的語言。由于具有面向對象特性的語言,Java支持以下基本概念: 多態性繼承封裝抽象化類對象實例方法消息解析在本章中,我們將探討類和對象這些概念…

bzoj3224 Tyvj 1728 普通平衡樹題解--Treap

題面: Description您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&…

Blazor University (18)使用 RenderFragments 模板化組件 —— 創建 TabControl

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/創建一個 TabControl 組件源代碼[1]接下來我們將創建一個 TabControl 組件。這將教您如何實現以下目標:將數據傳遞到 RenderFragment 以為其…

Java之GC機制

1 JVM基本結構 1)類加載器classLoader:在JVM啟動時或者類運行時將需要的.class文件加載到內存中 2)內存區域(運行時數據區): 是在JVM運行的時候操作所分配的內存區 3)執行引擎:負…

ArcGIS實驗教程——實驗十八:疊置分析(Overlay Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 目 錄 一、實驗描述 二、實驗內容 三、實驗目的 四、實驗數據

《零基礎看得懂的C語言入門教程 》——(一)脫離學習誤區

本節視頻連接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C語言學習有些誤區你應該知道,這樣學習起來事半功倍~一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由于自己是從初一時開始學習編程&#…

一套完整的導視設計案例_色彩導視藝術:烏克蘭基輔語言學校導視設計案例

學校導視設計案例建筑師Emil Dervish為烏克蘭基輔Underhub語言學校設計了色彩繽紛的導視系統,該設計靈感來源于倫敦地鐵,他希望通過彩色線條的大膽應用來營造輕松而歡樂的氛圍。讓我們一起來看看這座由“彩虹”做導視的學校。彩虹導視設計跟著紅色導視線…