TT Lab
开始
学习 学习路径 课程

Tomcat 与 nginx 运维

启动 Tomcat 并摸清结构

在 TT Lab 中继续学习

目标

在没有 systemd 的情况下启动和停止 Tomcat,掌握目录结构和监听端口, 通过 setenv.sh 注入 JVM 选项,并能够在进程中确认这些选项是否真正生效。

为什么重要

SI 现场的服务器常常是解压厂商提供的 tar.gz 直接使用,而容器环境中 没有 systemd。所以能够直接操作 catalina.sh 是一项基本功。 还有一点——“进程在运行,但端口没有打开”的状态是真实存在的。 端口冲突或连接器初始化失败时就是这样。通过日志和端口而不是进程来确认启动, 这个习惯会在本实验中养成。

步骤

  1. 创建 /root/tc 目录,并将 java -version 的输出保存到 /root/tc/java.txt。 (必须包含标准错误。)
  2. 创建 /root/tc/layout.csv。首行为 dir,purpose。 必须有 bin、conf、lib、logs、webapps、work、temp 这七行, 每行的 purpose 至少 8 个字符。
  3. 用 /opt/tomcat/bin/catalina.sh start 启动 Tomcat。 http://127.0.0.1:8080/ 必须返回 HTTP 200。
  4. 在 /opt/tomcat/logs/catalina.out 中找到启动耗时(毫秒), 将仅数字保存到 /root/tc/startup.txt。
  5. 在当前处于 LISTEN 状态的端口中,找出 Tomcat 打开的端口, 按升序、每行一个保存到 /root/tc/ports.txt。
  6. 创建 /opt/tomcat/webapps/hello/index.html,并在正文中写入 LabHub 字符串。 http://127.0.0.1:8080/hello/ 必须返回 200,且正文中包含 LabHub。
  7. 停止 Tomcat 后再重新启动。 (先执行 catalina.sh stop 30 -force,再执行 catalina.sh start) 重启后 http://127.0.0.1:8080/hello/ 也必须返回 200。
  8. 创建 /opt/tomcat/bin/setenv.sh,把下面的选项定义为 CATALINA_OPTS, 然后重启。 -Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dump 也请提前创建好 /root/tc/dump 目录。 正在运行的 Java 进程的参数中必须实际看到这些选项,才算通过。

参考

确认 JDK 版本

创建 /root/tc 目录,并将 java -version 的输出保存到 /root/tc/java.txt。 (必须包含标准错误。)

java -version 的输出走的是标准错误。要保存到文件,请注意重定向。

整理目录的作用

创建 /root/tc/layout.csv。首行为 dir,purpose。 必须有 bin、conf、lib、logs、webapps、work、temp 这七行, 每行的 purpose 至少 8 个字符。

用一行文字写出每个目录存放什么。请区分 work 和 temp 的差别,以及 lib 和 webapps/*/WEB-INF/lib 的差别。

启动 Tomcat

用 /opt/tomcat/bin/catalina.sh start 启动 Tomcat。 http://127.0.0.1:8080/ 必须返回 HTTP 200。

这个环境中没有 systemctl。请直接运行 bin 目录下的启动脚本。启动是异步的,立刻 curl 可能会失败。

确认启动耗时

在 /opt/tomcat/logs/catalina.out 中找到启动耗时(毫秒), 将仅数字保存到 /root/tc/startup.txt。

catalina.out 中会留下形如“Server startup in [N] milliseconds”的一行。只需提取数字,所以请在 grep 之后接上 sed 或 awk。

确认监听端口

在当前处于 LISTEN 状态的端口中,找出 Tomcat 打开的端口, 按升序、每行一个保存到 /root/tc/ports.txt。

用 ss -ltn 查看当前处于 LISTEN 状态的端口。除了服务端口之外,应该还有一个端口是打开的,弄清楚它是什么,就是这一步的关键。

部署静态上下文

创建 /opt/tomcat/webapps/hello/index.html,并在正文中写入 LabHub 字符串。 http://127.0.0.1:8080/hello/ 必须返回 200,且正文中包含 LabHub。

在 webapps 下创建目录后,该目录名就成为上下文路径。不需要 WAR 也可以部署。

停止后重启

停止 Tomcat 后再重新启动。 (先执行 catalina.sh stop 30 -force,再执行 catalina.sh start) 重启后 http://127.0.0.1:8080/hello/ 也必须返回 200。

请养成给停止脚本指定等待时间和 -force 的习惯。重启是否真的发生,可以通过 catalina.out 中启动日志的数量来确认。

通过 setenv.sh 注入 JVM 选项

创建 /opt/tomcat/bin/setenv.sh,把下面的选项定义为 CATALINA_OPTS, 然后重启。 -Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dump 也请提前创建好 /root/tc/dump 目录。 正在运行的 Java 进程的参数中必须实际看到这些选项,才算通过。

直接修改 catalina.sh,Tomcat 升级时就会丢失。请创建 bin/setenv.sh 并在其中定义 CATALINA_OPTS,且必须重启才能生效。是否真正生效,请通过进程的运行参数来确认。