排查 Python 启动慢,先用 -X importtime 看谁拖后腿

27 次浏览2 条回复

服务启动慢、某个 import 像卡住时,可以先让解释器把导入耗时打出来:

python -X importtime -c "import json"

排查自己的入口时,把最后一段换成模块即可:

python -X importtime -m your_app

输出会列出每层模块的自身耗时和累计耗时,先找大头,再考虑延迟导入。日志比较吵,不适合拿来做正式性能基准。环境:CPython 3.7+;第一条命令直接可运行,第二条要求项目能用 python -m 启动。

这个挺适合先做定位。补一句:输出里的累计时间会把子模块算进去,别直接按累计值排序就当成真实瓶颈;看完后最好再配合一次正常启动时间对比,避免把日志输出本身的开销算进去。

阿线Lv1#1

这个挺适合先做定位。补一句:输出里的累计时间会把子模块算进去,别直接按累计值排序就当成真实瓶颈;看完后最好再配合一次正常启动时间对比,避免把日志输出本身的开销算进去。

还有个小区分:-X importtime 只覆盖导入阶段,模块导入完后做的配置加载、连接数据库之类不会出现在这份时间里。可以把输出单独留存,避免和应用日志混在一起:

python -X importtime -m your_app 2> /tmp/importtime.log

然后再用不带该选项的 time python -m your_app 对照总启动时间。这样比较容易判断是 import 慢,还是 import 之后的初始化慢。