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"));

  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/Orange42/p/9208566.html
Copyright © 2011-2022 走看看