2

我们偶尔会遇到一个问题,我们尝试启动 Jrun 服务并失败并出现以下两个错误:

错误 JRun 命名服务无法在端口 2902 上启动 java.net.BindException:另一个服务或进程正在使用的端口:2902

info 没有为此服务器配置 JDBC 数据源(请参阅 jrun-resources.xml)错误 java.net.BindException:端口正在被另一个服务或进程使用:8300

然后我们必须重新启动机器,Jrun 没有出现任何问题。这是非常间歇性的——我们重新启动 Jrun 服务可能每 10 次就会发生一次。

我在 StackOverflow 上看到了另一个参考,如果 Windows 服务需要超过 30 秒的时间来重新启动 Windows,则会关闭启动过程。也许这就是这里的问题?日志确实表明这些错误是在发出重新启动命令后大约 37 秒以上引发的。

我们在 WinServer 2008 上的 64 位平台上。

谢谢!

4

2 回答 2

3

我们在一些服务器上遇到了类似的问题。不幸的是,netstat 从未向我们表明任何形式的实际端口冲突。我怀疑这与我们最近在服务器上部署的 ColdFusion“累积修补程序”有关。我们使用 CF 8.0.1 企业版的多服务器版本,每台机器上都有大量实例——每个实例都有自己的 JVM 和自己独特的端口集。每个 CF 实例都附加到其自己的 IIS 网站并作为其自己的 Windows 服务运行。

在过去的几周内,我们开始在启动时遇到类似的“正在使用的端口”异常,在我们的 32 位机器和 64 位机器上,所有这些机器都运行 Windows Server 2003。我发现了几个可能的罪魁祸首并尝试了以下:

  1. 在每个 CF 实例的 jrun-jms.xml 中,有一个用于 RMI 传输层的条目,该条目读取<port>0</port>- 根据 JRun 文档,这意味着“选择一个随机端口”。我对每个实例(在 2600-2650 范围内)进行了非随机且不同的处理,然后重新启动了每个实例。情况暂时好转,也许是巧合。
  2. 在同一个文件中,稍后在 TCPIP 传输的条目下,每个实例都默认为<port>2522</port>-- 所以我将它们更改为每个实例在 2500-2550 范围内的不同端口并重新启动每个实例。这似乎一点帮助都没有。
  3. 我尝试研究 2500-3000 范围内的端口是否可用于任何其他目的,但我找不到任何明显的东西,此外,netstat 并没有告诉我我的任何选择都在使用中。
  4. 我在网上找到了一些关于 Windows 将 1024 到 5000 的端口指定为“动态端口”范围的内容,因此我将 10000 添加到我在 jrun-jms.xml 中设置的端口号并再次重新启动每个实例。仍然没有帮助。
  5. 我尝试更改 jndi.properties 中的端口,也将 10000 添加到端口号。不幸的是,这意味着要清除我与 IIS 的所有 wsconfig 连接并从头开始重新创建它们。我还必须编辑 wsconfig_jvm.config,添加-DWSConfig.PortScanStartPort=12900到 java.args,这样它才能检测到我的 CF 实例。(默认情况下,它只扫描端口 2900-3000。有关详细信息,请参阅bpurcell.org。这是一篇旧帖子,但仍然相关。)到目前为止一切都很好!

我最好的猜测是 Adob​​e(或 MS Windows)改变了它的一些代码抓取“随机”端口的方式。但到目前为止,我所确定的只是上述步骤似乎已经解决了这个问题。

于 2009-10-09T05:27:28.987 回答
1

您是否已验证服务实际上正在停止?任务管理器不应显示任何 jrun.exe 实例。您还可以通过打开命令窗口并运行来查看绑定到该端口的内容

netstat -a -b

这将列出所有打开的端口,以及正在使用它们的程序。你也可以使用

netstat -a -o

它与上面的功能相同,但会列出进程 ID 而不是程序名称。然后,您可以使用任务管理器交叉引用那些。您需要通过转到查看->选择列并确保选中 PID 来启用在任务管理器中显示 PID。我的猜测是 jrun 进程没有及时关闭。

于 2009-10-07T22:06:26.270 回答