我在 centos 6 OS 上使用 Apache Tomcat 8.0.23,内存为 1 GB。我在服务器端使用了 servlet 和 jsp。但几天后它会自动关闭。我已CATALINA_OPTS="-Xms128M -Xmx256M"
在 bin/setenv.sh 中指定了内存大小。有人能告诉我为什么我的服务器会关闭吗?我不太熟悉 Tomcat 和 linux。我还尝试查看和的日志文件var/log
。apache-Tomcat/logs
但我没有发现任何可疑的东西。1 GB 的内存对我的服务器来说够用吗?我的 android 应用程序在大约 5000 台设备上运行。
有什么建议 ?
编辑 :
07-Aug-2015 03:58:03.199 INFO [Finalizer] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [java.net.BindException]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [java.net.BindException]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1327)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1313)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1196)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at com.mysql.jdbc.CommunicationsException.<init>(CommunicationsException.java:161)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759)
at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1410)
at com.mysql.jdbc.Connection.realClose(Connection.java:4900)
at com.mysql.jdbc.Connection.cleanup(Connection.java:2061)
at com.mysql.jdbc.Connection.finalize(Connection.java:3376)
at java.lang.System$2.invokeFinalize(System.java:1270)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:98)
at java.lang.ref.Finalizer.access$100(Finalizer.java:34)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:210)
10-Aug-2015 18:34:35.757 WARNING [http-nio-8080-exec-63] org.apache.catalina.realm.LockOutRealm.authenticate An attempt was made to authenticate the locked user "root"
10-Aug-2015 18:36:19.397 WARNING [http-nio-8080-exec-65] org.apache.catalina.realm.LockOutRealm.authenticate An attempt was made to authenticate the locked user "manager"
10-Aug-2015 18:36:28.451 WARNING [http-nio-8080-exec-63] org.apache.catalina.realm.LockOutRealm.authenticate An attempt was made to authenticate the locked user "manager"
10-Aug-2015 18:36:38.882 WARNING [http-nio-8080-exec-70] org.apache.catalina.realm.LockOutRealm.authenticate An attempt was made to authenticate the locked user "manager"
谢谢 !
答案1
不幸的是,仅凭问题中给出的背景无法指出确切原因。您需要收集更多信息才能指出根本原因。
我只能为您提供一般的启发式方法来调试它。尝试更改环境的各种参数以定位根本原因,一次只更改一件事。问题何时发生?它是否在某些应用程序负载下发生。如果您运行没有应用程序的 tomcat 实例会发生什么?它在另一个操作系统或机器上运行吗?
您需要开始隔离故障。如果它在另一台机器上运行良好,那么您可以排除环境原因,例如 cron 作业或某些系统服务终止进程。如果您的 tomcat 实例在没有应用程序的情况下运行良好,那么故障不在服务器配置中。等等。
为了加快该过程(因为它每隔几天才会重复一次),您可以在单独的 tomcat 实例中运行每个测试,从而同时测试多种可能性。
在我看来,内存似乎不是问题所在。分配的内存应该足够,但即使内存不足,您也不应该OutOfMemoryError
只是默默地任意关机。
您可以尝试增加 tomcat 日志的详细程度以打印更详细的信息。这可以通过更改以下设置来实现./conf/logging.properties
答案2
尝试增加内存,然后编辑 setenv.sh 文件并增加 CATALINA_OPTS 变量以便为 tomcat 分配更多内存。