当前位置: 首页 > news >正文

【Tomcat】常见面试题整理 共34题

文章目录

  • 1. 简述什么是Tomcat?
  • 2. Tomcat的缺省端口是多少,怎么修改?
  • 3. 简述Tomcat 目录结构及作用
  • 4. 简述Tomcat有几种部署方式?
  • 5. 简述Tomcat容器是如何创建servlet类实例?
  • 6. Tomcat有哪几种Connector运行模式?
  • 7. 简述Servlet的生命周期?
  • 8. 简述Tomcat 优化方案归纳
  • 9. 如何监视Tomcat的内存使用情况
  • 10. 简述Tomcat工作模式?
  • 11. Tomcat中使用的连接器是什么?
  • 12. 阐述Catalina的配置文件有哪些?
  • 13. 简述如何使用WAR文件部署web应用程序?
  • 14. 解释什么是Tomcat Valve?
  • 15. 什么是Tomcat Coyote
  • 16. 简述什么是Tomcat Jasper?
  • 17. Webserver和 Application Server的区别是什么?
  • 18. 如何在Tomcat集群中实现Session共享
  • 19. 简述Tomcat一个请求的完整过程?
  • 20. 如何查看Tomcat的session数目
  • 21. Tomcat主配置文件server.xml的作用?
  • 22. 描述Tomcat的BIO、NIO、AIO模式的特点及适用场景?
  • 23. Tomat线程池的作用及优化选项?
  • 24. Tomat连接器的作用及优化选项?
  • 25. Tomcat如何实现热部署和热加载?
  • 26. Tomcat针对JVM优化参数有哪些及其含义?
  • 27. Tomcat 默认IO模型是什么?
  • 28. Tomcat中请说明NAT协议的目的?
  • 29. 如何添加 JMS 远程监控?
  • 30. 如何利用Tomcat 在Linux部署项目
  • 31. 如何对Tomcat内存调优
  • 32. Tomcat如何打印类的加载情况及对象的回收情况
  • 33. Tomcat 中类加载的顺序
  • 34. Jboss和Tomcat的区别是什么


1. 简述什么是Tomcat?

Apache Tomcat 是一个开源的 Servlet 容器和 Web 服务器,主要用于运行 Java Servlet 和 JSP 应用。它轻量、跨平台,适合中小型 Web 应用的开发和部署。

2. Tomcat的缺省端口是多少,怎么修改?

Tomcat 的缺省端口是 8080。要修改该端口,请按照以下步骤操作:

  1. 打开 Tomcat 安装目录中的 conf 文件夹。
  2. 找到并打开 server.xml 文件。
  3. 找到以下行:
    <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
    
  4. port 属性的值修改为您想要的端口号,例如:
    <Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
    
  5. 保存文件并重启 Tomcat。

这样,Tomcat 将在新端口上运行。

3. 简述Tomcat 目录结构及作用

Tomcat 的目录结构及作用:

  1. bin:启动和关闭 Tomcat 的脚本。
  2. conf:配置文件(如 server.xmlweb.xml)。
  3. lib:Java 库和依赖的 JAR 文件。
  4. logs:运行时生成的日志文件。
  5. webapps:部署的 Web 应用程序。
  6. work:编译 JSP 文件的临时文件。
  7. temp:启动过程中产生的临时文件。

4. 简述Tomcat有几种部署方式?

Tomcat 的部署方式主要有以下几种:

  1. WAR 文件部署

    • 将 Web 应用打包为 WAR 文件,直接放入 webapps 目录,Tomcat 自动解压和部署。
  2. 解压目录部署

    • 将 WAR 文件解压到 webapps 目录,Tomcat 直接使用解压后的目录作为应用。
  3. 使用管理界面部署

    • 通过 Tomcat 的管理界面(如 manager 应用)上传和部署应用。
  4. 使用命令行工具

    • 使用 curl 或其他命令行工具,通过 HTTP 请求将 WAR 文件部署到 Tomcat。

5. 简述Tomcat容器是如何创建servlet类实例?

