Python进程在top中出现和消失

Python进程在top中出现和消失

我在 24 核服务器 (Ubuntu 14.04 LTS x64) 上同时启动了大约 12 个 Python 脚本。每个 Python 脚本大约需要一小时才能完成。

我在顶部看到它们相当零星地出现,而每个脚本应该至少 100% 地使用一个核心而不会中断(不涉及磁盘 IO,没有网络 IO,并且没有交换,因为服务器有大约 100 GB 的内存) RAM 和脚本 RAM 要求非常低):

在此输入图像描述

如何解释 top 中每个脚本不会连续占用一个或多个核心 100% 的 CPU?

24 核服务器是计算机集群的一部分,但通常如果出现过载,顶部st会对此进行解释。 (即远大于0.0)。

答案1

我猜你的内核并不认为它们是优先的:)

如果您查看图像,您会发现 Python 进程的优先级为 20。这是默认值。这意味着,如果我们抛开其他调度因素(已分配的 CPU 时间、进程状态等),您的 Python 脚本将被认为与toprcu_shed、 、 ...一样重要sshd,而这些进程可能并不总是有东西为了做到这一点,他们仍然可以在进入时访问CPU运行状态

Linux 进程以时间量子(或时间片)运行。这意味着每个n毫秒,内核抢占(挂起)当前正在运行的进程(在核心上),并搜索另一个要调度的进程。默认情况下,时间片值为 100 毫秒(或者)。

由于您的机器有 24 个核心,因此您基本上可以假设可以安排 24 个进程同时运行。被选择(每 100 毫秒)进行调度的 (24) 个进程是基于几个因素来选择的。此外,如果进程在时间片到期之前进入睡眠状态,也可能被抢占。从 Linux 2.6 开始,内核使用完全公平的调度器默认算法。进程调度优先级主要基于每个进程已经运行的时间,并通过a考虑“用户优先级”(niceness)衰减因子:

CFS 不直接使用优先级,而是将它们用作允许执行任务的时间的衰减因子。优先级较低的任务具有较高的衰减因子,而优先级较高的任务具有较低的延迟因子。这意味着低优先级任务允许执行的任务时间比高优先级任务消耗得更快。这是一个优雅的解决方案,可以避免按优先级维护运行队列。

现在,可以(从用户态)通过以下nice命令运行具有自定义良好值的进程:

nice [OPTION] [COMMAND [ARG]...]
    Run  COMMAND  with an adjusted niceness, which affects  process scheduling. 
    With no COMMAND, print the  current niceness. Niceness  values range  from 
    -20 (most favorable to the process) to 19 (least favorable to the process).

请记住,Linux 调度程序并不使用该优先级作为绝对的事情。每当内核需要选择一个进程时,都会考虑该值,但也会考虑其他因素:进程的贪婪使得它们无论如何都不太可能被选择(算法的名称是非常不言自明的)一:p)

相关内容