zoukankan      html  css  js  c++  java
  • java程序运存扩容

    线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限。

    增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat

    首先是在tomcat的incatalina.bat文件中修改

    set JAVA_OPTS = "-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"

    但实际上不起作用,因为catalina.bat配置文件是由startup.bat加载的,线上业务是通过windows服务运行,实际启动的是tomcat.exe,并不会应用这个配置。

    所以要修改tomcatw.exe

    在windows运行中输入C: omcatintomcat6w.exe //ES//servername

    注:

    1.tomcat6w是tomcat6的,其他版本注意更换。

    2.servername填入程序注册的服务名

    会打开tomcat服务管理,在Java Options里加入虚拟机配置参数

    在Initial memory pool和Maximum memory pool里填入原本要填的-Xms和-Xmx就可以了

    但是这么做了以后还要注意一个问题,就是jdk能分配的内存可能是存在上限的。

    如果分配超过上限会无法启动程序并且报错:

    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.

    这个上限值可以通过在运行主机上通过cmd命令行运行

    java -Xmx1024M -version

    这个命令来测试。

    内存改好后,可以通过任务管理器观察内存情况,或者登陆tomcat-->status查看 JVM. 

    在程序中如果想查看内存,可以使用下面这几句:

    Java代码
    System.out.println("TotalMemory :::: " + (Runtime.getRuntime().totalMemory()/(1024*1024) + "M"));  

    System.out.println("Max Memory :::: " + (Runtime.getRuntime().maxMemory()/(1024*1024) + "M"));  

    System.out.println("Free Memory :::: " + (Runtime.getRuntime().freeMemory()/(1024*1024) + "M"));

  • 相关阅读:
    oracle数据库查看修改字符集问题
    C/C++内存问题检查利器—Purify (五)
    C/C++内存问题检查利器—Purify (四)
    C/C++内存问题检查利器—Purify (三)
    Oracle 字符集的查看和修改
    C/C++内存问题检查利器—Purify (二)
    linux内存管理之活动内存区
    C/C++内存问题检查利器—Purify (一)
    postman——基础操作——API请求与响应——API响应
    postman——基础操作——History选项卡
  • 原文地址:https://www.cnblogs.com/Orange42/p/9208566.html
Copyright © 2011-2022 走看看