Tomcat 容器创建 Servlet 类实例的过程如下:

  1. 加载 Servlet 类

    • 当 Tomcat 接收到对 Servlet 的请求时,它首先检查是否已经加载了该 Servlet 类。如果未加载,则从 WEB-INF/classesWEB-INF/lib 目录加载相应的类文件。
  2. 实例化 Servlet

    • Tomcat 使用反射机制调用 Servlet 的无参构造函数,创建 Servlet 类的实例。
  3. 初始化 Servlet

    • 调用实例的 init(ServletConfig config) 方法进行初始化。此时,可以获取 Servlet 的配置信息。
  4. 请求处理

    • 当请求到达时,Tomcat 调用 Servlet 实例的 service() 方法来处理请求,通常会调用 doGet()doPost() 方法。
  5. 销毁 Servlet

    • 当容器关闭或不再使用该 Servlet 时,调用 destroy() 方法进行清理。

6. Tomcat有哪几种Connector运行模式?

Tomcat 的 Connector 运行模式有:

  1. Blocking (阻塞模式):每个请求使用一个线程,处理时被阻塞。
  2. Non-blocking (非阻塞模式):使用 NIO,允许一个线程处理多个请求。
  3. APR (Apache Portable Runtime):高性能异步 I/O,适合高并发。
  4. HTTP/2:支持 HTTP/2 协议,提高性能和降低延迟。

7. 简述Servlet的生命周期?

Servlet 的生命周期主要包括以下几个阶段:

  1. 加载与实例化

    • 当 Servlet 被请求时,容器加载 Servlet 类并创建其实例。
  2. 初始化

    • 调用 init(ServletConfig config) 方法进行初始化,进行一次性设置(如读取配置)。
  3. 请求处理

    • 当有请求到达时,容器调用 service() 方法,通常会调用 doGet()doPost() 等方法处理请求。
  4. 销毁

    • 当 Servlet 不再需要或容器关闭时,调用 destroy() 方法,进行资源清理。

这一生命周期管理了 Servlet 的创建、使用和销毁,确保其高效运行。

8. 简述Tomcat 优化方案归纳

Tomcat 优化方案可以归纳为以下几类:

  1. JVM 调优

    • 配置适当的堆内存大小、垃圾收集器和其他 JVM 参数,以提高性能。
  2. Connector 配置

    • 调整 Connector 的线程池大小和连接超时设置,选择合适的运行模式(如 NIO 或 APR)。
  3. 资源管理

    • 优化静态资源(如图片、CSS、JavaScript)的缓存策略,使用压缩和合并减少请求数量。
  4. 数据库优化

    • 使用连接池管理数据库连接,优化 SQL 查询和索引,减少数据库负担。
  5. 应用优化

    • 定期清理无用资源,使用更高效的算法和数据结构,减少内存泄漏。
  6. 监控与日志

    • 采用监控工具(如 JVisualVM 或 Prometheus)监控性能,优化日志级别和输出方式。

通过综合应用这些方案,可以显著提高 Tomcat 的性能和稳定性。

9. 如何监视Tomcat的内存使用情况

监视 Tomcat 内存使用情况的方法:

  1. JVisualVM:使用此工具连接到 Tomcat 实例,查看内存和线程状态。
  2. JConsole:类似 JVisualVM,连接并监控内存使用情况。
  3. 监控工具:使用 Prometheus 和 Grafana,通过 JMX 收集内存数据。
  4. JVM 选项:启动 Tomcat 时添加 -Dcom.sun.management.jmxremote 启用 JMX 监控。
  5. GC 日志:查看 Tomcat 的 GC 日志,分析内存和垃圾收集情况。

10. 简述Tomcat工作模式?

Tomcat 的工作模式主要有:

  1. 单线程模式:每个请求使用一个线程处理,适合小型应用。
  2. 多线程模式:使用线程池处理多个并发请求,提高性能。
  3. NIO 模式:非阻塞 I/O,允许单个线程处理多个连接,适合高并发场景。
  4. APR 模式:基于 Apache Portable Runtime,提供高性能和异步 I/O。

