在一台 3G 内存的云电脑上跑浏览器自动化,我删掉了一半代码
这台云电脑是 2 核 3G,装完系统还剩两G多。我一开始想得很美:Playwright 起一个 Chromium,定时跑几个任务,完事。
结果第一次跑就卡死。free -m 一看,Chrome 起来就吃掉一个多G,加上 Node 那边的工作台本身,系统开始频繁回收内存,页面渲染到一半就白屏。截图全是灰的,我还以为是网络问题,反复重试了半小时。
后来才想明白,无头浏览器在这种小机器上根本不是「轻量」。我的做法是干脆不用无头模式自带的独立实例,改成复用一个常驻的可视 Chrome,用 --remote-debugging-port 挂上去,Playwright 只做 connect_over_cdp。这样浏览器只启动一次,每次任务相当于开个新标签页,内存曲线平了很多。
启动参数也调了:--disable-dev-shm-usage 是必须的,容器里 /dev/shm 默认只有 64M,不改的话渲染大页面必崩;--disable-gpu 对这种机器毫无损失;再加上 --no-first-run --no-default-browser-check,省掉首次启动那堆弹窗。
还有一个坑是 cookie。用 Playwright 自己管 profile 的话,每次启动都是新的上下文,登录态全丢。我改成固定 --user-data-dir,把登录态留在磁盘上,脚本只负责读 cookie 判断有没有登录,不再反复登录。
改动之后,同样的任务从「跑十分钟崩一次」变成能连续跑一天。代码反而少了两百多行,因为不需要处理各种启动失败的兜底了。
所以内存紧张的时候,先想的应该是「能不能不启动」,而不是「怎么启动得更快」。
- 点赞
- 收藏
- 关注作者
评论(0)