NutzCN Logo
问答 增加内存 到底怎么加?
发布于 952天前 作者 javanan 948 次浏览 复制 上一个帖子 下一个帖子
标签:

经常出现内存溢出(代码问题吧!)
网上找了很多资料说是增加tomcat内存什么的
export CATALINA_OPTS="-Xms2048m -Xmx4096m"
export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m"

资料五花八门。。。最后我想问问 到底怎么加呢? 怎么查看我加成功了? 大家有没有一个写好的文档或是说明 放到nutz.cn上,方便大家以后用?

21 回复

windows 的话, env.bat 里面加

set JAVA_OPTS="-Xms2g -Xmx4g"

linux/mac的话, env.sh 里面加

export JAVA_OPTS="-Xms2g -Xmx4g"

PS: env.bat或env.sh都是需要自己建的. 不需要去修改catalina.sh/catalina.bat

附上当前这个网站的配置

-javaagent:/opt/OneAPM/oneapm.jar -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xmx1G -Xms128m -XX:-DisableExplicitGC -XX:+UseParallelGC 

其中

  • oneapm是监控的东西
  • -Djava.awt.headless=true 是linux下处理图片的常用配置之一,免得没有GUI环境导致解析出错
  • -Dfile.encoding=UTF-8 统一JVM的编码
  • -Xmx1G 最大内存1gb
  • -Xms128m 最小128mb
  • -XX:-DisableExplicitGC 忽略调用System.gc()

ok 等会尝试下

恩 windows 是 setenv.bat 还是就仅仅是env.bat 另外 我需要在哪里把调用这个文件吗?
以及怎么查看 我设置是否成功呢?

... 说错看, 就是 setenv.bat

以前 问过

javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) at com.alibaba.druid.stat.DruidDataSourceStatManager.removeDataSource(DruidDataSourceStatManager.java:200) at com.alibaba.druid.pool.DruidDataSource$2.run(DruidDataSource.java:1413) at java.security.AccessController.doPrivileged(Native Method) at com.alibaba.druid.pool.DruidDataSource.unregisterMbean(DruidDataSource.java:1409) at com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:1368) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.nutz.ioc.trigger.MethodEventTrigger.trigger(MethodEventTrigger.java:18) at org.nutz.ioc.ObjectProxy.depose(ObjectProxy.java:81) at org.nutz.ioc.impl.ScopeContext.clear(ScopeContext.java:93) at org.nutz.ioc.impl.ScopeContext.depose(ScopeContext.java:100) at org.nutz.ioc.impl.NutIoc.depose(NutIoc.java:227) at org.nutz.mvc.impl.NutLoading.depose(NutLoading.java:405) at org.nutz.mvc.ActionHandler.depose(ActionHandler.java:35) at org.nutz.mvc.NutFilter.destroy(NutFilter.java:124) at com.xy.businessmg.mvc.BusinessMGNutFilter.destroy(BusinessMGNutFilter.java:55) at org.apache.catalina.core.ApplicationFilterConfig.release(ApplicationFilterConfig.java:313) at org.apache.catalina.core.StandardContext.filterStop(StandardContext.java:4866) at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5679) at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1591) at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1580) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
贴里面说是 用15的 还有是说
新建一个setenv.bat 写入 set JAVA_OPTS"=-Ddruid.registerToSysProperty=true" 两个方法都不成功
set JAVA_OPTS"=-Ddruid.registerToSysProperty=true"

@javanan 查看? 在setenv.bat 里面echo一下不就知道文件是否调用了?

另外 在max_mem.bat 文件看到了这串东西 set JAVA_OPTS="-Xmx128m -Xms32m"

@javanan 每调用一次 set JAVA_OPTS 之前的设置就丢了

max_mem.bat 是什么东西? 没见过

我也没见过
网上说是 Windows环境下,是tomcat安装版(利用windows的系统服务启动tomcat),解决办法:

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun
2.0\Tomcat6\Parameters\JavaOptions

原值为:

-Dcatalina.home=E:\Tomcat 6.0

-Dcatalina.base=E:\Tomcat 6.0

-Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed

-Djava.io.tmpdir=E:\Tomcat 6.0\temp

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-Djava.util.logging.config.file=E:\Tomcat
6.0\conf\logging.properties

加入:

Xms512m -Xmx512m -XX:PermSize=128M
-XX:MaxNewSize=256m -XX:MaxPermSize=512m

重起tomcat服务,设置生效。 @wendal

原来你用tomcat service

什么意思 ? 我是 直接注册了阿里云 在阿里云市场下载了个windows service2012 然后安装了 里面的 tomcat 7

@javanan tomcat service不认setenv.bat的, 印象中
既然你已经找到这个键值, 后面继续加 -Ddruid.registerToSysProperty=true

另外, 我发现你写错了, 不过你现在应该去改键值

set JAVA_OPTS"=-Ddruid.registerToSysProperty=true"  // 等号的位置错误

@wendal 等号写错了
我现在
max_mem.bat
set JAVA_OPTS="-Xmx128m -Xms32m -Dfile.encoding=UTF-8 -Xmx21G -Xms512m -XX:-DisableExplicitGC -XX:+UseParallelGC -Ddruid.registerToSysProperty=true "

javax.management.InstanceNotFoundException: 异常还是存在,但是 内存变化了没 ,,不知怎么看

另外 -XX:-DisableExplicitGC -XX:+UseParallelGC
为什么要设置 忽略垃圾回收?
@wendal

@javanan 大部分情况下调用System.gc()意义不大

问题还是没有搞定 max_mem.bat 记录了 set JAVA_OPTS="-Xmx128m -Xms32m" 我改为set JAVA_OPTS="-Xmx128m -Xms32m -Dfile.encoding=UTF-8 -Xmx21G -Xms512m -XX:-DisableExplicitGC -XX:+UseParallelGC -Ddruid.registerToSysProperty=true " 然后报错 @wendal

-Xmx21G 你确定有这么多内存?

改为 1G了 异常时在 windows 服务 重启tomcat的时候出现的

逐个参数加,排查出哪个参数报错
自豪地采用 NutzCN ionic

set JAVA_OPTS 加一个这个:-XX:MaxPermSize=128m ,酌情修改大小

添加回复
请先登陆
回到顶部