一,前言

  在文章让tomcat使用指定JDK中,我让tomcat成功使用了我指定的JDK1.8,而不是环境变量中配置的JDK10。本篇文章我们就来探讨一下怎么设置tomcat使用的JVM的内存。

  为什么要设置tomcat是用的JVM的内存呢?

  大家在平时的工作或者学习中,很有可能会遇到内存溢出的异常例如:OutOfMemoryError,StackOverflowError,这个时候除去代码编写错误外,很可能是真的要增大JVM内存了。

  如何查看JVM内存使用情况呢?这里介绍一个JDK自带的JVM内存监控工具:jvisualvm

二,jvisualvm简单使用

  jvisualvm.exe就在JDK的bin目录中

  

  双击即可启动。在启动jvisualvm之前,我先启动在文章让tomcat使用指定JDK中配置了JDK1.8的tomcat。

  然后双击启动jvisualvm,如果你是第一次启动jvisualvm,需要做一些检查,不用配置任何东西,按指导点击即可。

  

  从上图中可以看到,本地中存在三个JVM进程,也就是说我现在的电脑中有三个JVM进程。

  第1个是jvisualvm自己的JVM进程。

  第2个是我现在电脑上启动的eclipse使用的JVM进程。

  第3个就是我在启动jvisualvm之前启动的tomcat使用的JVM进程了。

  双击第3个tomcat使用的JVM进程,就会进入JVM概述页面

  

  在概述页面中,我解释一下上图中标识的两个区域

  第1个区域展示了java和JVM的一些信息,例如,JVM使用的是hotspot虚拟机(版本信息)并且是以server模式启动的

  第2个区域是JVM参数区域,这里是接下来的一个重点关注区域了,因为JVM内存的设置会在这里直接显示出来

  接下来观察一下监视页面

  

  在这个页面中我也解释两个部分

  第1个部分是内存区域:这里主要是展示了堆内存的使用情况,从上图中可以看出在我的电脑上JVM默认的堆内存大小为200M,当然当内存使用达到200M的时候,JVM会想系统再申请额外的内存。我们一会儿就会更改这个内存的大小。

  第2个部分是Mataspace(元数据)内存区域:mataspace内存是hotspot虚拟机对虚拟机规范中的方法区的实现,这里主要存放的是类的元数据信息。在JDK1.8以前方法区的实现是永生代(permanent generation)

  为了能让我们接下来的JVM内存设置看到直接的效果,jvisualvm工具的使用就先介绍到这里,接下来就来修改JVM内存大小。

三,设置tomcat使用的JVM的内存

  其实也是超级简单,只需要在tomcat的bin目录下catalina.bat文件前面添加一行配置:set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m

  如下图

  

  上图中也对Xms,Xmx等参数进行了解释说明。

  这里再多说一句,为什么要讲-Xms和-Xmx设置为一样呢?因为虚拟机在向系统申请内存的时候是需要额外的消耗的,这里为了避免这些额外的消耗,将-Xms和-Xmx设置为一样。

  -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m也是同样的道理。

  接下来重启tomcat,在jvisualvm中重新双击tomcat虚拟机进程,观察概述JVM参数部分:

  

  可以看到,我们在catalina.bat中设置的参数都在这里体现了。那么到底有没有效果呢?

  我们来看一下监视页面中的堆内存部分

  

  可以看到-Xms和-Xmx设置的2048M的内存,确实是生效了。

  但是我发现mataspace的设置并没有生效,希望看到的小伙伴中能有人给我解答,谢谢。

  到这里,修改tomcat使用的JVM的内存,就结束了,希望对你有帮助。


原创不易,转载请声明出处:https://www.cnblogs.com/zhangchengzi/p/9759890.html

修改tomcat 使用的JVM的内存的更多相关文章

  1. Linux 下修改Tomcat使用的JVM内存大小

    我的服务器的配置: # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...

  2. 修改Tomcat使用的JVM内存大小

    我的服务器的配置: # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...

  3. 如何修改Tomcat运行时jvm编码

    问题: 最近在部署项目的时候出现数据乱码的情况,经过一番查看项目都是用的UTF-8编码格式,数据也是,但是经过调用接口传给对方就乱码了. 由于是部署在Windows环境下,Windows默认编码GBK ...

  4. 如何加大jvm的内存和tomcat的内存

    如何扩大jvm的内存和tomcat的内存,如何让项目没有用的值得到及时的回收和清理,java项目 最佳答案   修改 tomcat 的内存方式:修改 catalina.bat在set JAVA_OPT ...

  5. tomcat优化和JVM修改内存

    Tomcat中的线程池(APR和ThreadPool) 2. 在Connector中指定使用共享线程池: <Connector executor="tomcatThreadPool&q ...

  6. 修改tomcat JVM 大小

    参考:https://blog.csdn.net/mynamepg/article/details/80591348 1.Xms表示初始分配给jvm的内存大小,-Xmx表示最大可分配给jvm的内存大小 ...

  7. Linux下修改tomcat内存

    由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemo ...

  8. 基于JVM(内存)和Tomcat性能调优

    一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsa ...

  9. Tomcat中查看JVM内存使用情况

    TOMCAT运行时,实时监控当前应用JVM的使用情况:可以利用Tomcat自带的应用manager查看详情. 首先,确认服务目录webapps下有manager应用 其次,需要创建角色manager和 ...

随机推荐

  1. ASP.NET Core 2.2 : 二十六. 应用JWT进行用户认证

    本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案(ASP.NET Core 系列目录) 一.什么是JWT? JWT(json web token ...

  2. Nacos(八):Nacos持久化

    参考和感谢 Spring Cloud Alibaba基础教程:Nacos的数据持久化 前言 前景回顾: Nacos(七):Nacos共享配置 Nacos(六):多环境下如何"管理" ...

  3. 百度地图获取定位,实现拖动marker定位,返回具体的位置名

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 最近学习了JDK SPI

    JDK SPI是什么 最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了. 所以SPI是什么呢?SPI全称Se ...

  5. HTML 全局属性(摘自菜鸟教程)

    HTML 全局属性 New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规定元素的类名(classname) contenteditableNew ...

  6. HTTP 8中请求方式介绍

    HTTP请求方式中8种请求方法(简单介绍)   简单介绍 HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范.HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口 ...

  7. Keras(七)Keras.layers各种层介绍

    一.网络层 keras的层主要包括: 常用层(Core).卷积层(Convolutional).池化层(Pooling).局部连接层.递归层(Recurrent).嵌入层( Embedding).高级 ...

  8. 牛客2018国庆集训派对Day3 I Metropolis 多源最短路径

    传送门:https://www.nowcoder.com/acm/contest/203/I 题意: 求每个大都会到最近的一个大都会的距离. 思路: 把每个大都会设为起点,跑一遍最短路.在跑最短路的时 ...

  9. 爬虫反爬之代理IP

    爬虫反爬之代理IP 代理IP其实本就是在requests模块中的参数 定义: 代替原来的IP地址去对接网络的IP地址. 作用: 隐藏自身真实IP,避免被封. 获取代理IP网站 西刺代理.快代理.全网代 ...

  10. Go语言os标准库常用方法

    1. os.Getwd()函数 原型:func Getwd()(pwd string, err error) 作用:获取当前文件路径 返回:当前文件路径的字符串和一个err信息 示例: package ...