Java 运维
内容:部署、监控、日志、排错、性能、JVM、容器化、CI/CD、运维工具等。
✅ 推荐部署方式
优先顺序(从强到弱):
- 容器化 + Kubernetes(最佳)
- systemd 方式部署 JAR
- Supervisor
- 直接 nohup 后台跑(不推荐生产)
示例:systemd 运行 Java 程序
[Unit]
Description=My Java App
After=network.target
[Service]
User=www
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms512m -Xmx512m -jar myapp.jar --spring.profiles.active=prod
SuccessExitStatus=143
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
JAVA_OPTS="
-Xms1024m
-Xmx1024m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/logs/heapdump.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/opt/logs/gc.log
"
-
容器环境:
Xms = Xmx = container_limit * 80% `` -
物理机:按内存 50%-70%
| 工具 | 用途 |
|---|---|
| jps | 查看 Java 进程 |
| jstat | GC、类加载统计 |
| jstack | 线程栈、死锁分析 |
| jmap | dump 内存、heap 查看 |
| jcmd | 万能工具,可以替代大部分命令 |
| prometheus+jmx-exporter | 最强 Java 监控 |
示例:查看 GC:
jstat -gc <pid> 1s 10
查看线程死锁:
jstack <pid>
导出 Heap dump:
jmap -dump:format=b,file=heap.hprof <pid>
生产建议采用:
- logback
- 日志按天滚动
- 错误日志单独文件
- JSON 日志(方便 ELK)
示例 logback:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/logs/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
top # 找到 java 进程 PID
top -Hp <pid> # 找到占 CPU 的线程
printf "%x\n" <线程ID> # 转换为十六进制
jstack <pid> | grep -A30 <0x线程ID>
jmap -dump:format=b,file=heap.hprof <pid>
然后使用 MAT 或 VisualVM 分析。
查看 GC 日志:
tail -f gc.log
结合:
jstat -gcutil <pid> 1s
- G1GC(JDK 11+ 默认)
- 响应快、停顿低、维护简单
- 避免日志量过大
- 线程池设置合理
- 限流 / 熔断(Sentinel / Resilience4j)
- 数据库连接池正确配置(HikariCP)
示例 Hikari:
maximumPoolSize = CPU * 2 + 1
connectionTimeout = 30000
idleTimeout = 600000
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY myapp.jar .
ENV JAVA_OPTS="-Xms512m -Xmx512m -XX:+UseG1GC"
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar myapp.jar"]
- 设置 livenessProbe / readinessProbe
- 设置 资源限制
- 设置 滚动升级
- 设置 日志 stdout:由容器平台收集
示例:
resources:
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "1024Mi"
cpu: "1"
| 工具 | 用途 |
|---|---|
| jvisualvm | 本地监控 |
| arthas | 阿里开源神器,定位线上问题最强 |
| MAT | 分析 heap dump |
| jmc (Java Mission Control) | 事件驱动监控(JDK17+) |
| Btrace | 热修改、注入跟踪 |
Arthas 启动:
java -jar arthas-boot.jar
- 监控 GC、CPU、RAM、线程
- 定期 rotate 日志
- 定期 dump 一次线程栈
- 容器设置合理 JVM 参数
- 服务自启动 systemd/Supervisor/k8s
- 数据库连接池稳定
- 限流、防雪崩
- 观察健康检查是否成功