zoukankan      html  css  js  c++  java
  • windows下配置tomcat服务器的jvm内存大小的两种方式

    难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$)

    先看下报错信息,

     java.lang.OutOfMemoryError: GC overhead limit exceeded

    错误就是发出了这样的信号: 执行垃圾收集的时间比例太大, 有效的运算量太小. 默认情况下, 如果GC花费的时间超过 98%, 并且GC回收的内存少于 2%, JVM就会抛出这个错误。

    造成这个问题的原因可能是项目里某个地方定义的太多的map,list对象,或者一次从数据库中查询的数据量过大。

     资料来源:OutOfMemoryError系列(2): GC overhead limit exceeded

    查看tomcat服务启动信息,默认tomcat的内存分配大小是初始化128,最大值为256MB

    根据网上教程,在tomcatincatalina.bat文件

    rem ----- Execute The Requested Command ---------------------------------------
    
    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Using CATALINA_HOME:   "%CATALINA_HOME%"
    echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

    在Execute The Request Command注释下面添加参数,设置jvm内存最大值

    set "JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m"

    配置完之后再次查看启动日志tomcat/logs/catalina.2019-07-08.log

    发现日志里显示,jvm参数还是128 - 256 没变化

    继续查询资料,我们修改的catalina.bat配置文件对以服务方式启动的tomcat无效果Tomcat内存设置详解

    6.0以上的tomcat需要在tomcatw.exe文件中设置参数,比如我的tomcat9w.exe

    用这个方法的前提是我们的服务名称必须是tomcat9,否则这个tomcat9w.exe运行会报错,服务tomcat9未安装

    安装tomcat服务的方法:在tomcat/bin目录下,运行命令 service.bat install

    Usage: service.bat install/remove [service_name] [/user username]

    服务安装完后,设置如上图的配置,启动服务后,内存修改完成。

    下监控的截图(这张图原本的jvm内存最大为256MB时,内存使用率为89%),修改内存为512MB之后就好很多了

    通过以上内存的配置,可以总结windows下修改tomcat服务器jvm内存的两种方法:一种,直接修改catalina.bat文件,修改完后可以通过startup.bat方式启动直接生效

    另一种就是作为windows服务后台运行方式启动,这个需要修改tomcatw.exe的启动参数(不知道是不是动态参数修改,猜测不是)

  • 相关阅读:
    在公网上搭建的svn的经验
    Android postTranslate和preTranslate的理解
    archlinux pacman 报error 的解决办法
    C# .net 子类序列化时无法识别的解决办法
    eclipse 打开已有的项目
    .net 自带的md5 加密
    C#.NET里原型的解释和应用浅表复制和深表复制
    android开发中fragment的引用以及fragment与activity之间通信的概述
    Android通过http方式获取JSON字符串并解析的注意事项(乱码,小黑框)
    .NET 序列化 "该类型不能序列化"
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/11152872.html
Copyright © 2011-2022 走看看