【问题标题】:How do I determine the appropriate check interval?如何确定适当的检查间隔?
【发布时间】:2010-08-24 17:55:32
【问题描述】:

我刚开始处理一个有一些 CPU 问题的龙卷风应用程序。 CPU 时间将随着时间的推移单调增长,使 CPU 达到 100%。该系统目前设计为不阻塞主线程。如果它需要做一些阻塞和异步驱动程序不可用的事情,它将产生另一个线程来执行阻塞操作。

因此我们的主线程几乎完全受 CPU 限制,而其他线程几乎完全受 IO 限制。根据我的阅读,这似乎是遇到 GIL 问题的完美方式。另外,我的分析表明我们花费了大量时间等待信号(我假设这是 __semwait_signal 正在做的事情),这与 GIL 在我有限的理解中可能产生的影响是一致的。

如果我使用sys.setcheckinterval 将检查间隔设置为 300,CPU 增长会显着减慢。我要确定的是我是否应该增加检查间隔,将其保持在 300,或者害怕增加它。毕竟,我注意到 CPU 性能变得更好,但我有点担心这会对系统的响应能力产生负面影响。

当然,正确的答案可能是我们需要重新考虑我们的架构以将 GIL 考虑在内。但这不是可以立即完成的事情。那么我如何确定短期内采取的适当行动方案呢?

【问题讨论】:

    标签: python multithreading tornado gil


    【解决方案1】:

    我要检查的第一件事是确保您正确退出线程。仅凭您的描述很难弄清楚发生了什么,但您使用了“单调”一词,这意味着 CPU 使用与时间相关,而不是与负载相关。

    您很可能会遇到 Python 的线程限制,但它应该会随着负载(活动线程的数量)而上下变化,并且随着这些线程的退出,CPU 使用率(上下文切换成本)应该会减少。线程一旦创建就永远存在,有什么理由吗?如果是这种情况,请优先考虑重新架构。否则,短期将是弄清楚为什么 CPU 使用率与时间相关而不是负载。这意味着每个新线程在您的系统中都有一个永久的、不可逆转的成本 - 这意味着它永远不会退出。

    【讨论】:

    • 我很肯定线程正在正确退出。另外,我看到负载下的一些性能差异。只是负载导致CPU时间增长更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多