Centos环境下Tomcat内存溢出的解决方案

问题

今天客户端那边说报网络异常,查看服务器日志发现,Tomcat内存溢出了。

原理

Java虚拟机的运行时数据区一般分类如下(不一定是物理划分):
1. 堆:主要存放对象实例,线程共享
2. 栈:主要存储特定线程的方法调用状态,线程独占
3. 本地方法栈:存储本地方法的调用状态,线程独占
4. PC寄存器:学过操作系统课程的都知道,线程独占
5. 方法区:主要存储了类型信息,线程共享
因此,在抛出内存溢出错误的时候,一般都会提示内存泄露的种类,一般也都是按照区域进行划分:
1. 堆(heap)内存泄漏java.lang.OutOfMemoryError: Javaheap space:大家都比较熟悉 ,通过设置-Xms2048m -Xmx4096m可以解决
2. 栈(stack)内存泄漏:当前线程运行期间维护的中间变量等信息过多,例如常见的死循环引起stack over flow
3. 方法区(permanent heap)内存泄漏,即java.lang.OutOfMemoryError: PermGen space:发生的原因和类型装载、类型卸载有直接的关系,通过设置-XX:MaxNewSize=256m -XX:MaxPermSize=256m可以解决。
一般情况下,当服务器内存过小,而提供了大量的访问服务时,可能会缓存过多的数据对象造成堆内存溢出,当web应用不断扩大,加载的lib库达到一定大小(4M)后,就容易报PermGen OOM,也就是方法区溢出。

解决方案

在Linux服务器中将参数写入环境变量:
在Tomcat中bin目录下的catalina.sh文件中添加以下代码

在“# OS specific support.  $var _must_ be set to either true or false.”之前写入:

 

参考文章

【1】Linux 下修改Tomcat使用的JVM内存大小

【2】Tomcat运行Java Web内存溢出总结

【3】Java内存溢出的几种情况






如果您认为本教程质量不错,读后觉得收获很大,预期工资能蹭蹭蹭的往上涨,那么不妨小额赞助我一下,让我有动力继续写出高质量的教程。

发布者

souvc

souvc

搜你所想,投你所好。

《Centos环境下Tomcat内存溢出的解决方案》有84个想法

  1. Pingback: binaural
  2. Pingback: GVK BIO
  3. Pingback: GVK BIO
  4. Pingback: Bdsm training
  5. Pingback: orospu cocuklari
  6. Pingback: DMPK
  7. Pingback: ADME
  8. Pingback: scr888 login
  9. Pingback: here
  10. Pingback: Coehumanl
  11. Pingback: Aws alkhazraji
  12. Pingback: Aws Colarts Diyala3
  13. Pingback: GVK BIO
  14. Pingback: warehouse for sale
  15. Pingback: seo salt lake city
  16. Pingback: warehouses for sale
  17. Pingback: park city real estate
  18. Pingback: 움짤
  19. Pingback: satta king
  20. Pingback: Caco-2 cell model
  21. Pingback: Pedja
  22. Pingback: Dhruvi Jaipur Escorts
  23. Pingback: Goa Escorts Eva J Law
  24. Pingback: Kolkata Escorts
  25. Pingback: immunforsvaret
  26. Pingback: Cheap

发表评论