Java 网络延迟优化是一个系统性问题,需要从网络层、系统层、JVM 层、代码层、架构层多个维度入手。下面按实战优先级给你一个完整优化思路。
在优化前,一定要先定位瓶颈:
| 场景 | 工具 |
|---|---|
| 网络 | ping、traceroute、tcpdump |
| Java | jstack、jstat、arthas |
| 接口 | zipkin、skywalking |
| 系统 | netstat、ss、dmesg |
核心原则:能一次就别两次
✅ 示例:
// 不推荐
for (id : ids) requestUser(id);
// 推荐
requestUsers(ids);
避免频繁建立 TCP 连接
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(50);
避免 TCP 三次握手
| 协议 | 说明 |
|---|---|
| HTTP/2 | 多路复用 |
| gRPC | 基于 HTTP/2 |
| WebSocket | 双向通信 |
| QUIC | 低延迟(HTTP/3) |
✅ 高频调用场景:
避免阻塞 IO
| 模型 | 场景 |
|---|---|
| BIO | 低并发 |
| NIO | 高并发 |
| Netty | 高性能网络 |
✅ Netty 示例:
EventLoopGroup group = new NioEventLoopGroup();
Thread.sleepsynchronized 大块代码✅ CompletableFuture:
CompletableFuture.supplyAsync(() -> callRemote())
.thenAccept(this::handle);
| 序列化 | 性能 |
|---|---|
| Java 原生 | ❌ 慢 |
| JSON | ⚠️ 一般 |
| Protobuf | ✅ 快 |
| Kryo | ✅ 快 |
| Hessian | ⚠️ |
✅ 推荐:
重点:减少 Full GC
-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
或:
-XX:+UseZGC # JDK 11+
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 4096
✅ 90% 的延迟问题,缓存能解决
原因:
优化:
原因:
优化:
✅ 第一优先级
✅ 第二优先级 4. NIO / Netty 5. 序列化优化 6. GC 优化
✅ 第三优先级 7. TCP / OS 参数 8. 架构调整
你可以直接贴:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。