【问题标题】:View metrics or more insights on HTTP::Server查看有关 HTTP::Server 的指标或更多见解
【发布时间】:2020-08-03 15:54:01
【问题描述】:

我们正在 Crystal/Kemal 上运行一个生产系统。调用服务经常看到连接被拒绝错误。我想知道如何才能在 HTTP::Server/Kemal 的运行实例中看到更多见解/指标。我指的是运行/等待的光纤数量(超出允许的最大数量),连接的积压有多大,有多少被拒绝等等。

【问题讨论】:

  • 您使用的是 SSL 服务器吗?

标签: crystal-lang kemal


【解决方案1】:

内置工具:crystal tool -h

    context                  show context for given location
    expand                   show macro expansion for given location
    format                   format project, directories and/or files
    hierarchy                show type hierarchy
    implementations          show implementations for given call in location
    types                    show type of main variables

常用工具:

  1. lsof +p $(pidof <process_name>) — 显示进程的连接/套接字。
  2. ss -ier — 显示内部套接字统计信息。
  3. strace -p $(pidof <process_name>) -s 300 -yyfq — 流程自省的有用工具。
  4. tcpdump & wireshark — 转储和探索网络数据包
  5. ngrep — 类似于 grep,但用于网络数据包。
  6. LLDB — 基于 LLVM 的应用程序的本机调试器 (tutorial)
  7. CodeLLDB — 基于 LLDB 的原生 VSCode 调试器。

别忘了crystal build ./app.cr --debug

【讨论】:

  • 谢谢!这些大多是“通用”工具,非常有价值!但我一直在寻找更具体的东西,例如,类似于 Puma 为 Ruby 提供的指标。
  • 您能否提供所需指标的列表?但是......我可能是错的,但我认为你只是不知道如何以及在哪里找到问题并希望看到任何异常。您能否提供有关导致连接拒绝的步骤的更多详细信息?如果你能显示出来源——那就完美了。
  • 我唯一要添加的是分析(这里的第一部分:crystal-lang.org/reference/guides/performance.html),以防它受 CPU 限制...您可以查看特定端口的积压,例如:quora.com/…
  • 我有超过 4 年的时间,大约有 2-5 个服务(http + tcp 和消息包)在负载(70-150 rps)和其他一些服务于数据处理、抓取和主机之间的通信。我记得我从未使用过通用指标,因为我的负载配置文件不同。起初我尝试解决卡住套接字和 close_wait (strace, lsof/ss) 的问题,然后尝试在数据中随机找到空字节 (wireshark),然后尝试提高整体效率以降低成本(主要逻辑用纤维重写)。但我也有具有通用指标和流行宝石的 Rails 应用程序。
  • 从我的角度来看,调试 Crystal 应用程序几乎总是需要了解环境状态,但对于 Ruby,如果 CPU、内存和硬盘空间足够,则不需要。也许这就是为什么我不能推荐使用分片来收集指标的原因。也就是说,我想说Ruby它本身就是一个东西,但Crystal是系统的本机元素,可以用系统工具检查。无论如何,如果您有时间,请稍后告诉我们您是如何解决问题的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2021-11-15
  • 2022-10-23
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多