服务器:linnux 5.5 64位,已安装好 jdk;
Tomcat版本:apache-tomcat-7.0.53
操作软件:Xshell 4(Free for Home / School)
刚开始重启了一次tomcat,但用浏览器访问网站的时候一直卡着打不开,可能是tomcat的问题,于是在Xshell里输入命令 ps -ef|grep java 查看进程中是否有tomcat出现,如下图:
出现如上信息,说明tomcat进程存在,再次运行shutdown.sh和ps -ef|grep java看到该进程仍然无法结束,于是我强制结束该进程(点击这里查看:强制结束linux系统下的tomcat进程及tomcat重启的方法)。要命的时,我kill错了进程,如上图,本应是kill掉29053,但却把29378给kill掉了,导致的后果是再次运行shutdown.sh的时候,出现了以下的错误。
[root@sdc bin]# ./shutdown.sh Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr/java/jdk1.6.0_22 Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Apr 17, 2014 11:14:50 AM org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may not be running. Apr 17, 2014 11:14:50 AM org.apache.catalina.startup.Catalina stopServer SEVERE: Catalina.stop: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:498) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:370) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:457) [root@sdc bin]#
如下图:
反复操作,问题仍然没有解决,包括用reboot命令重启linux系统一样不行。
但奇怪的是,过了十多分钟后,分别再次运行shutdown.sh和startup.sh,发现上述问题已经不出现了,tomcat又恢复了正常,不知道是怎么回事。
事后又出现多次这样的问题,后来终于发现原来是tomcat内存太小了,需要给tomcat增加虚拟内存,增加了tomcat的内存后,问题得以解决,终于可以再次关闭或启动tomcat了。
在linux系统里修改tomcat内存的方法
修改/opt/tomcat/bin/catalina.sh这个文件,在
# OS specific support. $var _must_ be set to either true or false.
cygwin=false
这两行之行插入一行,最终修改为以下这样:
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-Xms512m -Xmx1024m -Xss2048K -XX:PermSize=256m -XX:MaxPermSize=512m"
cygwin=false
保存,重启tomcat即可。
各参数的比例:
Xmx 与PermSize的和不可超过JVM可获得的总内存
PermSize不可大于Xmx
请参见其它的参数详解的文章,各参数值大小的本文不讨论.