Tomcat 和 Nginx 高频面试题

  1. Tomcat 和 Nginx 的区别是什么?何时选择 Tomcat?何时选择 Nginx?

    • Tomcat:Java 应用服务器,支持 Servlet/JSP,适合处理动态请求。
    • Nginx:高性能 Web 服务器 / 反向代理,适合静态资源和高并发连接。 
  1. 如何优化 Tomcat 性能?

    • 调整 JVM 参数(堆内存、GC 策略)。
      一、JVM 参数优化
      ‌堆内存配置‌
      
      设置初始堆(-Xms)与最大堆(-Xmx)相同值,避免动态扩容开销(如 -Xms4g -Xmx4g)
      
      年轻代大小设为堆的1/3(如 -Xmn2G),配置 Eden/Survivor 比例(-XX:SurvivorRatio=8)
      
      元空间设置:Java 8+ 使用 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
      ‌垃圾回收策略‌
      
      低延迟场景启用 G1 GC:-XX:+UseG1GC -XX:MaxGCPauseMillis=200
      高吞吐场景用并行 GC:-XX:+UseParallelGC -XX:ParallelGCThreads=[CPU核心数]
    • 优化 Connector 线程池参数。
      Connector 线程池优化(server.xml配置)
      
      <Connector 
        protocol="org.apache.coyote.http11.Http11Nio2Protocol"
        maxThreads="800"             <!-- 建议值=CPU核心数×200 -->
        minSpareThreads="100"        <!-- 核心空闲线程数 -->
        acceptCount="500"            <!-- 等待队列长度 -->
        connectionTimeout="20000"
        disableUploadTimeout="true"  <!-- 防上传阻塞 -->
        enableLookups="false"        <!-- 禁用DNS查询 -->
        compression="on"             <!-- GZIP压缩 -->
        compressionMinSize="2048"
      />
      
      
      ‌关键参数说明‌:
      
      maxThreads:最大并发处理线程数,需根据压测调整
      acceptCount:当线程耗尽时,请求队列的容纳能力
      NIO/NIO2 协议比 BIO 提升50%+吞吐量
    • 使用 APR 连接器替代 BIO/NIO。
      优势‌
      
      基于操作系统原生库(Apache Portable Runtime),网络I/O性能提升30%-50%12
      直接使用本地Socket缓冲,减少JVM堆内存压力
      
      
      ‌启用步骤
      <!-- server.xml 配置 -->
      <Connector 
        protocol="org.apache.coyote.http11.Http11AprProtocol"
        SSLEnabled="true"
      />
      
      
      ‌系统级准备‌:
      
      安装APR库:sudo apt install libtcnative-1
      添加Tomcat依赖:$CATALINA_HOME/bin/ 放置 tcnative-1.dll(Win)或.so(Linux)
      优化项预期性能提升适用场景
      JVM堆调优减少20-50% GC停顿内存敏感型应用
      NIO2线程池优化30-60%并发提升高并发短连接请求
      APR连接器40-70% I/O加速大文件传输/持续流式数据

  1. Nginx 如何实现高可用?

    • 主备模式(Keepalived + VIP)。
      一、主备模式(Keepalived + VIP)
      通过 ‌Keepalived‌ 实现故障自动切换,确保 Nginx 服务高可用:
      
      ‌1.架构组成‌
      
      ‌主节点(Master)‌:绑定虚拟 IP(VIP),处理所有流量
      ‌备节点(Backup)‌:实时监控主节点状态,主节点故障时接管 VIP
      ‌虚拟 IP(VIP)‌:客户端统一访问的入口 IP,主备切换时 IP 漂移
      
      2.核心配置(Keepalived)
      
      # 主节点配置(/etc/keepalived/keepalived.conf)
      vrrp_instance VI_1 {
          state MASTER           # 主节点标识
          interface eth0         # 网卡名称
          virtual_router_id 51   # 集群路由 ID(主备需一致)
          priority 100           # 优先级(主>备)
          advert_int 1           # 心跳检测间隔(秒)
          authentication {       # 认证机制
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {    # 虚拟 IP 配置
            192.168.1.100/24
          }
          track_script {         # 绑定 Nginx 健康检查脚本
            chk_nginx
          }
      }
      
    • 多级负载均衡(Nginx → 后端 Nginx → Tomcat)。
      适用于超大规模集群,提升横向扩展能力:
      
      1.架构分层
      graph LR
      A[客户端] --> B[L4 负载均衡器] 
      B --> C[一级 Nginx]
      C --> D[二级 Nginx] 
      D --> E[Tomcat 集群]
      
      第一级‌:Nginx 作为入口层,通过 upstream 分发到二级 Nginx
      # 一级 Nginx 配置
      upstream backend_nginx {
          server 192.168.2.10:80 weight=3;  # 权重分配
          server 192.168.2.11:80;
          keepalive 32;                     # 长连接复用
      }
      server {
          listen 80;
          location / {
              proxy_pass http://backend_nginx;
          }
      }
      
      
      第二级‌:Nginx 作为业务层,转发至 Tomcat 应用集群
      # 二级 Nginx 配置
      upstream tomcat_app {
          server 192.168.3.20:8080 max_fails=3 fail_timeout=30s;
          server 192.168.3.21:8080;
      }
      server {
          listen 80;
          location /api {
              proxy_pass http://tomcat_app;
          }
      }
      
      
      

 

  1. Nginx 负载均衡有哪些算法?适用场景是什么?

    • 轮询(默认):均匀分配请求。
    • IP 哈希:保证同一客户端请求到固定后端。
    • least_conn:适用于长连接场景(如数据库)。

 

  1. 如何排查 Tomcat 内存泄漏问题?

    • 使用 jmap 生成堆转储文件。
    • 通过 MAT(Memory Analyzer Tool)分析对象引用链。
    • 检查静态集合、未关闭的资源(如数据库连接)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值