本文旨在帮助你将后端服务从支撑并发 200 提升到 稳定支撑并发 1000+,涵盖架构调整、系统调优、服务优化等方面。
一、系统现状分析
通过多轮 ab
压测,当前服务表现如下:
并发数 | 平均响应时间 | 最大响应时间 | QPS | 失败率 |
---|---|---|---|---|
100 | 1.8s | 5.8s | 54 | 0% |
200 | 1.4s | 6.3s | 134 | 0% |
300 | 2.9s | 9.3s | 100 | 0% |
500 | 6.6s | 13.1s | 75 | 0% |
服务稳定(无失败),但 ❗性能临界点出现在并发300左右。
二、目标:支撑并发 1000+
三、系统级调优(Linux)
1. 文件描述符限制(连接数)
ulimit -n 65535
编辑 /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65535
2. Socket 参数优化
cat >> /etc/sysctl.d/99-tune.conf <<EOF
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.core.netdev_max_backlog = 65536
EOF
sysctl -p /etc/sysctl.d/99-tune.conf
四、架构级优化
1. 启用 Nginx 负载均衡
upstream backend {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server {
listen 443 ssl;
server_name api.hndjhj.com;
location / {
proxy_pass http://backend;
}
}
2. 启动多个服务实例
java -jar app.jar --server.port=8081
java -jar app.jar --server.port=8082
java -jar app.jar --server.port=8083
五、Spring Boot 应用层优化
1. 增大 Tomcat 线程池
server:
tomcat:
max-threads: 500
accept-count: 1000
connection-timeout: 20000
2. 开启数据库连接池优化(HikariCP)
spring:
datasource:
hikari:
maximum-pool-size: 100
minimum-idle: 20
idle-timeout: 30000
max-lifetime: 1800000
3. 避免同步阻塞操作
- 使用异步框架(如 WebClient)
- 使用消息队列异步处理
4. Redis 缓存热点数据
六、数据库优化(MySQL)
1. 提升连接上限
SHOW VARIABLES LIKE 'max_connections';
2. 加索引优化查询
3. 开启慢查询日志
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;
七、限流与熔断
推荐使用 Sentinel 或 Gateway 限流插件
八、监控与压测
推荐工具:
- Prometheus + Grafana
- wrk / locust / gatling
示例:
wrk -t12 -c1000 -d30s https://your.api/endpoint
九、总结一句话:
单机支撑 1 万并发不是靠堆配置,而是靠:异步非阻塞模型 + 系统调优 + 高效网络堆栈 + 降低IO阻塞 + 限制数据库访问 + 极致轻量框架设计