11. Tomcat中使用的连接器是什么?

Tomcat 中使用的连接器主要有以下几种:

  1. HTTP Connector

    • 处理 HTTP 请求,支持多种工作模式(如阻塞和非阻塞)。
  2. AJP Connector

    • 用于与其他 Web 服务器(如 Apache HTTP Server)通信,支持 AJP(Apache JServ Protocol)。
  3. HTTPS Connector

    • 处理 HTTPS 请求,提供安全的加密连接。
  4. JMX Connector

    • 用于监控和管理 Tomcat 实例,支持通过 JMX 进行远程管理。

这些连接器负责处理客户端请求和响应,并支持不同的协议和功能。

12. 阐述Catalina的配置文件有哪些?

Catalina 的配置文件主要包括以下几种:

  1. server.xml

    • 主配置文件,定义 Tomcat 实例的全局配置,包括连接器、引擎、虚拟主机等。
  2. web.xml

    • 默认的 web 应用程序部署描述符,定义 Servlet、过滤器、监听器等的配置,及应用的上下文参数。
  3. context.xml

    • 定义特定 web 应用的上下文配置,通常包括数据源和其他资源的定义。
  4. catalina.properties

    • 配置 Tomcat 的系统属性和资源路径。
  5. tomcat-users.xml

    • 用于配置用户和角色,管理 Tomcat 的安全和访问控制。

13. 简述如何使用WAR文件部署web应用程序?

使用 WAR 文件部署 Web 应用程序的步骤如下:

  1. 打包应用

    • 将 Web 应用程序打包为 WAR 文件,确保包含 WEB-INF 目录和其他资源。
  2. 复制 WAR 文件

    • 将生成的 WAR 文件复制到 Tomcat 的 webapps 目录。
  3. 启动 Tomcat

    • 启动 Tomcat 服务器。Tomcat 会自动检测到 WAR 文件并解压部署。
  4. 访问应用

    • 在浏览器中输入 http://<hostname>:<port>/<context-path> 访问部署的应用。例如,http://localhost:8080/myapp
  5. 检查状态

    • 通过 Tomcat 的管理界面或查看 logs 目录中的日志文件,检查应用的部署状态和任何错误信息。

14. 解释什么是Tomcat Valve?

Tomcat Valve 是一种组件,用于在请求处理流程中插入自定义功能或处理逻辑。它可以在请求到达 Servlet 之前或响应返回客户端之前执行特定操作。Valves 常用于以下目的:

  1. 日志记录:记录请求和响应的信息。
  2. 访问控制:基于请求的条件(如 IP 地址)决定是否允许访问。
  3. 请求过滤:对请求进行预处理或修改,或在响应返回前进行处理。

Valves 的工作原理是通过在 server.xmlcontext.xmlweb.xml 中配置,实现请求和响应的拦截和处理。Tomcat 提供了一些内置的 Valves,如 AccessLogValve 用于访问日志记录,用户也可以自定义 Valves 来满足特定需求。

15. 什么是Tomcat Coyote

Tomcat Coyote 是 Tomcat 的 HTTP 连接器,负责处理客户端请求和响应。它是 Tomcat 的核心组件之一,提供了以下功能:

  1. 协议支持:支持 HTTP 和 AJP(Apache JServ Protocol),处理 Web 应用的请求和响应。

  2. 连接管理:管理与客户端之间的连接,支持多线程处理和异步 I/O。

  3. 性能优化:通过使用 NIO(非阻塞 I/O)提高并发性能,支持高并发的 Web 应用。

  4. 安全性:提供支持 HTTPS 的功能,确保数据传输的安全性。

Coyote 作为连接器,通常与 Tomcat 的 Servlet 容器(Catalina)协同工作,确保 Web 应用的高效和可靠运行。

16. 简述什么是Tomcat Jasper?

