经常出现内存溢出(代码问题吧!)
网上找了很多资料说是增加tomcat内存什么的
export CATALINA_OPTS="-Xms2048m -Xmx4096m"
export JAVA_OPTS="-XX:MaxNewSize=256m -XX:MaxPermSize=256m"
资料五花八门。。。最后我想问问 到底怎么加呢? 怎么查看我加成功了? 大家有没有一个写好的文档或是说明 放到nutz.cn上,方便大家以后用?
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
其中
以前 问过
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一下不就知道文件是否调用了?
@javanan 每调用一次 set JAVA_OPTS 之前的设置就丢了
我也没见过
网上说是 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
@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
逐个参数加,排查出哪个参数报错
自豪地采用 NutzCN ionic