【问题标题】:High CPU usage during reads from table storage从表存储读取期间 CPU 使用率高
【发布时间】:2013-12-22 11:06:24
【问题描述】:

先决条件:

Azure 存储 3.0.0
VM 大小:小(1 核)
表:1 个分区 - 2k 行,10 列

故事:

一段时间以来,我一直在观察我的一个角色的高 CPU 使用率,然后我决定稍微挖掘一下。在分析器的帮助下,我发现了热门路径。

一旦我意识到不是我的代码产生了这样的负载,我就删除了所有内容,只从表本身中读取。我也删除了自定义实体解析器。阅读代码就像在Microsoft's how-to中一样。

不幸的是,我只发现了一种类似的情况,那里的答案什么也没给我: similar situation here

问题:

有什么想法吗?

【问题讨论】:

  • 你能发布你代码的相关sn-ps吗?你是如何读取存储的?您是否将任何 ServicePointManager 属性(如 UseNagleAlgorithm 和 Expect100Continue)设置为 false 并更改默认连接限制?
  • @Igorek 当然,UseNagleAlgorithm 和 Expect100Continue 设置为 false。 DefaultConnection 限制在这里不会有问题。根据热路径截图,它在 EndGetResponse 之后立即消耗 cpu。序列化?
  • 序列化很可能是罪魁祸首......数据是否可能是使用自定义实体解析器保存的,而现在引擎很难仅处理该特定数据的反序列化?跨度>
  • @Igorek 最初这些实体是使用自定义解析器保存的。在我提到的问题中,我将其关闭。所以我们可以说现在这个实体中有 10 个字段,在我的测试期间只有一个被映射回实体。话虽如此,我认为这里的主要问题在于 ODataReaderCore.InterceptException 方法。可以吗?

标签: performance azure cpu-usage azure-table-storage


【解决方案1】:

我在为 Azure 存储开发客户端库的团队中。我们将对此进行调查,看看我们是否可以在我们这边重现它。话虽如此,如果您使用 3.0 和 POCO 类型,则可以通过在 CloudTableClient 上设置 PayloadFormat 或通过 TableRequestOptions 传递它来切换到 JSON nometadata(例如,请参阅here)。这不仅会减少负载,还会使用 Newtonsoft JSON 反序列化器而不是 Odata。看看这个配置下能不能重现高cpu就好了。

此外,您能否提供有关您的场景的更多信息,即每秒查询数等。最好在调试器下运行它以查看是否有异常被 odata 在内部抛出和吸收。

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多