一、调整JVM网络参数(最常用)
JVM网络参数直接控制Java应用程序的网络行为,需在启动命令中通过-D参数设置。常见配置包括:
-Dsun.net.inetaddr.ttl=60(DNS缓存有效期,单位:秒)、-Dsun.net.inetaddr.negative.ttl=10(负DNS缓存时间,避免频繁查询失败域名);-Djava.net.preferIPv4Stack=true(优先使用IPv4)、-Djava.net.preferIPv6Addresses=false(禁用IPv6);-Dhttp.proxyHost=proxy.example.com(代理主机)、-Dhttp.proxyPort=8080(代理端口)、-Dhttp.nonProxyHosts="localhost|127.0.0.1|*.example.com"(无需代理的地址);-Dsun.net.client.defaultConnectTimeout=5000(连接超时,毫秒)、-Dsun.net.client.defaultReadTimeout=5000(读取超时)、-Djava.net.socket.buffer.size=131072(Socket缓冲区大小,字节)。java -Dsun.net.inetaddr.ttl=60 -Djava.net.preferIPv4Stack=true -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -jar myapp.jar
如需持久化配置,可将参数写入启动脚本(如start.sh)或通过export JAVA_OPTS="..."设置环境变量。
二、配置系统级TCP/IP参数
通过修改/etc/sysctl.conf调整内核网络参数,优化TCP性能(如连接池、缓冲区等)。常见参数:
net.ipv4.ip_local_port_range = 1024 65535(扩大本地端口可用范围);net.core.rmem_max = 16777216(接收缓冲区最大值)、net.core.wmem_max = 16777216(发送缓冲区最大值)、net.ipv4.tcp_rmem = 4096 87380 16777216(TCP接收缓冲区分段)、net.ipv4.tcp_wmem = 4096 65536 16777216(TCP发送缓冲区分段);net.ipv4.tcp_tw_reuse = 1(允许复用TIME-WAIT状态的连接)、net.ipv4.tcp_fin_timeout = 30(TIME-WAIT状态超时,秒)。sysctl -p使配置生效。三、配置防火墙规则
CentOS默认使用firewalld管理防火墙,需开放Java应用所需端口(如8080、443):
firewall-cmd --permanent --zone=public --add-port=8080/tcp(永久添加端口);firewall-cmd --permanent --zone=trusted --add-interface=lo(允许本地回环流量);firewall-cmd --reload(使配置生效)。systemctl stop firewalld(生产环境不建议)。四、配置SELinux(可选)
若系统启用SELinux,需允许Java应用访问网络端口(如8080):
semanage port -a -t http_port_t -p tcp 8080(将8080端口加入http_port_t类型);semanage port -l | grep http_port_t(查看已允许的端口)。semanage,可通过yum install policycoreutils-python-utils安装。五、配置网络接口(静态IP/ DNS)
若需为Java应用指定固定IP或DNS,可通过以下命令或文件配置:
ip addr add 192.168.1.100/24 dev eth0 # 添加IP
ip link set eth0 up # 启动接口
ip route add default via 192.168.1.1 # 设置默认网关
echo "nameserver 8.8.8.8" > /etc/resolv.conf # 配置DNS
/etc/sysconfig/network-scripts/ifcfg-eth0(接口名以实际为准),添加:DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
保存后重启网络服务:systemctl restart network。六、调试网络问题
使用以下工具排查Java网络问题:
netstat -tuln(显示所有监听端口)、ss -s(查看套接字统计信息);tcpdump -i eth0 port 8080(捕获指定端口的流量);curl -v http://example.com:8080(验证HTTP请求是否通)。