我正在开发一个在Linux (python 3.9)上运行的python编写的系统。这个系统是一个庞然大物。它有大约20个服务共享相同的代码库。
每个服务-即使是最简单的-至少使用50mb的RAM。由于有20个服务,这加起来相当多的RAM,我非常希望减少它。(在这个系统中,RAM是瓶颈)。
通过一些实验,我发现以下服务使用了50 MB的内存:
from .alert_mgr import alert_types_for_obj, alert_types_for_objtype, EventLogThread, Event
import time
while True:
time.sleep(2)
此服务只占用10mb内存(即第一个导入注释掉):
# from .alert_mgr import alert_types_for_obj, alert_types_for_objtype, EventLogThread, Event
import time
while True:
time.sleep(2)
据我所知,这样做的原因是导入将python代码拉入RAM。许多导入的文件正在将其他文件拉入RAM,最终我们在每个服务的RAM中都有大量的python代码。该服务不使用大部分代码,但由于python源文件没有被正确分解,因此代码被拉入。
当然,正确的解决方案是将python源代码分解成更小的文件。但是,由于这是大量的工作和时间是有限的,有没有更简单的解决方案(如动态加载源代码到RAM)?
您可以使用linux控制组之类的东西来限制特定进程的可用内存。——示例
不用说,这会降低你的服务速度。
也有许多框架可以帮助您找到未使用的代码,从而帮助您优化代码的内存占用-示例