Java 网络性能调优涉及 JVM 参数、网络 I/O 模型、连接管理、系统参数、代码实现 等多个层面。下面按由浅入深、可落地的方式给你一个系统性的调优指南。
调优前一定要先定位瓶颈:
常用工具:
top / vmstat / iostatjstack / jmap / jstatnetstat -anp | grep javaarthastcpdump / wireshark高并发网络服务推荐:
示例(G1):
-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
-Xms4g -Xmx4g
避免:
网络服务常见问题:
优化:
ThreadLocal 缓冲区(注意回收)❌ 不适合高并发
每个连接一个线程,线程成本极高
SelectorSocketChannelByteBuffer适合:
示例:
Selector selector = Selector.open();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
Netty 是 Java 网络性能调优的事实标准:
✅ 优点:
调优点(Netty):
EventLoopGroup boss = new NioEventLoopGroup(1);
EventLoopGroup worker = new NioEventLoopGroup();
建议:
# 最大文件描述符
ulimit -n 1000000
# TCP 参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
socket.setTcpNoDelay(true); // 关闭 Nagle
socket.setSendBufferSize(64 * 1024);
socket.setReceiveBufferSize(64 * 1024);
socket.setSoTimeout(...);
Netty I/O 线程 不要做耗时操作
EventLoopGroup businessGroup = new DefaultEventExecutorGroup(16);
MaxTotal=200
MaxPerRoute=50
| 方式 | 性能 |
|---|---|
| JSON | 慢 |
| Protobuf | 快 |
| MessagePack | 快 |
| 自定义二进制 | 最快 |
建议:
❌ 在 I/O 线程做:
❌ 频繁:
System.gc()synchronized 热点锁✅ 正确做法:
maxThreads=200
acceptCount=1000
connectionTimeout=20000
Java 网络性能调优 = 正确的 I/O 模型 + 合理的线程模型 + TCP/系统参数 + 减少 GC 和拷贝
如果你愿意,可以告诉我:
我可以直接给你针对性调优方案 + 参数模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。