Tomcat运行Java Web内存溢出总结

开发 后端
如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误。

如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误。

SUN JVM的内存管理方式:

SUN的JVM是类似人类家族,也就是在一个地方创建对象,在它长期占据空间之前给它多次死亡的机会,SUN JVM会划分为:

1. 年轻的一代(Young generation),包括EDEN和2个幸存者空间(出发地和目的地the From space and the To space)

2. 老一代(Old generation)

3. ***的一代(Permanent generation)

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服务器中将参数写入环境变量:

  1. export CATALINA_OPTS="-Xms2048m -Xmx4096m" 
  2. export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m" 

Xmx ***不要超过服务器物理内存的80%

原文链接:http://blog.csdn.net/eagleking012/article/details/7071638

 【编辑推荐】

  1. Java NIO如何处理慢速的连接
  2. Java NIO2 AIO开发核心流程
  3. Java NIO开发实例
  4. Java NIO 聊天室实例
  5. Java NIO 深入研究
责任编辑:林师授 来源: eagleking012的博客
相关推荐

2010-09-26 15:53:25

JVM内存溢出

2024-03-11 08:22:40

Java内存泄漏

2017-02-24 15:28:33

Android内存溢出方法总结

2019-09-24 08:56:00

内存Redis使用

2018-04-17 14:41:41

Java堆内存溢出

2021-03-06 10:25:19

内存Java代码

2013-08-02 10:06:36

Android内存溢出

2012-05-29 16:30:33

Tomcat内存溢出

2009-08-18 16:45:50

Tomcat内存溢出

2009-06-16 11:01:14

Java内存溢出

2010-09-25 11:23:15

Java内存泄露

2020-08-10 17:49:25

JVM内存溢出

2021-02-03 15:12:08

java内存溢出

2010-09-17 16:18:43

Java内存溢出

2015-03-30 11:18:50

内存管理Android

2012-05-15 02:04:22

JVMJava

2012-03-14 10:58:27

Java

2019-02-28 14:28:35

内存泄露tomcat调优

2020-05-09 13:49:00

内存空间垃圾

2021-06-28 06:45:06

内存溢出内存泄露JavaScript
点赞
收藏

51CTO技术栈公众号