Tomcat Jasper 是 Tomcat 的 JSP 引擎,负责处理 JavaServer Pages (JSP)。它的主要功能包括:

  1. JSP 编译:将 JSP 文件编译为 Java Servlet 类,使其可以被 Tomcat 执行。

  2. 动态内容生成:处理 JSP 中的动态内容,通过嵌入的 Java 代码生成 HTML 或其他响应内容。

  3. 错误处理:在 JSP 编译过程中捕获和处理错误,提供调试信息。

  4. 标签库支持:支持 JSP 标签库(如 JSTL),使得开发人员可以更简便地构建动态 Web 应用。

Jasper 作为 Tomcat 的核心组件,确保 JSP 文件能有效地被转换和执行,从而实现动态 Web 内容的生成。

17. Webserver和 Application Server的区别是什么?

Web Server与Application Server的区别

  1. 功能

    • Web Server:处理HTTP请求,提供静态内容。
    • Application Server:处理动态内容,运行业务逻辑。
  2. 请求处理

    • Web Server:直接响应静态请求,转发动态请求。
    • Application Server:处理并生成动态响应。
  3. 协议

    • Web Server:使用HTTP/HTTPS。
    • Application Server:使用多种协议(如HTTP、RMI)。
  4. 示例

    • Web Server:Apache、Nginx。
    • Application Server:Tomcat、JBoss。

18. 如何在Tomcat集群中实现Session共享

在Tomcat集群中实现Session共享,可以通过以下几种方式:

  1. 使用Sticky Sessions

    • 配置负载均衡器(如Apache HTTP Server、Nginx等)使其在处理请求时将相同用户的请求始终发送到同一Tomcat实例。这种方式简单,但在某个节点宕机时可能会导致会话丢失。
  2. 使用Session复制

    • 在Tomcat集群中,配置<Manager>元素来启用会话复制。例如,可以使用BackupManagerDeltaManager,这样在一个节点上创建的Session会被自动复制到其他节点。
    • 示例配置:
      <Manager className="org.apache.catalina.ha.session.DeltaManager" />
      
  3. 使用外部存储

    • 将Session存储在外部数据库、Redis或其他持久化存储中。这样可以在任何节点之间共享会话信息,避免单点故障。
    • 例如,使用Redis可以通过相应的库(如Spring Session)实现。
  4. 使用Tomcat自带的Cluster功能

    • 启用Tomcat的集群功能,配置server.xml中的<Cluster>元素。可以使用TCP或UDP协议来实现节点间的通信和数据同步。
  5. 使用Session Replication(会话复制)机制

    • Tomcat提供多种实现,包括BackupManagerDeltaManager等。根据应用的需求选择合适的复制策略。

19. 简述Tomcat一个请求的完整过程?

Tomcat 处理一个请求的完整过程如下:

  1. 客户端请求:客户端(如浏览器)通过 HTTP 协议向 Tomcat 发送请求。
  2. 接收请求:Tomcat 的连接器(Connector)监听特定端口(如 8080),接收客户端的请求。
  3. 解析请求:连接器将请求封装成 HttpServletRequest 对象,并交给合适的 Engine
  4. 匹配虚拟主机(Host)Engine 根据请求的主机名匹配到相应的 Host
  5. 匹配上下文(Context)Host 进一步根据 URL 的路径部分将请求分发给相应的 Context(即对应的 web 应用)。
  6. 匹配过滤器(Filter)Context 根据请求路径匹配一系列的 Filter,按照顺序依次调用这些过滤器。
  7. 调用Servlet:过滤器处理完成后,将请求交给具体的 Servlet,由 Servlet 执行业务逻辑。
  8. 生成响应Servlet 处理请求后,将响应数据写入 HttpServletResponse 对象中。
  9. 过滤器后处理:响应返回给过滤器链,过滤器可对响应进行后处理。
  10. 返回响应:Tomcat 将 HttpServletResponse 返回给连接器,由连接器通过网络将响应发送回客户端。

20. 如何查看Tomcat的session数目

