在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存溢出是不一样的,当然处理方式也不一样。这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况:
1.OutOfMemoryError: Java heap space
2.OutOfMemoryError: PermGen space
3.OutOfMemoryError: unable to create new native thread.
Tomcat内存溢出解决方案
对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize -XX:MaxPermSize)
最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。
第一种:是堆溢出。
原因分析:
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-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值。
没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。
-Xms:初始堆大小
-Xmx:最大堆大小
但堆的大小受下面三方面影响:
1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64位操作系统对内存无限制。)
2.系统的可用虚拟内存限制;
3.系统的可用物理内存限制。
堆的大小可以使用 java -Xmx***M version 命令来测试。支持的话会出现jdk的版本号,不支持会报错。
-Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置
实例,以下给出1G内存环境下java jvm 的参数设置参考:
服务器为1G内存:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
服务器为64位、2G内存:
JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'
=============================================================
前提:是执行startup.bat启动tomcat的方式
Linux服务器:
在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
或者 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
或者 CATALINA_OPTS="-server -Xms256m -Xmx300m"
Windows服务器:
在/apache-tomcat-5.5.23/bin 目录下的catalina.bat
添加:set JAVA_OPTS=-Xms128m -Xmx350m
或者 set CATALINA_OPTS=-Xmx300M -Xms256M
(区别是一个直接设置jvm内存,另一个设置tomcat内存,CATALINA_OPTS似乎可以与JAVA_OPTS不加区别的使用)
原文链接地址:http://hi.baidu.com/soloker/blog/item/e5f63324a821eb184d088dfd.html
分享到:
相关推荐
tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,轻微时,会使系统性能急剧下降,严重时,将导致系统无法运行,影响系统的稳定性。
【标题】:Tomcat虚拟内存 【描述】:在Java应用程序服务器中,Tomcat作为流行的开源Web服务器,其性能很大程度上取决于如何配置虚拟内存。Java虚拟机(JVM)是运行Tomcat的基础,它管理着应用程序的内存需求,包括...
Tomcat内存溢出是由于JVM的虚拟内存默认为128M,当超过这个值时就把先前占用的内存释放,而导致出现HTTP500的错误。当用户执行一个大数据的应用时,系统会提示出错,前台错误为:HTTP Status 500-Dispatch[EAITool] ...
Linux 和 Window 下 Tomcat 虚拟路径的配置方式 Tomcat 是一个广泛使用的 Web 应用服务器,支持多种操作系统,包括 Linux 和 Windows。在实际应用中,我们经常需要配置 Tomcat 的虚拟路径,以便更好地管理和访问...
4. 设置环境变量: ```bash echo "JAVA_HOME=/data/server/java" > /etc/profile.d/java.sh echo "JRE_HOME=/data/server/java/jre/bin" >> /etc/profile.d/java.sh echo "CLASS_PATH=/data/server/java/lib:/...
- **可用虚拟内存**:系统总的虚拟内存限制。 - **可用物理内存**:物理内存总量。 ### 问题分析与解决方案 内存溢出往往与垃圾收集(GC)机制有关。当GC频繁执行仍无法解决内存不足时,会导致`Out of Memory ...
此外,合理设置内存大小、线程池大小等参数,可以提升Tomcat性能。 总之,配置Tomcat 6.0的虚拟目录是一项基础但重要的任务,它涉及到Web应用的部署和管理。理解并熟练掌握这个过程,将有助于我们更好地管理和运行...
但需要注意,实际最大值受到操作系统、虚拟内存和物理内存的限制。在32位系统上,通常限制在1.5GB至2GB之间,而在64位系统上则无此限制。 2. OutOfMemoryError: PermGen space PermGen空间是JVM的一个特殊区域,...
JVM 如何设置虚拟内存?在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候将抛出内存溢出异常信息。Heap Size 最大不要超过可用物理内存的 80%,一般的要将 Xmx 和 Xms 设置相同避免每次 GC ...
ssh Tomcat自动部署无需手动重启服务器设置 本文主要介绍了使用ssh实现Tomcat自动部署的方法,以及解决OutOfMemoryError PermGen space系统错误的方法。 一、配置Tomcat server.xml文件 在Tomcat的conf文件夹下...
例如,设置 -Xms 和 -Xmx 为 1024M,可以确保 Java 进程总是使用物理内存,不使用虚拟内存。 4. 修改 reloadable 参数:将 reloadable 设置为 false,可以减少不必要的开销,并提高服务器性能。 5. 使用 Status ...
2. 解压安装:下载并解压Tomcat 8.5.59压缩包,如`tomcat-8.5.59`,将解压后的目录设置为服务器的工作目录。 3. 启动与停止:使用`bin/startup.sh`(Unix/Linux)或`bin/startup.bat`(Windows)启动Tomcat,`bin/...
6. **虚拟主机配置**:如何在同一台机器上配置多个独立的Tomcat实例,或者在单个Tomcat中设置多个虚拟主机,以托管不同的Web应用。 7. **部署Web应用**:演示如何将WAR文件或已解压的目录放入webapps目录,以及如何...
6. **目录结构变更**:与早期版本相比,Tomcat 7.0的默认目录结构有所改变,例如`conf/Catalina/localhost`下用于存放每个虚拟主机的配置文件,这提高了多应用部署的灵活性。 7. **增强的部署功能**:通过`WEB-INF/...