Tomcat的jvm配置
Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。
1.Tomcat异常类型
常见的Java内存溢出有以下三种:
- 1. Java.lang.OutOfMemoryError:java heap space 堆溢出。
解释说明:JVM在启动的时候会自动设置JVM Heap(java堆)的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理内存的1/64,最大空间不可超过物理内存的1/4(Tomcat默认可以使用的内存为128MB)。JVM提供-Xmn -Xms -Xmx等选项来进行相关设置。
出错场景:在JVM中,如果98%的时间是用于GC,且可用的Heap size不足2%时,将会出现JVM Heap溢出
解决方法:修改JVM Heap的大小。
- 2. java.lang.OutOfMemoryError:PermGen space 非堆溢出
解释说明:PermGen space是指内存的永久保存区域。这个区域主要存放Class和Meta信息,Class在被Loader时就会被放入PermGen space。
出错场景:常见于web服务器对JSP进行pre compile的时候, 如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:修改MaxPermSize大小。建议将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存
- 3.
java.lang.OutOfMemoryError:unable to create new native thread.无法创建新的线程(较少见)
解释说明:这种现象比较少见,主要与JVM占用系统内存的比例有关,如果JVM占用的系统内存太大,导致创建线程所需要的物理内存有限。线程的大小是一定的,从而导致线程的数量受到限制。
解决方法:结合操作系统进行相关调整,结合不同情况对tomcat内存进行分配。
2.具体解决方法
前两种内存溢出通过设置tomcat的JVM配置进行解决。具体如下:
Linux(以1G内存为例):在%tomcat安装路径%/bin/catalina.sh文件中加入如下语句:
JAVA_OPTS='-server -Xms800m -Xmx800m -XX:PermSize=128m
-XX:MaxPermSize=128m'
其中:“m”说明单位是MB,否则默认是KB。
设置完后,需重新启动tomcat才生效。
1 java heap(java堆)设置
-Xms :Xms java Heap初始大小。
默认是物理内存的1/64;
-Xmx :java heap最大值。不超过物理内存的80%;
-Xmn :java heap最小值,一般设置为Xmx的4分之一;
备注:一般的要将-Xms和-Xmx选项设置为相同。
32位操作系统下JVM内存不超过2GB
2 PermGen space(永久保存区域)设置
-XX:PermSize:设定内存的永久保存区域;
-XX:MaxPermSize:设定最大内存的永久保存区域;
备注:-XX:MaxPermSize与-Xmx的总和不超过物理内存。
3 JVM其他参数:
-server/-client: 两个参数用于设置虚拟机使用何种运行模式,放在第一个
在windows上,缺省的虚拟机类型为client模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。
在Linux,Solaris上缺省采用server模式。server模式启动比client慢,但可获得更高的运行性能。对服务器端应用,推荐采用server模式,尤其是多个CPU的系统。
-XX:NewSize 新生成的池的初始大小,缺省值为2M。
-XX:MaxNewSize 新生成的池的最大大小,缺省值为32M。
-verbose:gc 现实垃圾收集信息。
-Xloggc:gc.log 指定垃圾收集日志文件。
-XX:+UseParNewGC 缩短minor收集的时间。
-XX:+UseConcMarkSweepGC 缩短major收集的时间。
-XX:userParNewGC 可用来设置并行收集(多CPU)。
-XX:ParallelGCThreads 可用来增加并行度(多CPU)。
-XX:UseParallelGC 设置后可以使用并行清除收集器(多CPU)。
备注:查询Tomcat的JVM内存方法:
在%tomcat安装路径%/conf/tomcat-users.xml中添加如下语句:

开启tomcat后 访问port/manager/status并输入用户密码(port为自己定义的ip以及端口号)即可查看JVM参数值。

Tomcat的jvm配置的更多相关文章
- Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)
来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...
- 配置Tomcat的JVM的大小解决Tomcat内存溢出的问题
操作步骤如下图所示(图中也有对应的文字说明已比较详细,不再用文字做过多的解释): 1: 2: 3: 4: 5: 下面是配置的参数的说明: -Xms256m JV ...
- MyEclipse中Tomcat对应JVM的参数配置
MyEclipse中Tomcat对应JVM的参数配置: -Xmx512M -Xms256M -XX:MaxPermSize=256m
- SpringBoot项目配置Tomcat和JVM参数
设置Tomcat端口号和连接数等 使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: package com.qipai.springbe ...
- tomcat 的优化配置
一.关于并发连接量的配置 在tomcat的server.xml配置文件中:将<Connector port="8080" protocol="HTTP/1.1&qu ...
- 转载:Tomcat的JVM设置和连接数设置
Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m Linux环境下修 ...
- Tomcat(JVM)性能监控方法
Tomcat(JVM)监控方法 1.Tomcat自带的监控页面 配置详见Tomcat安装配置监控一文,如图所示为监控页面: 2.LoadRunner编写脚本实现Tomcat监控 采用编写VuGen脚本 ...
- Tomcat安装、配置、优化及负载均衡详解
一.常见JavaWeb服务器 1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解 2.Tomcat服 ...
- eclipse:Tomcat设置jvm,解决java.lang.OutOfMemoryError: Java heap space 堆内存溢出
eclipse 有启动参数里设置jvm大小,因为eclipse运行时自己也需要jvm,所以eclipse.ini里设置的jvm大小不是具体某个程序运行时所用jvm的大小,这和具体程序运行的jvm大小无 ...
随机推荐
- 集训第六周 数学概念与方法 计数 排列 L题
Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样. 话 ...
- 集训第五周动态规划 H题 回文串统计
Hrdv is interested in a string,especially the palindrome string.So he wants some palindrome string.A ...
- url方法使用与单例模式
一.url方法使用 from django.contrib import admin from django.urls import path, include from django.conf.ur ...
- 自动生成 serialVersionUID 的设置
1 把鼠标放在类名上,会出现小灯泡的形状 点击 Add ‘serialVersionUID’ field... 即可生成 如果鼠标放在类名上没有出现 Add ‘serialVersionUID’ fi ...
- 将 Oracle VirtualBox 中运行的虚拟机导入 VMware Fusion、Workstation 或 Player
1.从virtualbox种导出电脑为 .ova格式镜像 要导入 Oracle VirtualBox 中运行的虚拟机,必须将该虚拟机从 VirtualBox 导出到开放虚拟化格式存档(.ova 文件) ...
- <<编程之美>> -- 队列中取最大值操作的问题
不得不说编程之美是一本好书,虽然很多题目在做acm中的过程中遇到过,不过还是有很多值得思考的地方 这是今天在编程之美上看到的一个问题,对于栈转化成队列的一个思考 平时都太过依赖c++内函数库中的栈和队 ...
- Linux下汇编语言学习笔记17 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- vagrant的学习 之 基础学习
vagrant的学习 之 基础学习 本文根据慕课网的视频教程练习,感谢慕课网! 慕课的参考文档地址:https://github.com/apanly/mooc/tree/master/vagrant ...
- winform总结6=>线程和委托的关系
基础类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- [bzoj2287][poj Challenge]消失之物_背包dp_容斥原理
消失之物 bzoj-2287 Poj Challenge 题目大意:给定$n$个物品,第$i$个物品的权值为$W_i$.记$Count(x,i)$为第$i$个物品不允许使用的情况下拿到重量为$x$的方 ...