可以通过以下方式查看 Tomcat 的 session 数目:

  1. JMX 控制台

    • 访问 localhost:8080/manager/status(需要管理员权限)。
    • 查看每个应用的 Active Sessions
  2. JConsole 工具

    • 连接到 Tomcat 的 JMX 端口。
    • Catalina -> Manager -> Attributes 中查看 activeSessions 属性。
  3. 命令行工具

    • 使用 jstat 命令监控 GC 活动,间接推断活跃 session 数量。

21. Tomcat主配置文件server.xml的作用?

server.xml 是 Tomcat 的主配置文件,用于配置服务器的核心组件及其行为。其作用包括:

  1. 配置服务和连接器(Connector)

    • 定义服务(Service)及其连接器(Connector),如 HTTP、HTTPS 和 AJP 的端口、线程数等。
  2. 配置引擎(Engine)

    • 定义 Engine 组件,用于管理和处理请求,包括虚拟主机(Host)和上下文(Context)的映射。
  3. 配置虚拟主机(Host)

    • 定义多个虚拟主机(Host),每个虚拟主机可以对应不同的域名和应用。
  4. 全局配置

    • 设置全局资源,如数据源、全局环境变量和类加载等。
  5. 安全设置

    • 配置 SSL、认证和访问控制等安全选项。

server.xml 是 Tomcat 的核心配置文件,影响整个服务器的运行行为。

22. 描述Tomcat的BIO、NIO、AIO模式的特点及适用场景?

  1. BIO(Blocking I/O)

    • 特点:一个线程处理一个请求,同步阻塞。
    • 适用场景:并发量小、简单场景(如开发、测试环境)。
  2. NIO(Non-blocking I/O)

    • 特点:使用少量线程处理大量请求,非阻塞,基于事件驱动。
    • 适用场景:并发量大、需要更好性能的场景(如生产环境)。
  3. AIO(Asynchronous I/O)

    • 特点:完全异步处理,操作系统层面通知完成。
    • 适用场景:高并发、长时间连接(如 WebSocket、大量 IO 操作)。

总结:BIO 用于低并发,NIO 用于高并发,AIO 用于极高并发场景。

23. Tomat线程池的作用及优化选项?

Tomcat 线程池的作用:

  • 处理并发请求:Tomcat 使用线程池管理 HTTP 请求,避免频繁创建和销毁线程带来的性能开销,提高处理效率。
  • 资源管理:控制线程的数量和生命周期,防止过多线程导致系统资源耗尽或内存溢出。

线程池的优化选项:

  1. maxThreads

    • 作用:设置最大线程数,即可同时处理的最大请求数。
    • 优化建议:根据服务器硬件和应用需求调整,通常设置为 CPU 核心数 × 2 或更多。
  2. minSpareThreads

    • 作用:设置最小空闲线程数,保证有足够线程随时处理新请求。
    • 优化建议:一般设置为 10-20 左右,根据应用请求的波动情况调整。
  3. acceptCount

    • 作用:当所有线程都被占用时,最多允许多少个请求在队列中等待。
    • 优化建议:适当增大,避免请求被拒绝或连接被重置,通常设置为 100-200
  4. maxIdleTime / keepAliveTimeout

    • 作用:控制线程空闲时间,超时后线程被销毁,节省资源。
    • 优化建议:根据业务情况调整,一般设置为 60000 毫秒(60秒)。
  5. executor(自定义线程池):

    • 作用:使用自定义线程池,精细控制线程池参数,如核心线程数、队列大小等。
    • 优化建议:在高级场景中使用,进一步优化性能。

优化原则:根据应用的并发量、处理时间和硬件配置合理调整线程池参数,避免过多或过少线程带来的性能问题。

24. Tomat连接器的作用及优化选项?

Tomcat 连接器的作用:

  • 处理客户端请求:连接器(Connector)负责接收和解析客户端请求,将其转发给相应的 Servlet 容器进行处理,并将响应返回给客户端。
  • 协议支持:支持多种协议(如 HTTP/1.1、AJP、HTTP/2),管理不同类型的连接。

