tomcat启动时默认占用2G内存,一旦超额运行就会内存溢出然后dump,这时候可以修改catalina.sh,加入:
JAVA_OPTS="-Xms12000m ........" 
机器内存16G,给tomcat分配12G,系统占4G
然后登录Linux执行 /tomcat/bin/startup.sh,这样是没问题的,基本不再内存溢出。如果不登录Linux,而是用java的Runtime.getRuntime().exec("/tomcat/bin/startup.sh");
也能启动tomcat,但不能给tomcat分配内存,用ps -ef|grep tomcat一看,tomcat还是只占2G内存这个问题纠结好久了,希望遇到过相同问题的大神支持一下!

解决方案 »

  1.   

    感觉可能是和fork出来的子进程的内存控制有关系
    LZ用以下命令查看一下系统内存过量使用控制的状况
    cat /proc/sys/vm/overcommit_memory
    默认是0,改成1试试
    fork出来的子进程会复制父进程的内存(也就是一般会和父进程内存相同,当然为了优化也可能也可能不完全复制)
    上述的控制设定,0表示拒绝进程过量使用内存,1表示始终过量使用
      

  2.   

    java进程不是一开始运行就申请占用指定大小内存的,mx参数是最大值,如果程序占用内存没有涨,他是不会占用到最大内存的
      

  3.   

    在调用runtime去执行脚本的时候,其实就是JVM开了一个子线程去调用JVM所在系统的命令
    看下是不是继承父进程的属性了
      

  4.   


    我用命令sysctl vm.overcommit_memory=1,这个参数值改成0,1,2都试了一遍,还是老样子,
    不过还是要感谢你的回答