可信网站服务周村网站制作价格低
news/
2025/9/26 9:52:11/
文章来源:
可信网站服务,周村网站制作价格低,深圳中心网站建设,微商城搭建平台【高并发】高并发环境下如何防止Tomcat内存溢出#xff1f;看完我懂了#xff01;#xff01;发布时间#xff1a;2020-04-19 00:47,浏览次数#xff1a;126, 标签#xff1a;Tomcat写在前面随着系统并发量越来越高#xff0c;Tomcat所占用的内存就会越来越大#xff0…【高并发】高并发环境下如何防止Tomcat内存溢出看完我懂了发布时间2020-04-19 00:47,浏览次数126, 标签Tomcat写在前面随着系统并发量越来越高Tomcat所占用的内存就会越来越大如果对Tomcat的内存管理不当则可能会引发Tomcat内存溢出的问题那么如何防止Tomcat内存溢出呢我们今天就来一起探讨下这个问题。防止Tomcat内存溢出可以总结为两个方案一个是设置Tomcat启动的初始内存一个是防止Tomcat所用的JVM内存溢出。接下来我们就分别对这两种方案作出简单的介绍。设置启动初始内存其初始空间(即-Xms)是物理内存的1/64最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。实例以下给出1G内存环境下java jvm 的参数设置参考JAVA_OPTS-server -Xms800m -Xmx800m -XX:PermSize64M -XX:MaxNewSize256m-XX:MaxPermSize128m -Djava.awt.headlesstrue JAVA_OPTS-server -Xms768m-Xmx768m -XX:PermSize128m -XX:MaxPermSize256m -XX:NewSize192m-XX:MaxNewSize384m CATALINA_OPTS-server -Xms768m -Xmx768m -XX:PermSize128m-XX:MaxPermSize256m -XX:NewSize192m -XX:MaxNewSize384mLinux在/usr/local/apache-tomcat-7.0/bin 目录下的catalina.sh文件中添加JAVA_OPTS-Xms512m-Xmx1024m要加“m”说明是MB否则就是KB了在启动tomcat时会报内存不足。* -Xms初始值* -Xmx最大值* -Xmn最小值Windows在catalina.bat最前面加入set JAVA_OPTS-Xms128m-Xmx350m如果用startup.bat启动tomcat,OK设置生效。够成功的分配200M内存。但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了就是说setJAVA_OPTS-Xms128m -Xmx350m 没起作用。上面分配200M内存就OOM了。。windows服务执行的是bin\tomcat.exe。它读取注册表中的值而不是catalina.bat的设置。解决办法修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat ServiceManager\Tomcat5\Parameters\JavaOptions原值为-Dcatalina.homeC:\ApacheGroup\Tomcat 7.0-Djava.endorsed.dirsC:\ApacheGroup\Tomcat 7.0\common\endorsed -Xrs加入 -Xms300m -Xmx350m重起tomcat服务设置生效。防止所用的JVM内存溢出1.java.lang.OutOfMemoryError: Java heap space解释Heap size 设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heapsize的值其初始空间(即-Xms)是物理内存的1/64最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms-Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示在JVM中如果98的时间是用于GC且可用的Heap size 不足2的时候将抛出此异常信息。提示Heap Size 最大不要超过可用物理内存的80一般的要将-Xms和-Xmx选项设置为相同而-Xmn为1/4的-Xmx值。解决方法手动设置Heap size修改TOMCAT_HOME/bin/catalina.bat在“echo Using CATALINA_BASE:$CATALINA_BASE”上面加入以下代码。set JAVA_OPTS%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize256m setJAVA_OPTS%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize256m或修改catalina.sh在“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行JAVA_OPTS$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize256m2.java.lang.OutOfMemoryError: PermGen space原因PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。解决方法手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh)在代码“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行set JAVA_OPTS%JAVA_OPTS% -server -XX:PermSize128M -XX:MaxPermSize512m“echo Using CATALINA_BASE: $CATALINA_BASE”上面加入以下行set JAVA_OPTS%JAVA_OPTS% -server -XX:PermSize128M -XX:MaxPermSize512mcatalina.sh文件的修改如下。Java代码JAVA_OPTS$JAVA_OPTS -server -XX:PermSize128M -XX:MaxPermSize512m3.分析java.lang.OutOfMemoryError: PermGen space发现很多人把问题归因于 spring,hibernate,tomcat因为他们动态产生类,导致JVM中的permanent heap溢出。然后解决方法众说纷纭有人说升级tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题在spring论坛上讨论很激烈因为spring在AOP时使用CBLIB会动态产生很多类。但问题是为什么这些王牌的开源会出现同一个问题呢那么是不是更基础的原因呢tomcat在QA很隐晦的回答了这一点我们知道这个问题但这个问题是由一个更基础的问题产生。于是有人对更基础的JVM做了检查发现了问题的关键。原来SUN的JVM把内存分了不同的区其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制现在的问题是动态加载类到这个区域后gc根本没办法回收对于以上两个问题我的处理是在catalina.bat的第一行增加set JAVA_OPTS-Xms64m -Xmx256m -XX:PermSize128M -XX:MaxNewSize256m-XX:MaxPermSize256m在catalina.sh的第一行增加JAVA_OPTS -Xms64m -Xmx256m -XX:PermSize128M -XX:MaxNewSize256m-XX:MaxPermSize256m写在最后如果觉得文章对你有点帮助请微信搜索并关注「 冰河技术 」微信公众号跟冰河学习高并发编程技术。最后附上并发编程需要掌握的核心技能知识图祝大家在学习并发编程时少走弯路。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918068.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!