JVM内存溢出之tomcat配置

JVM内存溢出常见的有一下两种:

第一种:java.lang.OutOfMemoryError: PermGen space

第二种:java.lang.OutOfMemoryError: Java heap space

第一种异常原因是因为我们项目中需要加载的文件太多所导致,项目发布时class文件和jar文件会被加载到jvm的永久区,当永久区空间不足时则会抛出 java.lang.OutOfMemoryError: PermGen space;

第二种为堆栈溢出,此异常在项目运行其产生,由于运行期产生太多的对象实例而没有被gc,所以才会抛出该异常;

针对以上两种异常,和Tomcat使用情况的不同,有如下三种解决方案:

1 、Tomcat解压版  通过startup.bat脚本运行:

当我们通过startup.bat运行tomcat时,需要记事本catalina.bat并找到

echo Using CATALINA_BASE:   "%CATALINA_BASE%"该行,

然后在上面添加

set JAVA_OPTS=%JAVA_OPTS% -server -Xms100m -Xmx1024m -XX:PermSize=20m -XX:MaxPermSize=100m

并将参数设置合理值。

2. Tomcat解压版 注册为系统服务

解压版注册为系统服务方式为,cmd 进入tomcat/bin目录然后执行service.bat install 服务名称;

当你下载的解压文件中没有service.bat请到官网重新下载,你可能不会遇到该问题,但我遇到了!

此时我们可以打开系统服务管理界面看到我们注册成功的tomcat服务

如上图我注册的系统服务为:tomcat9090,此时我们就可以在此关闭和启动tomcat服务,并可以设置为开机自启;

如果服务注册成功却无法启动,如:

或者错误代码为1;

请查看Tomcat logs日志,开发中看日志,和记录日志至关重要。

无法启动可能有一下原因:

2.1,也是网上挺多的:将JDK中BIN下的 msvcr71.dll 复制到 TOMCAT 中的 BIN 下(没有解决问题)

2.2,检查jdk版本是否太低

2.3,查看jdk和tomcat是否都是32位或64位,当两者位数不同是通过startup.bat脚本是可以启动,但当注册为系统服务时是无  法启动的,当然tomcat安装版也一样,要使用位数相同,且版本更新时间相近;

2.4,当tomcat服务可以启动,但在启动过程中停止,请查看logs日志,此时最大可能为PermGen space,解决方案为

2.4.1:

卸载服务:cmd 进入tomcat/bin目录然后执行service.bat uninstall 服务名称;

然后打开service.bat文件找到

--JvmOptions "-Dcatalina.home=%CATALINA_HOME%;.................E%\conf\logging.properties"并在尾部添加

-XX:PermSize=20m;-XX:MaxPermSize=100m参数之间以“;”相隔

如:“...............conf\logging.properties;-XX:PermSize=20m;-XX:MaxPermSize=100m"参数值按个人所需设定;

并设置下列两个参数:

--JvmMs 128 ^
    --JvmMx 1024

以上设置完成后请重新注册系统服务;

2.4.2:打开注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat9090\Parameters\Java

Options右击,修改,添加-XX:PermSize=20m;-XX:MaxPermSize=100m

如图:

然后重启服务;

3.Tomcat 安装版,如出现无法安装,或无法启动等问题请参考2.2至2.4解决方案;

JVM内存参数说明请参考官网:

http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html

累屁了,回家吃饭。。。。。

时间: 2024-10-13 00:20:08

JVM内存溢出之tomcat配置的相关文章

Tomcat中JVM内存溢出及合理配置(转)

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆.按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap

Tomcat中JVM内存溢出及合理配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆.按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap

【转】Tomcat中JVM内存溢出及合理配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆. 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”.

Tomcat 内存溢出,堆栈配置各种调整

java -Xmx1610M -version java -Xmx1610m -version 网摘的tomcat内存溢出解决方案 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种情况: 1.OutOfMemoryError: Java heap space 2.OutOfMemoryError: PermGen space 3.OutOfMem

内存溢出之Tomcat内存配置

设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4. 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置 三.实例,以下给出1G内存环境下Java jvm 的参数设置参考: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true &quo

java内存溢出和tomcat内存配置

Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存. 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置.Heap的大小是Young Generation 和Tenured Generaion 之和. 在JVM中如

巧解Tomcat中JVM内存溢出问题

你对Tomcat 的JVM内存溢出问题的解决方法是否了解,这里和大家分享一下,相信本文介绍一定会让你有所收获. tomcat 的JVM内存溢出问题的解决 最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错误,上网google了一下,了解了一下tomcat的运行机制,也

解决JVM内存溢出问题

今天遇到了一个问题,当我在增加配置文件(*.xml)内容的时候,重新启动tomcat6时,控制台报错:java.lang.StackOverflowError: 即,栈溢出错误. 内存溢出,即程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了. 内存溢出的问题要看业务和系统大小而定. 查看jvm内存 首先我们可以查看jvm内存,在运行里面输入cmd然后输入jconsole,打开Java监视和管理控制台: 选择本地进程连接: 有3种解决JVM内存溢出的方式: 第一种,将没用的配置文件删

5种JVM垃圾收集器特点和8种JVM内存溢出原因

先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial Old CMS Parallel Old 堆内存垃圾收集器:G1 每种垃圾收集器之间有连线,表示他们可以搭配使用. 二.新生代垃圾收集器 (1)Serial 收集器 Serial 是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集.Serial 进行垃圾收集时,不仅只用一条线程执行垃圾收集工作,