一、Tomcat 会话共享为什么会成为问题¶
原笔记先单独列出了一节“Java 会话共享方案”,说明这并不是一个小问题。
原因很简单:
- 单节点时,Session 留在本机没问题
- 一旦进入多节点 Tomcat 集群
- 用户请求可能落到不同机器上
这时如果 Session 只保存在本地,就容易出现:
- 登录状态不一致
- 购物车状态丢失
- 用户体验混乱
二、原笔记总结了哪些会话共享方案¶
原笔记把几类思路做了汇总:
| 方案 | 说明 |
|---|---|
| 单机模式 | 单节点时不需要考虑会话共享 |
| Session 复制 | Tomcat 节点之间互相复制 Session |
| 插件 + Redis | 通过插件把 Session 存到 Redis 等外部存储 |
| 代码级指定 Session 存储 | 应用层自己决定会话位置 |
| 替代 Session | 用 OAuth、Token 等方式减少传统会话依赖 |
从这些方案可以看出:
- 集群规模越大
- 越不适合依赖简单复制
因此在现代架构里,更常见的方向通常是:
- 外部统一存储
- 或者弱化 Session,改成 Token 化
三、Tomcat 安全优化首先该看什么¶
原笔记把安全优化整理成了一张很实用的清单。
其中几个最值得优先关注的点包括:
3.1 保护关闭端口¶
例如:
<Server port="8115" shutdown="lidao996">
这体现的思路是:
- 不使用默认关闭端口和默认关闭口令
3.2 禁用或限制管理端¶
原笔记明确提醒:
docsexampleshost-managermanager
这些管理端或示例目录在生产中通常应清理或限制访问。
3.3 降权启动¶
也就是:
- 不要总用
root运行 Tomcat - 尽量使用普通用户
这和 Nginx、MySQL 等服务的最佳实践是一致的。
3.4 版本与目录暴露控制¶
原笔记还提到了:
- 隐藏错误页里的版本信息
- 控制目录访问
- 回收起停脚本权限
这些动作虽然零散,但都属于“降低暴露面”的重要细节。
四、性能优化主要该关注哪些方向¶
原笔记把 Tomcat 性能优化分成了几个大方向:
- IO 模型
- 线程数
- DNS 与压缩
- JVM 参数
4.1 IO 模型¶
原笔记提到几种模型:
| 模型 | 说明 |
|---|---|
BIO |
阻塞、同步,早期版本常见 |
NIO |
非阻塞、异步,Tomcat 8 起更常见 |
APR |
更适合高并发场景 |
原笔记的建议也很实用:
- 如果没有特别需求,默认使用当前版本的默认 IO 模型即可
4.2 线程与压缩¶
虽然原笔记在这一段没有展开太多细节,但核心方向已经给出来了:
- 合理设置 Java 线程数
- 关注压缩和 DNS 相关配置
这类优化通常需要结合:
- 实际并发
- 响应时间
- CPU 与内存资源
一起调。
五、JVM 优化通常围绕什么展开¶
原笔记把 JVM 优化重点归纳到了 catalina.sh 这一类启动脚本配置中,主要包括:
- 设置 JVM 内存大小
- 配置 GC 日志
- 配置自动 dump
也就是说,JVM 优化并不只是“调大内存”,还包括:
- 让 GC 行为可观测
- 在出问题时能自动留下分析线索
对生产 Java 服务来说,这往往比单纯调一个 -Xmx 更重要。
六、为什么这些优化要和业务场景一起看¶
从原笔记的组织方式能看出,Tomcat 优化没有绝对统一答案。
比如:
- 会话共享方案取决于节点规模和架构模式
- IO 模型取决于并发特点
- 安全优化取决于暴露面和管理方式
- JVM 参数取决于应用特征和内存模型
因此更合理的理解方式是:
- 这些是方向清单
- 真正落地要结合业务现状逐项选择
七、小结¶
Tomcat 进入生产化阶段后,关注点会逐渐从“能不能跑”转向“跑得稳不稳、安全不安全、扩展方不方便”。
原笔记这部分最核心的价值在于给出了一个很实用的运维视角:
- 会话共享要考虑集群一致性
- 安全优化要减少暴露面
- 性能优化要关注 IO、线程和压缩
- JVM 优化要兼顾内存、GC 和故障留痕
把这些方向建立起来,后续做 Java Web 生产运维时会更有体系感。