tomcat分配内存的问题

s478853630 2019-11-08 10:10:41
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内存

这个问题纠结好久了,希望遇到过相同问题的大神支持一下!
...全文
320 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
s478853630 2019-11-10
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
感觉可能是和fork出来的子进程的内存控制有关系
LZ用以下命令查看一下系统内存过量使用控制的状况
cat /proc/sys/vm/overcommit_memory
默认是0,改成1试试
fork出来的子进程会复制父进程的内存(也就是一般会和父进程内存相同,当然为了优化也可能也可能不完全复制)
上述的控制设定,0表示拒绝进程过量使用内存,1表示始终过量使用


我用命令sysctl vm.overcommit_memory=1,这个参数值改成0,1,2都试了一遍,还是老样子,
不过还是要感谢你的回答
qybao 2019-11-08
  • 打赏
  • 举报
回复
感觉可能是和fork出来的子进程的内存控制有关系
LZ用以下命令查看一下系统内存过量使用控制的状况
cat /proc/sys/vm/overcommit_memory
默认是0,改成1试试
fork出来的子进程会复制父进程的内存(也就是一般会和父进程内存相同,当然为了优化也可能也可能不完全复制)
上述的控制设定,0表示拒绝进程过量使用内存,1表示始终过量使用
天涯若风 2019-11-08
  • 打赏
  • 举报
回复
在调用runtime去执行脚本的时候,其实就是JVM开了一个子线程去调用JVM所在系统的命令 看下是不是继承父进程的属性了
ml_dark 2019-11-08
  • 打赏
  • 举报
回复
java进程不是一开始运行就申请占用指定大小内存的,mx参数是最大值,如果程序占用内存没有涨,他是不会占用到最大内存的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