PerMon Server Agent仅监听tcp6?IPv4连接失败技术咨询
PerMon Server Agent仅监听tcp6的原因分析及解决办法
这是个在IPv6启用环境里很常见的Java程序监听问题,我来帮你拆解原因和对应的解决办法:
原因分析
- JVM默认监听优先级:Java程序在同时支持IPv4和IPv6的系统上,默认会优先创建IPv6套接字进行监听。虽然理论上IPv6套接字应该兼容IPv4连接(通过IPv4映射的IPv6地址),但部分系统的网络配置、防火墙规则或者内核参数可能导致这种兼容性失效,最终只能通过纯IPv6地址访问。
- Agent启动未指定IP版本:JP@GC Agent(也就是你用的PerMon Server Agent)的默认启动脚本没有显式指定绑定到IPv4地址,所以JVM按照默认逻辑选择了IPv6监听模式。
解决办法
临时生效:修改启动脚本
直接修改startAgent.sh中的Java启动命令,添加强制优先IPv4的JVM参数:
找到脚本里的java启动行,添加-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false参数,修改后的命令示例:
java -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false -jar ./CMDRunner.jar --tool PerfMonAgent
修改完成后重启Agent,然后用ss -tulpn | grep 4444检查,会看到监听地址变成0.0.0.0:4444(IPv4),而不是:::4444(IPv6)。
永久生效:全局JVM配置
如果不想每次修改启动脚本,可以把参数加到系统级的JVM环境变量里:
- 编辑
/etc/profile或者用户目录下的~/.bashrc文件,添加以下内容:
export JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false"
- 执行
source /etc/profile(系统级)或者source ~/.bashrc(用户级)让配置立即生效,之后启动Agent就会自动应用IPv4优先的规则。
备选方案:临时禁用IPv6(谨慎使用)
如果你的服务器不需要IPv6支持,可以临时禁用它来强制Agent监听IPv4:
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1
⚠️ 注意:这个操作是系统级的,会影响所有依赖IPv6的服务,除非确定不需要IPv6,否则不推荐使用。
验证步骤
- 重启PerMon Server Agent后,查看日志确认绑定到IPv4的4444端口;
- 从其他服务器执行
telnet 192.168.1.31 4444,应该能正常建立连接。
内容的提问来源于stack exchange,提问作者Walker Yang
相关产品推荐
相关产品推荐