连接器的优化选项:

  1. port

    • 作用:指定连接器监听的端口。
    • 优化建议:根据实际需求选择合适端口,避免冲突。
  2. protocol

    • 作用:选择 I/O 模型(BIO、NIO、APR/NIO2)。
    • 优化建议:选择合适的协议(如 NIO、APR)以提升性能。
  3. maxThreads

    • 作用:最大线程数,决定可同时处理的最大请求数。
    • 优化建议:根据硬件配置和请求量调优,通常为 CPU 核心数 × 2 或更多。
  4. acceptCount

    • 作用:当线程用尽时,最大等待队列长度。
    • 优化建议:适当增大以防请求被拒绝,一般 100-200
  5. connectionTimeout

    • 作用:连接超时时间,控制空闲连接的存活时间。
    • 优化建议:设置为 30000(30秒)左右,减少资源占用。
  6. maxConnections

    • 作用:允许的最大连接数。
    • 优化建议:根据硬件和业务负载设定,防止连接耗尽。

优化原则:根据应用需求和硬件资源,合理配置连接器参数,避免瓶颈,提高并发处理能力和响应速度。

25. Tomcat如何实现热部署和热加载?

Tomcat 实现热部署和热加载的方式如下:

  1. 热部署(Hot Deployment)

    • 方式:将新的 WAR 文件或应用目录放入 webapps 目录,Tomcat 自动检测并部署。
    • 配置conf/server.xml 中的 <Host> 元素配置 autoDeploy="true"unpackWARs="true"
  2. 热加载(Hot Reload)

    • 方式:修改应用的 .class 文件或配置文件,Tomcat 自动重新加载。
    • 配置conf/context.xml<Context> 中设置 reloadable="true"

这两种方式无需重启服务器即可更新应用,但可能会带来性能开销或资源泄露,需谨慎使用。

26. Tomcat针对JVM优化参数有哪些及其含义?

Tomcat 常用的 JVM 优化参数及其含义:

  1. -Xms-Xmx

    • 作用:设置 JVM 初始堆内存和最大堆内存。
    • 建议:设为相同值,防止频繁扩展,通常为物理内存的 50%-80%。
  2. -Xmn

    • 作用:设置新生代内存大小。
    • 建议:为堆内存的 1/4 到 1/3,优化 GC 性能。
  3. -XX:PermSize-XX:MaxPermSize(Java 7 及以下):

    • 作用:设置方法区(永久代)大小。
    • 建议:适用于包含大量类的应用,如较大 web 项目。
  4. -XX:MetaspaceSize-XX:MaxMetaspaceSize(Java 8 及以上):

    • 作用:设置元空间大小,用于类元数据存储。
    • 建议:根据类加载情况设置,防止 OutOfMemoryError
  5. -XX:+UseG1GC

    • 作用:启用 G1 垃圾收集器。
    • 建议:适合大内存、多线程的应用,减少 GC 停顿时间。
  6. -XX:+HeapDumpOnOutOfMemoryError

    • 作用:在内存溢出时生成堆转储文件。
    • 建议:用于排查 OOM 问题。

这些参数可提高 Tomcat 性能和稳定性,应根据应用需求和服务器配置进行优化。

27. Tomcat 默认IO模型是什么?

Tomcat 默认的 I/O 模型是 NIO(Non-blocking I/O)。从 Tomcat 8 开始,NIO 成为默认的连接器协议,相比传统的 BIO 模型,NIO 可以更高效地处理并发请求,适用于大多数场景。

可以在 server.xml 中通过 protocol 属性查看或修改:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8080" ... />

其他可选的 I/O 模型包括:

  • BIOHttp11Protocol(同步阻塞)。
  • NIO2Http11Nio2Protocol(异步非阻塞)。
  • APRorg.apache.coyote.http11.Http11AprProtocol(基于 Apache Portable Runtime 的异步模型)。

28. Tomcat中请说明NAT协议的目的?

