Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个Java虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给APP。当APP需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。

一、常见的Java内存溢出有以下三种:

1. java.lang.OutOfMemoryError: Java heap space      即JVM Heap溢出

解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理内存的1/64,最大空间不可超过物理内存。JVM提供-Xmn -Xms -Xmx等选项来进行设置。

出错场景:在JVM中,如果98%的时间是用于GC,且可用的Heap size不足2%时,将会出现JVM Heap溢出

解决方法:修改JVM Heap的大小。

2. java.lang.OutOfMemoryError: PermGen space        即PermGen space溢出。

解释说明:PermGen space是指内存的永久保存区域。这个区域主要存放Class和Meta信息,Class在被Load时就会被放入PermGen space。

出错场景:如果APP载入很多CLASS,就可能会出现PermGen space溢出。(因为sun的GC不会在程序运行时对PermGen space进行清理)。常见在web服务器对JSP进行pre compile的时候

解决方法:修改MaxPermSize大小

3. java.lang.StackOverflowError                    即栈溢出

解释说明:JVM采用的是栈式的虚拟机,函数的调用过程都体现在堆栈和退栈上。

出错场景:通常栈的大小是1-2MB的,如果调用构造函数的 “层”太多,则会出现栈溢出

解决方法:修改程序

二、Tomcat的JVM内存溢出解决方法

在生产环境中,tomcat内存设置不好很容易出现JVM内存溢,解决方法就是修改Tomcat中的catalina.sh文件。

在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下

# vi TOMCAT_HOME/bin/catalina.sh

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"

其他说明:

1.“m”说明单位是MB,否则默认是KB

2.一般使用物理内存的80%作为堆大小

3.一般把-Xms和-Xmx设为一样大

4.一般把-Xmn设置为-Xmx值的1/4

5.一般将堆的总大小的50%到60%分配给新生成的池

三、jvm参数说明:

-server                一定要作为第一个参数,启用JDK的server版本,在多个CPU时性能佳

-Xms                    java Heap初始大小。 默认是物理内存的1/64。

-Xmx                    java heap最大值。建议均设为物理内存的80%。不可超过物理内存。

-Xmn                    java heap最小值,一般设置为Xmx的3、4分之一。

-XX:PermSize            设定内存的永久保存区初始大小,缺省值为64M。

-XX:MaxPermSize        设定内存的永久保存区最大大小,缺省值为64M。

-XX:SurvivorRatio=2    生还者池的大小,默认是2。如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置

-XX:NewSize            新生成的池的初始大小。 缺省值为2M。

-XX:MaxNewSize          新生成的池的最大大小。 缺省值为32M。

+XX:AggressiveHeap      让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

-Xss                    每个线程的Stack大小

-verbose:gc            现实垃圾收集信息

-Xloggc:gc.log          指定垃圾收集日志文件

-XX:+UseParNewGC        缩短minor收集的时间

-XX:+UseConcMarkSweepGC 缩短major收集的时间

-XX:userParNewGC        可用来设置并行收集(多CPU)

-XX:ParallelGCThreads  可用来增加并行度(多CPU)

-XX:UseParallelGC      设置后可以使用并行清除收集器(多CPU)

Tomcat 的详细介绍:请点这里

Tomcat 的下载地址:请点这里

linux查看tomcat启动内存溢出,Linux下 Tomcat内存溢出相关推荐

  1. linux查看内核启动信息log,Linux内核查看log方法

    1 printk()打印内核消息. 2 管理内核内存的daemon(守护进程) Linux系统当中最流行的日志记录器是Sysklogd,Sysklogd 日志记录器由两个守护进程(klogd sysl ...

  2. linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间

    1 linux上根据运行程序的进程号,查看程序所在的绝对路径 1.如下,我想查看python 25_run_train_tripletloss_sknet_8w_offline_c_plus.py 这 ...

  3. tomcat启动错误:Error running tomcat: Address localhost:1099 is already in use

    tomcat启动错误:Error running tomcat: Address localhost:1099 is already in use.这是tomcat上一次启动后没有正常关闭或者遭遇异常 ...

  4. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...

    1.说出 10 个 linux 常用的指令 1) ls 查看目录中的文件 2)cd /home 进入 '/ home' 目录:cd .. 返回上一级目录:cd ../.. 返回上两级目录 3)mkdi ...

  5. linux tomcat 启动 无法访问,Linux下 Tomcat 配置启动成功但是无法访问网页的问题【2019-09-25】...

    如同显示 Linux下 tomcat 已经成功启动,但是无法访问 http://ip:8080 网页 提供我解决过程中的四种方法,供大家参考! 逐个排查问题,首先检查端口使用情况  [root@zzc ...

  6. Linux查看WAS的jvm信息,linux 下使用命令查看jvm信息

    java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...

  7. Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法

    前段时间使用阿里云server.使用的是Linux CentOS6.5系统,在搭建完Tomcat后发现,Tomcat无法自启动. 将启动tomcat的命令为tomcat_home/bin/startu ...

  8. linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

    定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...

  9. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...

    Linux下apache mysql等服务修改默认端口后无法正常启动解决办法 linux下 apache 等服务修改默认端口后无法正常启动解决办法 服务器上装了两个webserver,一个是nginx ...

  10. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

最新文章

  1. 类脑芯片怎么搞?三星哈佛:直接复制粘贴神经元 | Nature子刊
  2. linux调用python函数,python脚本里执行linux命令的时候如何调用python的函数?
  3. pandas的自带数据集_盘点 | Python自带的那些数据集
  4. python调用电脑蜂鸣器一直响_调用系统蜂鸣器方法
  5. kubesphere 3.0离线安装
  6. 两组回归系数差异检验_【stata系列】——组间系数差异检验
  7. 我的SWT与数字图像处理总结(3)—SWT如何得到图像某个位置的像素值和相应的RGB的值...
  8. BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)
  9. Microsoft word 表格居中对齐方法
  10. Linux cache清理
  11. 圈圈USB学习笔记5--关于HID协议
  12. 毕业设计外文文献下载方法
  13. MongoVUE破解
  14. Mac - 当前位置打开终端
  15. MiCT: Mixed 3D/2D Convolutional Tube for Human Action Recognition论文笔记
  16. vue的history模式,页面刷新404,以及引入得第三方插件或者JS路径错误的解决办法
  17. VisionPro脚本Simple与Advanced
  18. 基于自然语言处理的垃圾信息过滤方法
  19. 燃烧的远征java(一)-开发环境:JDK1.6+tomcat5.5
  20. 有谁在阜阳计算机学校教英语,阜阳计算机学校怎么样、好不好

热门文章

  1. android 打印流程图,Android实现Activities之间进行数据传递的方法
  2. php环境informix,在Nginx + php-fpm(fastcgi)环境下配置informix的连接
  3. 每日小记2017.3.7
  4. 每日小记 2017.2.14
  5. word回车后间距太大_关于Word自动编号你知道多少?
  6. Intel Skylake (Client) 架构/微架构/流水线 (5) - PAUSE指令时延
  7. 3GPP协议学习-TS 38.201-NR;物理层;总体描述
  8. python实现登录功能_python实现用户登录功能模块
  9. 为系统扩展而采取的一些措施——异步
  10. 一个自己实现的简单的智能指针模板类