gpt4 book ai didi

python - 处理 Django 低响应性

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:23 24 4
gpt4 key购买 nike

我的 Django 应用程序中遇到一些响应能力差的问题,我不知道如何解释。我在 Cent Os 开发环境中使用 Nginx、uWSGI Django 1.7 和 Python3.4。还有一些后台 CPU 密集型计算线程定期运行以执行某些任务(计算、数据库操作、网络 I/O)。由于需要处理大型任务,我注意到 CPU 利用率在较长时间内增长到 100%。在CPU利用率较高的情况下,任何Django请求都需要花费大量时间来处理,有时甚至会因Nginx而导致超时。

我觉得很难理解的是为什么处理请求的 Django 线程获得如此小的 CPU 切片?这几乎就像后台任务占用处理器而其他线程只获得剩余的资源一样。

考虑到 CPU 负载较高,有什么机制/选项可以让 Django 响应地执行?

最佳答案

听起来您需要调整后台操作的调度优先级。如果您不熟悉这个术语,这里是基本思想:为了运行许多进程,您的操作系统必须将 CPU 时间划分为小片,并将每个正在运行的进程分配给一个片。每次“时间片”结束时,操作系统都会选择一个新进程在下一个时间片中运行。这种选择称为 CPU 调度,每秒会发生多次。

大多数操作系统允许您调整进程的优先级。本质上,它给操作系统一个“提示”,即它应该相对于其他正在运行的进程或多或少地调度该进程。 Linux 允许您通过设置进程的“nice”值来调整进程的优先级。 Nice 值的范围从 -20(最高优先级/最频繁调度)到 19 或 20(最低优先级)。 (这与您的预期有些倒退)。

您可以通过多种方式设置进程的良好值。当你启动它时,你可以像这样运行它:nice -n [value] [program name]。如果进程已经在运行,您可以运行renice -n [value] [pid],其中pid是进程ID。进程还可以使用nice(3)系统调用调整自己的nice值。

因此,考虑到所有这些,您想要执行以下操作之一:

  • 提高需要响应的进程(例如 nginx、uwsgi、django)的优先级(降低 Nice 值)。
  • 降低后台进程(即计算、数据库索引等)的优先级(增加nice值)。

更干净的做法是降低后台进程的优先级,因为后台进程的数量可能比“响应式”进程少。如果后台进程是Python,它们可以使用os.nice()函数来调整自己的优先级。否则,程序可能有一个配置选项来指定nice值。如果这些都不起作用,您只需renice它们,并且每次重新启动时也必须执行此操作。

当然,如果你愿意,你也可以将nginx的优先级提高为adjusting the configuration 、uWSGI(我不知道如何——也许是配置,否则是 renice),以及你的 Django 应用程序(可能是 os.renice() )。

无论您做什么,请记住以下几点:

  • 您需要 root 才能提高优先级(降低nice),但不能执行相反的操作。这是降低后台进程优先级的另一个观点。
  • 不要过度追求美好的值(value)观!您可以使用 tophtop(即“NI”列)查看系统上运行的进程的各种良好值。您只需设置数字,以便您想要更频繁运行的进程的良好值比另一个进程低一点。

希望这一切能有所帮助。更多信息可以在您的手册页中找到:nice(1)renice(1)nice(3)sched (7)。或者谷歌搜索“linux Nice”或类似的东西。玩得开心!

关于python - 处理 Django 低响应性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com