NAT(Network Address Translation)协议的目的在于:

  1. IP 地址转换:将私有网络(内部网络)中的 IP 地址转换为公共网络(外部网络)的 IP 地址。这样,多个内部设备可以共享一个公共 IP 地址进行外部通信。

  2. 节省 IP 地址:缓解 IPv4 地址不足的问题,通过将内部网络中的多个私有 IP 地址映射到一个或多个公共 IP 地址。

  3. 提高安全性:隐藏内部网络结构,使外部无法直接访问内部设备,从而提供一定的安全保护。

总结:NAT 主要用于 IP 地址转换、节省 IP 地址和增强安全性。需要注意的是,NAT 协议与 Tomcat 无直接关系,它是网络层面的技术。

29. 如何添加 JMS 远程监控?

添加 JMS 远程监控的步骤如下:

  1. 配置 JMX 远程访问

    • catalina.shcatalina.batJAVA_OPTS 中添加以下参数:
      -Dcom.sun.management.jmxremote 
      -Dcom.sun.management.jmxremote.port=9999 
      -Dcom.sun.management.jmxremote.ssl=false 
      -Dcom.sun.management.jmxremote.authenticate=false
      
    • 设置合适的端口和安全配置。
  2. 开放防火墙端口

    • 确保 JMX 端口(如 9999)在防火墙中开放,允许远程访问。
  3. 使用 JConsole 或 VisualVM 连接

    • 打开 JConsole 或 VisualVM,输入 hostname:port(如 localhost:9999)连接到远程 Tomcat 服务器,查看 JMS 指标。

这样即可通过 JMX 实现对 JMS 的远程监控。

30. 如何利用Tomcat 在Linux部署项目

利用 Tomcat 在 Linux 部署项目的步骤如下:

  1. 安装 Tomcat

    • 下载 Tomcat 压缩包,解压到目标目录(如 /opt/tomcat)。
    • 设置环境变量:CATALINA_HOME 指向 Tomcat 根目录。
  2. 部署项目

    • .war 文件放入 webapps 目录,Tomcat 会自动解压和部署。
    • 或者将项目目录放入 webapps,手动部署。
  3. 启动 Tomcat

    • 进入 bin 目录,运行 ./startup.sh 启动 Tomcat。
  4. 访问项目

    • 在浏览器中访问 http://<服务器IP>:8080/<项目名> 检查项目是否成功部署。
  5. 设置开机启动(可选)

    • /etc/systemd/system 创建 tomcat.service 文件,配置 Tomcat 为系统服务,设置开机自启。

这些步骤即可在 Linux 上成功部署 Tomcat 项目。

31. 如何对Tomcat内存调优

对 Tomcat 进行内存调优,可以调整以下 JVM 参数:

  1. 设置堆内存大小

    • -Xms:设置初始堆内存大小,如 -Xms512m
    • -Xmx:设置最大堆内存大小,如 -Xmx2048m
  2. 设置新生代大小

    • -Xmn:设置新生代内存大小,如 -Xmn512m
  3. 元空间(Java 8 及以上)

    • -XX:MetaspaceSize:初始元空间大小,如 -XX:MetaspaceSize=128m
    • -XX:MaxMetaspaceSize:最大元空间大小,如 -XX:MaxMetaspaceSize=512m
  4. 垃圾回收器选择

    • 使用 G1 垃圾收集器:-XX:+UseG1GC
    • 或使用 CMS 垃圾收集器:-XX:+UseConcMarkSweepGC
  5. 启用堆内存转储

    • -XX:+HeapDumpOnOutOfMemoryError:在内存溢出时生成堆转储文件,用于分析内存问题。

将上述参数添加到 CATALINA_OPTS 中进行调优即可。

32. Tomcat如何打印类的加载情况及对象的回收情况

  1. 打印类加载情况

catalina.shcatalina.bat 中的 JAVA_OPTS 添加以下参数:

-verbose:class

作用:记录 JVM 类加载和卸载的详细信息。

  • 查看输出:启动 Tomcat 后,可以在 catalina.out 或控制台中看到类加载的详细信息。
  1. 打印对象回收情况

catalina.shcatalina.bat 中的 JAVA_OPTS 添加以下参数:

-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps

