在 Java 中进行 HTTP 性能优化,通常可以从 客户端(如 HttpClient)、服务端(如 Web 容器 / 框架)、网络与协议、系统架构 四个层面来考虑。下面系统地讲一下。
避免 HttpURLConnection(老、慢、功能弱),优先选择:
java.net.http.HttpClient(异步、支持 HTTP/2)示例(Java 11 HttpClient):
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(3))
.build();
复用 TCP 连接,避免频繁三次握手。
Apache HttpClient 示例:
PoolingHttpClientConnectionManager cm =
new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(50);
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.build();
OkHttp 默认就有连接池。
适合:
避免线程被长时间占用:
.connectTimeout(1s)
.readTimeout(2s)
CompletableFutureSpring Boot 可切换:
server:
undertow:
threads:
io: 16
worker: 200
Callable / WebFlux / Reactor)示例(Spring WebFlux):
public Mono<String> api() {
return Mono.fromCallable(() -> slowService());
}
server:
compression:
enabled: true
min-response-size: 1024
Cache-Control)| 瓶颈 | 原因 | 解决 |
|---|---|---|
| 线程耗尽 | 同步阻塞 | 异步 / 线程池 |
| CPU 高 | 序列化 / 加密 | 换库 / 缓存 |
| RT 高 | 网络 / DB | 缓存 / 就近 |
| 连接数爆炸 | 无连接池 | 连接池 |
Java HTTP 性能优化 = 连接复用 + 异步化 + 协议升级 + 减少阻塞 + 架构解耦
如果你愿意,可以告诉我:
我可以给你针对性的优化方案和示例配置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。