【问题标题】:Max frame length of 65536 has been exceeded已超过最大帧长度 65536
【发布时间】:2019-09-03 12:30:39
【问题描述】:

我有一个设置,我正在使用 gremlin-core 库来查询远程 Janusgraph 服务器。数据量目前适中,但未来会增加。

几天前,我在客户端上看到“已超出最大帧长度 65536”错误。我的服务器 yaml 文件中的 maxContentLength 参数的值设置为默认值 (65536)。我挖掘了代码并意识到我正在发送大量顶点 id 作为查询参数来获取顶点。我对数组应用了一个批次,每个批次有 100 个顶点 id,它解决了这个问题。

一段时间后,我开始在客户端日志中再次看到此错误。这一次,没有向服务器发送大量参数的查询。我看到了关于这个主题的建议解决方案,它说我还需要在客户端设置 maxContentLength 参数。我这样做了,问题得到了解决。但是,它提出了一些关于配置参数、它们的值以及它们对查询请求/响应大小的影响的问题。

  1. maxContentLength 参数是否与查询的响应大小有关?如果是,我该如何计算这个参数相对于我的数据库大小的值?
  2. 是否有任何其他参数规定请求中查询参数的最大大小?如果是,它们是什么?它们与查询参数的大小有什么关系?
  3. 是否有任何参数决定查询响应的大小?如果是,它们是什么?它们与查询响应的大小有什么关系?

这些问题的答案对于我打造一个不会在数据冲击下崩溃的强大服务器至关重要。

提前致谢

安雅

【问题讨论】:

    标签: janusgraph gremlin-server


    【解决方案1】:

    maxContentLength 是单个“消息”可以作为请求或响应包含的字节数。它提供与 Web 服务器中类似设置相同的功能,以允许过滤明显无效的请求。该设置与数据库大小几乎没有关系,更多的是与您发出的请求类型和结果的性质有关。对于请求,我倾向于认为在大多数情况下请求超过 65k 是不典型的。超出该大小的人通常会尝试进行批量加载或使用代码生成的脚本(后者通常是有问题的,但我不会详细介绍)。对于响应,根据查询的性质,65k 可能不够。例如查询:

    g.V().valueMap(true)
    

    会将数据库中的所有顶点作为Iterator<Map> 返回,Gremlin 服务器将通过resultIterationBatchSize 控制的批次将这些结果流回(默认为 64)。因此,如果您的数据库中有 128 个顶点,Gremlin 服务器将在后台流回两批结果。如果这两个批次的大小均低于maxContentLength,则没有问题。如果你的批次比那个大(因为你说每个顶点有 1000 个属性)那么你要么需要

    1. 限制您返回的数据 - 例如返回更少的属性
    2. 增加maxContentLength
    3. 降低resultIterationBatchSize

    另请注意,前面的查询与以下查询非常不同:

    g.V().valueMap(true).fold()
    

    因为fold() 会将所有顶点实现到内存中的一个列表中,然后该列表必须作为一个整体进行序列化。只有 1 个结果(即 List<Map> 有 128 个顶点),因此没有任何批处理,因此您更有可能在此处超过 maxContentLength 并降低 resultIterationBatchSize 甚至无济于事。您唯一的办法是增加maxContentLength 或更改查询以允许批处理以希望分解大量数据以适合maxContentLength

    maxContentLength 设置为 2mb 或更大应该没什么大不了的。如果您需要更高的请求,那么我很好奇这是什么原因。如果您需要更高的响应,那么也许我会查看我的查询,看看是否有更好的方法来限制我返回的数据,或者看看是否有更好的方法让 Gremlin Server 流式传输到为我工作。

    【讨论】:

    • 是否有profile() 的变体,其配置文件但仅汇总结果?我发现我在响应复杂遍历的配置文件步骤时遇到了这个 65k 限制。但这些正是最需要分析的。 ;-)
    • 不,没有。我认为你只需要增加限制。也许我们应该增加默认值,因为 64k 似乎比我们预期的更频繁。
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 2011-03-27
    • 2010-10-29
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多