【问题标题】:How to find the cause of delay?如何找到延误的原因?
【发布时间】:2015-05-30 09:47:12
【问题描述】:

我正在处理的程序需要在从网络到达时实时处理某些对象。吞吐量很好,但由于意外延迟,我偶尔会在输入队列中丢失。

我的分析表明延迟的来源很可能在我的程序之外;类似于在我的进程的 CPU 内核上调度另一个进程(我将进程的亲和性设置为某个内核)或到达的硬件中断(可能是网络中断)。

我的问题是我不确定延迟的来源。是否有工具或方法可以找到某个时间段内 CPU 内核的准确使用情况? (例如告诉我核心 0 被进程 19494 99.1% 的时间使用,进程 20001 0.8% 的时间和进程 8110 0.1% 的时间。)

我在配备 Xeon CPU 的 HP 服务器上使用 Ubuntu 14.04 Server Edition。

【问题讨论】:

  • 您是否尝试提高您的程序优先级?
  • 是的,我做到了。我将调度策略设置为 FIFO,优先级设置为 99。
  • 你可以尝试运行分析器并确保延迟是外部的
  • 在我的情况下,一个完整的分析器是不行的。我相信这种延迟是由外部引起的原因是我的程序的两个部分在独立运行时都表现出合理的延迟。当放在一起时,虽然延迟要多得多。到目前为止,我唯一的猜测是网络中断(两部分之一与网络通信)。
  • 您可以尝试使用 Wireshark 检查数据是否通过网络到达或在传输过程中发生了什么。我已经看到网络上发生了很多事情,这些事情减慢了我的应用程序速度(例如 TCP/IP 重新传输、ARP 请求停止 TCP/IP 堆栈......)。

标签: linux server real-time delay


【解决方案1】:

可以是 CPU、磁盘速度、网络速度或内存。

使用 htop 很容易发现内存使用情况和 CPU。 (使用排序选项,F6)

高清速度可能是个问题。例如,如果您使用低能量磁盘(它们在不使用时会变慢)。您是否有在同一系统上运行的数据库? 使用 iotop ,它可能会提供线索。

【讨论】:

  • 我的程序不使用磁盘。服务器上也没有数据库。我怀疑 htop 可以帮助我,因为问题不是可以在 htop 中发现的明显问题。这就像一个单一的上下文切换偶尔发生。这就是为什么我想找出在我的程序生命周期内 CPU 内核上究竟运行了什么。
  • 所有进程都使用tophtop 显示。或者在你的过程中使用ps aux | sort -k 3,3
  • 我明白这一点。但它们可能会出现如此短暂,以至于我没有注意到它们。即使我这样做了,我也无法知道确切的时间。
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 2014-04-10
  • 2010-11-01
  • 1970-01-01
相关资源
最近更新 更多