在我的博文"Tomcat自启动"中提到了Windows下Tomcat配置成服务的方法,一直以为,直接在catalina.bat中设置JVM的参数,然而,最近在做一个项目,使用了缓存机制,JVM所需的内存空间较大,导致Tomcat服务莫名的down掉,而且查看catalina.out等日志文件,没有发现out of memory之类的异常。
后来通过查看操作系统的本身的系统日志,发现Tomcat异常退出,并在系统目录system32目录找到tomcat的异常日志文件hs_err_pid2676.log,2676为当时Tomcat服务启动时的进程号。查看文件,发现
0x4513cc00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=576, stack(0x454e0000,0x45530000)]
=>0x45139800 JavaThread "CompilerThread1" daemon [_thread_in_native, id=7516, stack(0x45490000,0x454e0000)]
Heap
PSYoungGen total 43712K, used 18992K [0x3f260000, 0x42da0000, 0x447b0000)
eden space 28416K, 63% used [0x3f260000,0x40420198,0x40e20000)
from space 15296K, 5% used [0x41eb0000,0x41f7c000,0x42da0000)
to space 16128K, 0% used [0x40e20000,0x40e20000,0x41de0000)
PSOldGen total 466048K, used 31595K [0x147b0000, 0x30ed0000, 0x3f260000)
object space 466048K, 6% used [0x147b0000,0x1668ac30,0x30ed0000)
PSPermGen total 131072K, used 129761K [0x047b0000, 0x0c7b0000, 0x147b0000)
object space 131072K, 99% used [0x047b0000,0x0662e098,0x0c7b0000)
jvm_args: -Dcatalina.base=C:\ProgramM\tomcat\5180-jss -Dcatalina.home=C:\ProgramM\tomcat\5180-jss -Djava.endorsed.dirs=C:\ProgramM\tomcat\5180-jss\endorsed -Djava.io.tmpdir=C:\ProgramM\tomcat\5180-jss\temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=C:\ProgramM\tomcat\5180-jss\conf\logging.properties-Xms128m -Xmx256m
我的JVM参数配置未生效,仍然是默认配置。
在网上查找了一番资料后,发现通过windows服务启动, 执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置。必须修改注册表或通过tomcat6w.exe里的java 选项修改。
1 解决办法:
修改注册表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
加入 -Xms256m -Xmx512m
2 打开tomcat服务管理器的java页,如
在Java Options里面输入需要设置的参数,如设置permsize的内存
-XX:PermSize=64M
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=48m
-Duser.timezone=GMT+08
注:每一行后面都不能有空格。
参考自:
http://liuazh.iteye.com/blog/629739
http://201202104504.iteye.com/blog/1436606
(责任编辑:IT) |