【问题标题】:Why is the Neo4j java process opening ports in large blocks in random ranges?为什么 Neo4j java 进程在随机范围内大块打开端口?
【发布时间】:2019-08-18 14:15:20
【问题描述】:

似乎 Neo4j 3.4.1 (Windows) 使用的端口数超过了文档中的说明(请参阅 https://neo4j.com/docs/operations-manual/current/configuration/ports/)。除了用于连接的标准端口外,它还开放了大块端口。我们已经看到大约 20 到 250 个端口在 5000 到 35000 的任何地方在相对连续的块中打开。这些都是由同一个 Java 进程(Neo4j 服务器作为控制台应用程序运行)或 Commons Daemon Server Runner 进程(Windows 服务)打开的所有端口。这些端口似乎是配对的,每两个端口都建立在 TCP 连接中。

我无法弄清楚这些端口或用于什么或任何提到使用这些端口的文档。似乎端口的数量与数据库的大小有关。

我还查看了 Neo4j 2.3.2,它似乎也使用了一些神秘的端口,尽管在这种情况下块大小只有六个。

由于我们使用的是 APOC 库,我将其从插件目录中删除并重新启动服务器以查看是否有任何影响。这似乎不是问题。

理解进程为什么使用这些端口当然会很好;然而,根本问题是它表现得像个坏公民,占用了大量性能更好的应用程序往往存在的端口。有没有办法控制它们将在什么范围内打开?看来,如果这些端口块是必要的,那么它们应该在临时端口范围内打开,而不是压倒其他应用程序。

编辑:根据@InverseFalcon 的建议,这里是使用 Neo4j 3.5.3 的 Java 进程占用端口的示例:

    H:\>netstat -a -o | find /I "17048"
      TCP    0.0.0.0:7473           mysvr:0              LISTENING       17048
      TCP    0.0.0.0:7474           mysvr:0              LISTENING       17048
      TCP    0.0.0.0:7687           mysvr:0              LISTENING       17048
      TCP    127.0.0.1:36418        mysvr:36419          ESTABLISHED     17048
      TCP    127.0.0.1:36419        mysvr:36418          ESTABLISHED     17048
      TCP    127.0.0.1:36420        mysvr:36421          ESTABLISHED     17048
      TCP    127.0.0.1:36421        mysvr:36420          ESTABLISHED     17048
      TCP    127.0.0.1:36422        mysvr:36423          ESTABLISHED     17048
      TCP    127.0.0.1:36423        mysvr:36422          ESTABLISHED     17048
      TCP    127.0.0.1:36424        mysvr:36425          ESTABLISHED     17048
      TCP    127.0.0.1:36425        mysvr:36424          ESTABLISHED     17048
      TCP    127.0.0.1:36426        mysvr:36427          ESTABLISHED     17048
      TCP    127.0.0.1:36427        mysvr:36426          ESTABLISHED     17048
      TCP    127.0.0.1:36428        mysvr:36429          ESTABLISHED     17048
      TCP    127.0.0.1:36429        mysvr:36428          ESTABLISHED     17048
      TCP    127.0.0.1:36430        mysvr:36431          ESTABLISHED     17048
      TCP    127.0.0.1:36431        mysvr:36430          ESTABLISHED     17048
      TCP    127.0.0.1:36432        mysvr:36433          ESTABLISHED     17048
      TCP    127.0.0.1:36433        mysvr:36432          ESTABLISHED     17048
      TCP    127.0.0.1:36434        mysvr:36435          ESTABLISHED     17048
      TCP    127.0.0.1:36435        mysvr:36434          ESTABLISHED     17048
      TCP    127.0.0.1:36436        mysvr:36437          ESTABLISHED     17048
      TCP    127.0.0.1:36437        mysvr:36436          ESTABLISHED     17048
      TCP    127.0.0.1:36438        mysvr:36439          ESTABLISHED     17048
      TCP    127.0.0.1:36439        mysvr:36438          ESTABLISHED     17048
      TCP    127.0.0.1:36440        mysvr:36441          ESTABLISHED     17048
      TCP    127.0.0.1:36441        mysvr:36440          ESTABLISHED     17048
      TCP    127.0.0.1:36442        mysvr:36443          ESTABLISHED     17048
      TCP    127.0.0.1:36443        mysvr:36442          ESTABLISHED     17048
      TCP    127.0.0.1:36444        mysvr:36445          ESTABLISHED     17048
      TCP    127.0.0.1:36445        mysvr:36444          ESTABLISHED     17048
      TCP    127.0.0.1:36446        mysvr:36447          ESTABLISHED     17048
      TCP    127.0.0.1:36447        mysvr:36446          ESTABLISHED     17048
      TCP    127.0.0.1:36448        mysvr:36449          ESTABLISHED     17048
      TCP    127.0.0.1:36449        mysvr:36448          ESTABLISHED     17048
      TCP    127.0.0.1:36450        mysvr:36451          ESTABLISHED     17048
      TCP    127.0.0.1:36451        mysvr:36450          ESTABLISHED     17048
      TCP    127.0.0.1:36452        mysvr:36453          ESTABLISHED     17048
      TCP    127.0.0.1:36453        mysvr:36452          ESTABLISHED     17048
      TCP    127.0.0.1:36454        mysvr:36455          ESTABLISHED     17048
      TCP    127.0.0.1:36455        mysvr:36454          ESTABLISHED     17048
      TCP    127.0.0.1:36456        mysvr:36457          ESTABLISHED     17048
      TCP    127.0.0.1:36457        mysvr:36456          ESTABLISHED     17048
      TCP    127.0.0.1:36458        mysvr:36459          ESTABLISHED     17048
      TCP    127.0.0.1:36459        mysvr:36458          ESTABLISHED     17048
      TCP    127.0.0.1:36460        mysvr:36461          ESTABLISHED     17048
      TCP    127.0.0.1:36461        mysvr:36460          ESTABLISHED     17048
      TCP    127.0.0.1:36462        mysvr:36463          ESTABLISHED     17048
      TCP    127.0.0.1:36463        mysvr:36462          ESTABLISHED     17048
      TCP    127.0.0.1:36464        mysvr:36465          ESTABLISHED     17048
      TCP    127.0.0.1:36465        mysvr:36464          ESTABLISHED     17048
      TCP    127.0.0.1:36466        mysvr:36467          ESTABLISHED     17048
      TCP    127.0.0.1:36467        mysvr:36466          ESTABLISHED     17048
      TCP    127.0.0.1:36468        mysvr:36469          ESTABLISHED     17048
      TCP    127.0.0.1:36469        mysvr:36468          ESTABLISHED     17048
      TCP    127.0.0.1:36470        mysvr:36471          ESTABLISHED     17048
      TCP    127.0.0.1:36471        mysvr:36470          ESTABLISHED     17048
      TCP    127.0.0.1:36472        mysvr:36473          ESTABLISHED     17048
      TCP    127.0.0.1:36473        mysvr:36472          ESTABLISHED     17048
      TCP    127.0.0.1:36474        mysvr:36475          ESTABLISHED     17048
      TCP    127.0.0.1:36475        mysvr:36474          ESTABLISHED     17048
      TCP    127.0.0.1:36476        mysvr:36477          ESTABLISHED     17048
      TCP    127.0.0.1:36477        mysvr:36476          ESTABLISHED     17048
      TCP    127.0.0.1:36478        mysvr:36479          ESTABLISHED     17048
      TCP    127.0.0.1:36479        mysvr:36478          ESTABLISHED     17048
      TCP    [::]:7473              mysvr:0              LISTENING       17048
      TCP    [::]:7474              mysvr:0              LISTENING       17048
      TCP    [::]:7687              mysvr:0              LISTENING       17048
      TCP    [::1]:7687             mysvr:36483          ESTABLISHED     17048
      TCP    [::1]:7687             mysvr:36484          ESTABLISHED     17048
      TCP    [::1]:7687             mysvr:36485          ESTABLISHED     17048
      TCP    [::1]:7687             mysvr:36486          ESTABLISHED     17048
      TCP    [::1]:7687             mysvr:36487          ESTABLISHED     17048

如果bolt被关闭,块会变小:

H:\>netstat -a -o | find /I "20520"
  TCP    0.0.0.0:7473           mysvr:0              LISTENING       20520
  TCP    0.0.0.0:7474           mysvr:0              LISTENING       20520
  TCP    127.0.0.1:36902        mysvr:36903          ESTABLISHED     20520
  TCP    127.0.0.1:36903        mysvr:36902          ESTABLISHED     20520
  TCP    127.0.0.1:36904        mysvr:36905          ESTABLISHED     20520
  TCP    127.0.0.1:36905        mysvr:36904          ESTABLISHED     20520
  TCP    127.0.0.1:36906        mysvr:36907          ESTABLISHED     20520
  TCP    127.0.0.1:36907        mysvr:36906          ESTABLISHED     20520
  TCP    127.0.0.1:36908        mysvr:36909          ESTABLISHED     20520
  TCP    127.0.0.1:36909        mysvr:36908          ESTABLISHED     20520
  TCP    127.0.0.1:36910        mysvr:36911          ESTABLISHED     20520
  TCP    127.0.0.1:36911        mysvr:36910          ESTABLISHED     20520
  TCP    127.0.0.1:36912        mysvr:36913          ESTABLISHED     20520
  TCP    127.0.0.1:36913        mysvr:36912          ESTABLISHED     20520
  TCP    [::]:7473              mysvr:0              LISTENING       20520
  TCP    [::]:7474              mysvr:0              LISTENING       20520

而且如果关闭了https,就更小了:

    H:\>netstat -a -o | find /I "20556"
      TCP    0.0.0.0:7474           mysvr:0              LISTENING       20556
      TCP    127.0.0.1:36962        mysvr:36963          ESTABLISHED     20556
      TCP    127.0.0.1:36963        mysvr:36962          ESTABLISHED     20556
      TCP    127.0.0.1:36964        mysvr:36965          ESTABLISHED     20556
      TCP    127.0.0.1:36965        mysvr:36964          ESTABLISHED     20556
      TCP    127.0.0.1:36966        mysvr:36967          ESTABLISHED     20556
      TCP    127.0.0.1:36967        mysvr:36966          ESTABLISHED     20556
      TCP    [::]:7474              mysvr:0              LISTENING       20556

【问题讨论】:

  • 我会看看我们对此的了解,但您也可以使用较新的版本进行测试吗? 3.4.12 是 3.4.x 系列中的最新版本,3.5.3 是我们 3.5.x 系列中的最新版本。
  • 这也是 Neo4j 桌面,还是从服务器 zip/tar 安装?
  • 我尝试重新下载 neo4j 3.4.12 和 3.5.3。他们都做同样的事情(除了记录的内容之外打开端口块)。我们使用 Windows zip 安装。
  • 不管这里发生了什么,我认为这不是 Neo4j。正在侦听的端口 747374747687 是 Neo 应该打开的预期端口。我们不认识任何其他人。你所拥有的表明连接已经建立,但没有任何东西在听。其他东西正在这样做,或者其他一些程序,或者一些病毒或防病毒操作。
  • 从头开始,我们可能已经能够重现类似的东西。我们会派工程师来调查发生了什么。

标签: java tcp neo4j port


【解决方案1】:

所以这可能是 Windows 不支持套接字对的结果,因此管道被实现为环回连接。虽然这起源于 Windows XP,但它似乎已经在 Windows 系统中继续存在。看起来所使用的端口号也已更改或至少不受限制。

这是在older Java bug的末尾捕获的:

Windows 不支持套接字对,因此 Pipe 在该平台上实现为环回连接。该连接的“客户端”端没有显式绑定,因此它分配了一个 1024-5000 范围内的临时端口。

java.io.OutputStream 用法将以这种方式实现为环回。

我会做一些跟进,看看我们是否能得到更多信息。

【讨论】:

  • 鉴于这种情况,我建议应该更新 Neo4j 文档以注意这些端口在 Windows 部署上是打开的。从@InverseFalcon 提供的描述问题的链接中,我们能够诊断出我们正在使用的服务器上的动态端口范围是完全开放的,并使用以下命令将其更改为 Windows 的默认临时端口范围:netsh int ipv4 set dynamicport tcp start=49152 num=16384
猜你喜欢
  • 1970-01-01
  • 2019-02-07
  • 2022-11-10
  • 2014-05-08
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多