服务器基本操作

Tomcat本身的Java语言编写的,我们知道运行Java程序需要使用java命令启动JVM,不过Tomcat把相关的命令都封装好了,作为Shell脚本放在了软件包的bin目录下(Windows下则是bat批处理脚本),我们直接使用即可。

本篇笔记我们主要针对Tomcat常用的基本操作进行介绍。

服务器启停

首先我们要知道Tomcat软件包内有一个bin/catalina.sh,Tomcat相关的操作命令最终都是调用这个脚本,不过实际上我们并不需要真的使用catalina.sh,我们一般是使用startup.shshutdown.sh,这两个脚本会拼装一些参数并间接调用catalina.sh

启动Tomcat服务器:

./startup.sh

停止Tomcat服务器:

./shutdown.sh

此外,我们可以使用JDK提供的jps命令查看Tomcat的进程号,必要时也可以直接kill,返回例子如下。

297 Bootstrap
346 Jps

上面这个名为Bootstrap的进程就是Tomcat,这里它的PID是297。

Tomcat启动后我们使用浏览器访问8080端口,可以看到相关页面。

配置启动参数

在实际生产环境中,我们经常需要手动对系统参数、JVM参数等进行调整,Tomcat支持JAVA_OPTS环境变量来接收这些参数。

设置JAVA_OPTS最简单的方式是修改Tomcat的启动脚本,我们可以直接在catalina.sh中加入相关的命令,下面是一个例子(Linux环境),我们设置了JVM的堆内存和元数据空间的内存。

catalina.sh

JAVA_OPTS="$JAVA_OPTS -server -Xms4096m -Xmx4096m -XX:MetaspaceSize=128m"

除此之外,我们也可以直接设置系统的JAVA_OPTS环境变量,这种方式主要用于容器化部署的情况,我们可以在Dockerfile或k8s的部署配置文件中指定环境变量。

JMX远程监控

JConsole工具可以用于连接和查看JVM进程的内存、线程等信息,对于定位线上程序的死锁、内存泄漏等问题以及JVM调优都十分有用。如果是本地开发环境就非常简单了,直接使用JConsole连接对应的进程即可,这里不多介绍。而如果是服务器环境,我们可以为Tomcat增加相关的启动参数,使Tomcat启动时暴露RMI协议端口,以便工具远程连接。

我们可以在JAVA_OPTS中添加以下启动参数:

-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

注意这里具体使用时,我们需要把hostname换成对应服务器的IP。

除此之外,如果是k8s容器环境,这里我们就无法填写hostname主机名了,因为k8s调度下的容器IP不是固定的。此时的最佳解决方案是这样的:我们主机名还是写127.0.0.1,同时使用kubectl命令,将容器内端口映射到本地,来实现JMX的远程连接。映射命令例子如下:

.\kubectl.exe --kubeconfig ./config port-forward -n dev order-687998bc67-srmjr --address 0.0.0.0 1099:1099

有关监控具体可以参考JMX相关章节。

Tomcat远程调试

有时我们会遇到十分棘手的bug,本地无法复现或没有测试条件,但在服务器环境上就会出现。此时我们可以使用远程断点调试的方式,解决此类尴尬的问题。我们在JAVA_OPTS中添加以下启动参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

此时我们可以使用Eclipse进行远程JVM的调试连接。

在Eclipse中,我们创建一个Debug Configuration,并选择Remote Java Application,输入调试端口对应的IP和端口号,此时就可以进行远程断点调试了。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap