我在 ubuntu 18.04 上使用 Tomcat 9、openjdk 11.0.9.1 时遇到问题。我按照以下说明安装了它:https://linuxize.com/post/how-to-install-tomcat-9-on-ubuntu-18-04/
它运行良好一段时间,但今天当我尝试访问任何应用程序或任何 Tomcat 管理器页面时,我的浏览器挂起。在此期间该服务尚未重新启动。我在 Tomcat 日志中没有发现任何有趣的内容。
我尝试了“systemctl status tomcat”,我看到任务数为 35,限制为 37。这让我担心,似乎几乎没有空间。
那么三个问题:
什么是任务?它们是线程吗?流程?还有别的事吗?
35和37从哪里来? 37 是基于我的服务器的大小(目前确实很小)吗?
我的 Tomcat 挂起是否与此有关?
systemctl 状态输出示例(请注意,您在此处看到的正常运行时间反映了我此后尝试重新启动服务的事实,但没有任何改进):
# systemctl status tomcat
● tomcat.service - Tomcat 9 servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-02-04 14:18:27 PST; 40min ago
Process: 194 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 212 (java)
Tasks: 35 (limit: 37)
CGroup: /system.slice/tomcat.service
└─212 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.pro
Feb 04 14:18:16 cloud.wolfeld.com shutdown.sh[20873]: /opt/tomcat/latest/bin/catalina.sh: 574: /opt/tomcat/latest/bin/catalina.sh: C
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Main process exited, code=exited, status=143/n/a
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Control process exited, code=exited status=2
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Failed with result 'exit-code'.
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: Stopped Tomcat 9 servlet container.
Feb 04 14:18:27 cloud.wolfeld.com systemd[1]: Starting Tomcat 9 servlet container...
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Existing PID file found during start.
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Removing/clearing stale PID file.
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Tomcat started.
Feb 04 14:18:27 cloud.wolfeld.com systemd[1]: Started Tomcat 9 servlet container.
答案1
感谢大家的帮助。我增加了服务器的大小以及分配给 JVM 的内存,但这并没有帮助。我原以为任务限制会在重新启动或其他情况下自动增加,但事实并非如此。
最终我了解到任务限制的默认值 37 是一个linux 编译时默认值,并且不依赖于运行时环境的任何启发式检查。当我在 中将其覆盖到 100 /etc/systemd/system.conf
、重新加载 systemd 配置并重新启动 Tomcat 服务后,应用程序再次运行。
DefaultTasksAccounting=yes
DefaultTasksMax=100
我必须观察 JVM 和系统内存的使用情况,但现在还好。再次感谢。
答案2
查看您提供的教程,tomcat的系统日志记录发生在文件中/opt/tomcat/latest/logs/catalina.out
。您应该查看此处以找到有关 Tomcat 停止原因的更多信息。
Tomcat应用服务的一个常见问题是内存限制。如果 JVM 需要的内存多于分配的内存,那么它可能会停止。我不知道您的 Tomcat 当前托管了多少虚拟主机或应用程序,但我可能建议每个应用程序至少使用 500MB,再加上 500MB 用于 tomcat web 应用程序(如 hostmanager)。
为了减少 Tomcat 消耗的内存量,您应该编辑该文件/etc/systemd/system/tomcat.service
。
例如,如果您托管 4 个应用程序,则应使用 2500MB (4x500 + 500 = 2500),因此替换该行,
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
和
Environment="CATALINA_OPTS=-Xms512M -Xmx2500M -server -XX:+UseParallelGC"