hubble.net服务无法启动报错“System.Exception: Hasn't instance name:Default in registry”的解决方法

本文解决在安装Hubble.NET时遇到的问题,包括无法卸载、手工卸载后无法重新安装以及服务启动失败的情况。通过查找并复制注册表中的邮箱注册码,成功解决了问题。

hubble.net是asp.net下的一款开源全文检索框架,但安装之后,无法卸载,强行手工卸载之后,又无法安装。将其它机器上的hubble.net安装文件拷贝过来,手工安装hubble.net服务之后,启动服务之后又自动停止,查看windows系统日志,提示:

无法启动服务。System.Exception: Hasn't instance name:Default in registry
  在 HubbleService.TaskInformation.GetInstanceDir(String instanceName)
  在 HubbleService.HubbleSvr.OnStart(String[] args)
  在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

据此分析,hubble.net使用是需要用邮箱注册的,可能是注册表中德邮箱与注册码被删除了的原因。赶紧到另外一台机器上找到对应的注册表项目,导出为reg文件,拷贝到故障机器上导入注册表,故障解决!

注册文件如下:

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\Hubble.net]
"Key"="5F-AC-71-D8-DF-D1-93-BA-E1-88-9D-F3-53-29-9B-7A-FA-4B-E0-87-26-39-42-29-D4-24-A4-31-38-10-39-CC-CD-0C-1B-F0-E4-76-CA-46-BC-92-88-73-FD-78-4A-16-B8-51-FE-5E-28-42-9F-C1-B4-3F-65-9B-61-B2-3E-1C-A5-CD-50-B3-B3-10-80-98-CD-CF-04-8D-99-84-F9-B3-35-60-90-8C-C3-04-1C-F2-F5-23-5C-2A-A2-6C-FE-BC-6F-47-C7-7E-6C-11-6A-B8-67-F5-14-CC-9F-36-CB-54-44-F5-E5-0C-FF-23-6B-A9-B6-D8-3D-A9-CE-53-3A-7A"
"Email"="thisIsYourEmail@gmail.com"


[HKEY_LOCAL_MACHINE\SOFTWARE\Hubble.net\Instances]
"DefaultStartTime"="2012-02-23 19:57:55"
"DefaultPort"=dword:00001d63
"Default"="C:\\Program Files\\HubbleDotNet\\Default"

错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 10000; nested exception is: java.net.BindException: Address already in use: JVM_Bind sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 10000; nested exception is: java.net.BindException: Address already in use: JVM_Bind at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:480) at sun.management.Agent.startAgent(Agent.java:262) at sun.management.Agent.startAgent(Agent.java:452) Caused by: java.rmi.server.ExportException: Port already in use: 10000; nested exception is: java.net.BindException: Address already in use: JVM_Bind at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346) at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254) at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411) at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147) at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:236) at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:213) at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:173) at sun.management.jmxremote.SingleEntryRegistry.<init>(SingleEntryRegistry.java:49) at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:816) at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:468) ... 2 more Caused by: java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method)这个错误是不是端口号被占用了
最新发布
12-10
是的,**这个错误明确表示:端口号 `10000` 已被占用(Port already in use)**。 --- ## ✅ 错误核心信息解读 ```bash java.rmi.server.ExportException: Port already in use: 10000; nested exception is: java.net.BindException: Address already in use: JVM_Bind ``` ### 🔍 拆解含义: - `Port already in use: 10000` → 程序试图绑定到 **TCP 端口 10000**,但该端口已经被其他进程占用了。 - `java.net.BindException: Address already in use: JVM_Bind` → 这是底层网络异常,说明 JVM 无法在指定地址和端口上启动服务。 - 出现在 `sun.management.jmxremote.*` 包中 → 表明这是 **JMX(Java Management Extensions)远程监控服务** 启动失败导致的! --- ## 📌 背景知识:JMX Remote 是什么? 当你启动 Java 应用时,如果配置了以下 JVM 参数之一: ```bash -Dcom.sun.management.jmxremote.port=10000 ``` 或类似参数(如通过 Spring Boot Actuator、VisualVM、JConsole 监控等),JVM 会尝试开启一个 RMI 服务用于远程监控(内存、线程、GC 等)。 > 默认情况下,JMX 使用两个端口: > - 一个固定端口(你设置的 `10000`) > - 一个随机端口(用于 RMI 数据通信) 如果你没有关闭之前的 Java 进程,再次启动就会报 **端口冲突**。 --- ## ✅ 解决方案 ### ✅ 方法一:终止占用端口的进程(推荐) #### 步骤 1:查找哪个进程占用了 `10000` 端口 ##### 在 Windows 上: ```cmd netstat -ano | findstr :10000 ``` 输出示例: ``` TCP 0.0.0.0:10000 0.0.0.0:0 LISTENING 12345 ``` 记下 PID `12345`,然后查看任务管理器或执行: ```cmd taskkill /PID 12345 /F ``` ##### 在 Linux/macOS 上: ```bash lsof -i :10000 # 或 netstat -tulnp | grep :10000 ``` 输出示例: ``` java 1234 user 10u IPv6 12345678 0t0 TCP *:10000 (LISTEN) ``` 杀死进程: ```bash kill -9 1234 ``` --- ### ✅ 方法二:更换 JMX 端口 修改你的启动脚本或 IDE 配置中的 JVM 参数,把 `10000` 改成别的,比如 `10001`: ```bash -Dcom.sun.management.jmxremote.port=10001 ``` ✅ 推荐做法:使用动态端口避免冲突。 --- ### ✅ 方法三:禁用 JMX 远程(开发调试可用) 如果你不需要远程监控(例如本地测试),可以直接移除以下所有 JVM 参数: ```bash # 删除这些参数 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.host=localhost ``` ⚠️ 注意:生产环境不建议完全关闭 JMX,因为会影响监控。 --- ### ✅ 方法四:程序化解决(Spring Boot 示例) 如果你用的是 Spring Boot,并希望通过配置避免硬编码端口,可以: ```yaml # application.yml management: server: port: 8081 # 管理端口(actuator)单独设置 endpoints: web: exposure: include: "*" ``` 并避免手动设置 `-Dcom.sun.management.jmxremote.port=10000`,改用更现代的方式(如 Micrometer + Prometheus)进行监控。 --- ## ✅ 如何预防这个问题? | 建议 | 说明 | |------|------| | ❌ 不要总是用固定端口(如 10000)做 JMX | 容易冲突 | | ✅ 使用随机端口 | 如 `-Dcom.sun.management.jmxremote.port=0`(让系统自动分配) | | ✅ 启动前写个脚本检查端口是否被占用 | 自动化处理 | | ✅ 开发完成后及时关闭旧进程 | 特别是在 IDEA/Eclipse 中多次运行 main 方法 | --- ## ✅ 总结 > ❗ 是的,`Address already in use: JVM_Bind` 就是因为 **端口 10000 被占用了**! 🔧 **解决方案优先级:** 1. **杀掉占用 `10000` 端口的进程** 2. 或者换一个新端口(如 `10001`) 3. 或者干脆不用 JMX 远程(仅限开发) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值