`
gongminrui
  • 浏览: 63585 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

linux中tomcat内存溢出解决办法

阅读更多

常见的一般会有下面三种情况:
1.OutOfMemoryError: Java heap space
2.OutOfMemoryError: PermGen space
3.OutOfMemoryError: unable to create new native thread.
前两种通常一起进行操作,也就是通过下面的
    linux下在catalina.sh文件最前面加入如下语句,这个文件在tomcat -->bin目录下。
    JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m"

第三种无法创建新的线程。
这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。
这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。
每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M可用内存。这 500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的 400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。
这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。

给出一个有关能够创建线程的最大个数的估算公式:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
对于jdk1.5而言,假设操作系统保留120M内存:
1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
在2000/XP/2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。
以上就是针对Tomcat内存溢出的几种解决方案。

分享到:
评论

相关推荐

    LINUX部署tomcat内存溢出解决方案.txt

    LINUX部署tomcat内存溢出解决方案 已经使用过了,确实是好用的。

    tomcat内存溢出在不同系统上各种详细的解决方案

    ### Tomcat内存溢出在不同系统上的解决方案 #### 一、引言 在部署和运维基于Java的应用程序时,Tomcat作为广泛使用的轻量级Web容器之一,常常会在高负载或资源管理不当的情况下遭遇内存溢出的问题。内存溢出不仅会...

    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    本文将详细介绍如何利用 Eclipse Memory Analyzer (MAT) 工具来诊断并解决 Tomcat 服务器上的 Java 应用程序内存溢出问题。 #### 二、内存溢出的原因及处理思路 ##### 2.1 内存泄露 - **定义**:内存泄露是指不再...

    eclipse tomcat启动,内存溢出问题

    针对上述问题,我们可以采取以下措施来解决Eclipse中Tomcat启动时遇到的内存溢出问题: ##### 1. 修改Tomcat启动脚本中的JVM参数 - 打开Tomcat安装目录下的`bin`文件夹,找到`catalina.bat`文件(Windows系统)或`...

    linux解决Tomcat内存溢出的问题

    这里我们将深入探讨如何解决Linux环境下的Tomcat内存溢出问题。 首先,我们要了解Java内存模型的几个关键区域。Java内存主要分为堆内存(Heap)、永久代(PermGen,Java 8之后改为元空间Metaspace)和栈内存(Stack...

    tomcat内存溢出问题.doc

    标题中的“tomcat内存溢出问题.doc”表明讨论的主题是关于Tomcat服务器遇到的内存溢出(Out Of Memory,OOM)问题,特别是与Java的PermGen空间相关的内存溢出。描述提到,这个问题是因为Tomcat的初始内存设置过小,...

    有关tomcat内存溢出的完美解决方法

    为了解决Tomcat内存溢出的问题,开发者需要对JVM内存分配有深入的理解,并且能够在不同操作系统环境中灵活设置JAVA_OPTS参数。通过合理分配初始堆内存(-Xms)和最大堆内存(-Xmx)的大小,并根据实际情况调整年轻代...

    tomcat内存溢出

    本文将围绕“Tomcat内存溢出”这一主题,结合提供的描述与部分内容,深入探讨该问题的原因、表现形式以及具体的解决方案。 #### 二、Tomcat内存溢出概述 Tomcat服务器在运行过程中如果出现`java.lang....

    Tomcat JVM内存优化(Linux环境)

    通过上述方法可以有效地解决Linux环境下Tomcat服务器中的JVM内存溢出问题。需要注意的是,内存优化是一个持续的过程,需要根据应用的具体情况不断调整和优化。此外,合理设计应用程序架构和代码逻辑也是减少内存消耗...

    tomcat_eclipse配置内存溢出

    ### Tomcat与Eclipse配置内存溢出解决方案 #### 背景介绍 在进行Web应用程序开发过程中,尤其是在使用Tomcat服务器结合Eclipse或MyEclipse等集成开发环境(IDE)时,开发者可能会遇到一个常见的问题——内存溢出。...

    超实用内存溢出解决方法

    本文将介绍在Linux和Windows系统环境下针对Tomcat服务器的几种实用内存溢出解决方案,并特别关注不同启动方式下的配置差异。 #### Tomcat内存配置详解 **1. Linux环境配置** - 在`catalina.sh`文件顶部添加以下...

    apache服务器出现内存溢出的解决方法.doc

    本文主要探讨了Apache服务器在运行过程中遇到内存溢出问题的几种常见情况及其解决办法。虽然标题提及的是Apache服务器,但文中实际讨论的是与Apache服务器类似的Java应用服务器Tomcat的内存管理问题。文章深入分析了...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    ### 使用JNA替代JNI调用DLL,并解决内存溢出问题 #### 问题背景 在项目的开发过程中,常常遇到需要处理二进制流数据并对其进行解析处理的情况。这种情况下,如果上层应用平台采用的是Java开发,而底层算法或数据...

    tomcat如何扩大内存

    在使用 Tomcat 进行 Web 应用部署时,可能会遇到内存不足的问题,尤其是在启动大型应用或者应用中存在大量缓存数据的情况下,很容易导致 Java 虚拟机(JVM)内存溢出错误。本文将详细介绍如何调整 Tomcat 的内存配置...

    Tomcat内存优化

    通过对Tomcat进行合理的内存优化,不仅可以有效解决内存溢出问题,还可以显著提高应用的性能和稳定性。实践中,应根据具体情况灵活调整JVM参数,确保既能满足应用需求,又能充分利用硬件资源。同时,建议定期监控...

    设置tomcat启动内存大小

    - **调整堆内存**:根据应用的实际负载和业务需求,合理设置初始堆内存(-Xms)和最大堆内存(-Xmx),避免频繁的垃圾回收和内存溢出问题。 - **考虑多代内存**:对于大型应用,可能需要更细致地调整新生代(-XX:...

    Linux和window下tomcat虚拟路径的配置方式.docx

    在 Linux 下,如果 Tomcat 出现内存溢出错误,我们需要在 Tomcat 的 bin 目录下的 Catalina.sh 文件中添加以下配置信息: * -Xms512m:指定初始堆大小为 512MB。 * -Xmx1024m:指定最大堆大小为 1024MB。 这样可以...

    tomcat-7.0.82_for_Linux CSDN 下载

    tomcat7.x 在汲取了Tomcat 6.0.x... Web应用内存溢出侦测和预防 增强了管理程序和服务器管理程序的安全性 一般 CSRF保护 支持web应用中的外部内容的直接引用 重构 (connectors, lifecycle)及很多核心代码的全面梳理

    为tomcat设置内存

    在深入了解如何设置Tomcat内存之前,我们先来看看为什么会发生内存溢出。内存溢出错误通常由以下几个原因造成: 1. **应用占用过多内存**:如果部署的应用程序消耗了大量内存资源,超过了JVM分配给它的内存空间。 2...

Global site tag (gtag.js) - Google Analytics