作用:打印每次垃圾回收的信息,包括回收的对象数量和内存使用情况。

  • 查看输出:启动 Tomcat 后,可以在 catalina.out 或控制台中查看垃圾回收的详细日志。

33. Tomcat 中类加载的顺序

Tomcat 中类加载的顺序遵循以下规则:

  1. Bootstrap 类加载器

    • 加载 Java 核心类库($JAVA_HOME/jre/lib),如 java.lang.*java.util.* 等。
  2. 系统类加载器(System ClassLoader)

    • 加载 Tomcat 和 JRE 自身的库($JAVA_HOME/lib/ext$CATALINA_HOME/lib)。
  3. Web 应用类加载器(WebappClassLoader)

    • 加载每个 Web 应用的类和库,按以下顺序:
      • /WEB-INF/classes:加载应用的自定义类。
      • /WEB-INF/lib/*.jar:加载应用的依赖库。
  4. 父类委托模型

    • 类加载器采用“父类委托”机制,即先从父类加载器加载类,如果未找到,再从自己的路径加载,避免重复加载和类冲突。

注意事项:

  • 共享类库$CATALINA_HOME/lib 中的类库可被所有应用共享,适用于全局依赖。
  • 隔离性:各 Web 应用的类加载是独立的,互不干扰,保证应用之间的隔离性。

34. Jboss和Tomcat的区别是什么

Jboss 和 Tomcat 的主要区别

  1. 功能定位

    • Tomcat:轻量级 Servlet 容器,主要支持 JSP 和 Servlet,不完全实现 Java EE 规范。
    • Jboss(WildFly):全功能 Java EE 应用服务器,支持所有 Java EE 规范(如 EJB、JPA、JMS 等)。
  2. 应用场景

    • Tomcat:适用于 Web 应用程序,适合轻量级、低复杂度的项目。
    • Jboss:适合企业级应用,适用于需要完整 Java EE 特性的复杂项目。
  3. 资源需求

    • Tomcat:资源占用少,启动速度快。
    • Jboss:资源占用较大,启动相对慢。
  4. 扩展性

    • Tomcat:通过第三方库扩展 Java EE 功能。
    • Jboss:内置全面的 Java EE 功能,无需额外配置。

总结:Tomcat 轻量级,适合简单 Web 应用;Jboss 功能全面,适合企业级应用。

相关文章:

  • Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
  • 如何在 macOS 上恢复未保存的 Excel 文件 – 文件恢复的最佳方法
  • IP地址与智能家居能够碰撞出什么样的火花呢?
  • more、less 命令:阅读文本
  • 记录一次排查sql server 服务调用异常的问题
  • C++:fstream类中seekg()/seekp()与tellg()/tellp()的用法详解
  • 等保测评中的密码学应用分析
  • 基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)
  • uni-app - - - - -vue3使用i18n配置国际化语言
  • Qt系统相关——事件
  • 东华大学《2020年+2022年824自动控制原理真题》 (完整版)
  • 【Android】页面启动耗时统计流程梳理
  • Git从了解到操作
  • JavaEE: 深入探索TCP网络编程的奇妙世界(二)
  • 建立队列,插入队列,删除队列
  • “大数据应用场景”之隔壁老王(连载四)
  • 4. 路由到控制器 - Laravel从零开始教程
  • CentOS 7 防火墙操作
  • Debian下无root权限使用Python访问Oracle
  • quasar-framework cnodejs社区
  • Spring Boot MyBatis配置多种数据库
  • 闭包--闭包作用之保存(一)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 入门到放弃node系列之Hello Word篇
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器如何修改远程端口?
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (26)4.7 字符函数和字符串函数
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (HAL库版)freeRTOS移植STMF103
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)一个美国文科博士的YardLife
  • (超详细)语音信号处理之特征提取
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (十七)Flink 容错机制
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .Net 8.0 新的变化
  • .Net core 6.0 升8.0
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net 路由处理厉害了
  • .Net 执行Linux下多行shell命令方法
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • ??myeclipse+tomcat