You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级setuptools至65.3.0后进程内存异常升高问题求助

问题:setuptools升级至65.3.0后导入distutils导致内存占用飙升

升级setuptools至65.3.0版本后,系统中多数进程突然出现内存占用升高的情况。排查发现,脚本中导入distutils的操作会导致新版本加载大量动态库,进而增加加载耗时并提升内存占用。两台测试机器的Python版本均为3.9.16。

测试脚本

from distutils.version import StrictVersion
import time

while True:
    time.sleep(1000)

setuptools 65.3.0环境测试结果

[root@controller(FHGW-83) /home/robot]
# pmap 2440334 | wc -l
196
[root@controller(FHGW-83) /home/robot]
# pmap 2440334 | grep cpython | wc -l
111

# pmap 2432196 | grep cpython
00007f8606e8a000     72K r---- _ssl.cpython-39-x86_64-linux-gnu.so
...
00007f8606f02000     24K r-x-- _json.cpython-39-x86_64-linux-gnu.so
...
00007f8607296000      4K rw--- _csv.cpython-39-x86_64-linux-gnu.so
...
00007f860786f000      4K rw--- _sha512.cpython-39-x86_64-linux-gnu.so
...
00007f86078fe000      8K rw--- pyexpat.cpython-39-x86_64-linux-gnu.so
...
00007f86079f9000      4K rw--- _struct.cpython-39-x86_64-linux-gnu.so
...
and more...


$ top -p 2440334 
    PID USER      PR  NI    VIRT    RES  %CPU  %MEM     TIME+ S COMMAND                                                                                                                    
2440334 root      20   0   31.9m  27.2m   0.0   0.2   0:00.68 S python test.py  

setuptools 57.0.0环境测试结果

# python test.py &
[1] 1562394
# pmap 1562394 | wc -l
67
# pmap 1562394 | grep cpyth | wc -l
5


PID USER      PR  NI    VIRT    RES  %CPU  %MEM     TIME+ S COMMAND                                                                                                                    
1562394 root      20   0   14.0m   9.3m   0.0   0.1   0:00.05 S python test.py 

问题分析

与setuptools的关联

setuptools从60.x版本开始,改变了对distutils的处理逻辑:原本Python标准库自带独立的distutils实现,而新版setuptools会接管distutils的导入路径,用自身内置的distutils替代系统原生版本。在65.3.0这个版本中,setuptools内置的distutils存在依赖膨胀问题。

为何加载大量库

  • 在setuptools 57.0.0及更早版本中,导入distutils.version.StrictVersion使用的是Python原生distutils,该模块依赖极少,仅会加载必要的基础库,因此内存占用低。
  • 在setuptools 65.3.0中,当你导入distutils相关模块时,实际加载的是setuptools内置的distutils。为了扩展包管理等功能,这个内置版本在初始化过程中会隐式导入大量额外模块(如ssl、json、csv等),这些模块对应的CPython扩展动态库会被加载,直接导致进程内存占用飙升,同时也增加了加载耗时。

内容的提问来源于stack exchange,提问作者Dinesh Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:18:11