在 Linux 服务器上部署 Spring Cloud 项目时,除了常规的应用打包和启动脚本配置外,还需重点关注以下系统层面的配置,以确保服务稳定、可观测且具备高可用性:
1. 文件描述符限制(ulimit)
Spring Cloud 微服务常涉及大量网络连接(如 Feign、Ribbon、Eureka/Nacos 客户端心跳等),默认 ulimit -n(通常 1024)可能不足。
✅ 建议配置:
# 临时生效(当前会话)
ulimit -n 65535
# 永久生效(修改 /etc/security/limits.conf)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "root soft nofile 65535" >> /etc/security/limits.conf
echo "root hard nofile 65535" >> /etc/security/limits.conf
⚠️ 需重启 SSH 会话或服务器后生效;若使用 systemd 管理进程,还需在
.service文件中设置LimitNOFILE=65535。
2. 内存与 JVM 参数调优
根据服务器资源合理设置堆大小、GC 策略及元空间。
✅ 推荐示例(以 8GB 内存机器为例):
JAVA_OPTS="-Xms4g -Xmx4g
-Xss256k
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/logs/gc_dump.hprof
-Djava.security.egd=file:/dev/./urandom"
- 避免
-Xmx超过物理内存的 70%~80%,预留 OS 和其他进程空间。 - 生产环境建议开启 G1GC 并监控 GC 日志(通过
jstat或 Prometheus + JMX Exporter)。
3. 网络配置
a) TCP/IP 参数优化
提升并发连接处理能力:
# /etc/sysctl.conf 中添加
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
应用后执行:
sysctl -p
b) 防火墙与安全组
- 仅开放必要端口(如 8080、9090 等),禁止
0.0.0.0/0全开。 - 推荐使用
iptables/firewalld或云厂商安全组规则精细控制。 - 内网通信建议启用私有子网隔离。
4. 时间同步(NTP)
微服务依赖分布式协调(如 Nacos、ZooKeeper、Seata),时间不一致会导致注册失败、事务异常。
✅ 配置 Chrony(推荐)或 NTP:
sudo yum install chrony # CentOS/RHEL
sudo systemctl enable --now chronyd
# 检查同步状态
chronyc sources -v
5. 日志与监控集成准备
- 确保
/var/log分区有足够空间(建议独立挂载)。 - 配置日志轮转(
logrotate),避免单文件过大。 - 安装基础监控工具:
htop,iostat,vmstat- Prometheus Node Exporter + Grafana
- ELK/EFK 或 Loki+Promtail(集中式日志)
6. Docker/Kubernetes 环境补充(如适用)
若采用容器化部署:
- 设置合理的
memory_limit和cpu_quota。 - 使用
--add-host或 Service Mesh 解决 DNS 解析问题。 - 健康检查探针(liveness/readiness)需覆盖核心组件(如数据库连接、注册中心连通性)。
7. 安全加固
- 禁用 root 登录,改用 sudo + 专用用户运行应用。
- 关闭不必要的服务(如 FTP、Telnet)。
- 定期更新系统与 JDK(建议使用 OpenJDK 17/21 LTS)。
- 敏感配置(密码、密钥)通过 Vault、Nacos Config 加密或环境变量注入,严禁硬编码。
✅ 验证清单(部署前自查)
| 项目 | 命令/检查点 |
|---|---|
| 文件描述符 | ulimit -n ≥ 65535 |
| 内存分配 | free -h 确认可用内存充足 |
| 时间同步 | chronyc sources 显示 *= 同步正常 |
| 网络参数 | sysctl net.core.somaxconn ≥ 65535 |
| 防火墙 | systemctl status firewalld + firewall-cmd --list-all |
| 日志目录权限 | ls -ld /data/logs 属主为应用用户 |
如您能提供具体技术栈(如:是否用 Nacos/Eureka?是否容器化?集群规模?),我可进一步给出定制化配置建议。
PHPWP博客