0

CherryPy 在单核 Raspberry Pi 第一代空闲时消耗大约 15-20% 的 CPU,即根本没有处理任何请求。为了减少这种情况,我尝试了各种配置调整,但无济于事。我怎样才能减少这种情况?

>>> import cherrypy
>>> cherrypy.quickstart()
[29/Apr/2021:14:14:22] ENGINE Listening for SIGTERM.
[29/Apr/2021:14:14:22] ENGINE Listening for SIGHUP.
[29/Apr/2021:14:14:22] ENGINE Listening for SIGUSR1.
[29/Apr/2021:14:14:22] ENGINE Bus STARTING
[29/Apr/2021:14:14:22] ENGINE Started monitor thread 'Autoreloader'.
[29/Apr/2021:14:14:23] ENGINE Serving on http://127.0.0.1
[29/Apr/2021:14:14:23] ENGINE Bus STARTED

top输出:

Tasks:  85 total,   1 running,  84 sleeping,   0 stopped,   0 zombie
%Cpu(s): 23.9 us,  8.9 sy,  0.0 ni, 66.6 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
MiB Mem :    430.1 total,    152.9 free,     76.2 used,    201.0 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.    297.3 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                             
10674 root      20   0  131484  21240   8188 S  18.5   4.8   0:45.63 python3                                                                                             
                                                                     
4

1 回答 1

0

高空闲 CPU 使用率的原因似乎是CherryPy中使用的cheroot HTTP 服务器内的内部连接管理器循环。该循环包含一个等待和选择下一个连接的命令,但它的超时时间为0.01 秒,这意味着循环每秒迭代多达 100 次,这对空闲 CPU 使用率有很大影响。更多详细信息,请参阅 GitHub 上的以下问题:https ://github.com/cherrypy/cheroot/issues/378

此超时时间为0.5 秒,然后,为了解决其他更改引入的连接延迟问题,降低到 0.01 秒。与此同时,这不再是必需的,但仅在 Windows 上出于未知原因 Python 似乎表现不同,并导致新连接在此超时之前有额外的延迟。有关更多详细信息,请参阅以下拉取请求,它将超时与连接到期间隔对齐,默认为 0.5 秒:https ://github.com/cherrypy/cheroot/pull/352

造成这种情况的原因,乍一看是错误的,Windows 上的 Python 行为仍然需要调查,并在情况下报告给 Python 错误跟踪器。非常感谢任何帮助,以使 CherryPy(分别为 cheroot)再次成为 Raspberry Pi 1、Zero 等低配置硬件的好选择。

于 2021-07-28T18:00:11.793 回答