如何修复VPS上Python Selenium脚本的Chrome异常退出错误?
解决1GB内存VPS上Chrome Selenium启动异常退出的问题
这种情况我之前在小内存VPS上也碰到过,核心原因是Chrome默认资源占用较高,1GB内存的VPS不足以支撑其正常启动,再加上老版本chromedriver的兼容性问题,就会触发Chrome failed to start: exited abnormally错误。下面是一步步的解决方案:
1. 优化Chrome启动参数,大幅降低内存占用
在你的Chrome选项中添加更多内存优化参数,修改后的代码如下:
def automate_test(self): # instantiate a chrome options object so you can set the size and headless preference chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument("--disable-dev-shm-usage") # 禁用/dev/shm,避免小内存VPS共享内存不足 chrome_options.add_argument("--disable-gpu") # 无头模式无需GPU加速,减少资源消耗 chrome_options.add_argument("--single-process") # 强制Chrome单进程运行,降低内存开销 chrome_options.add_argument("--window-size=1024x768") # 调低窗口分辨率,比1920x1080省内存 chrome_options.add_argument("--disable-extensions") # 禁用默认扩展,减少不必要的内存占用 chrome_options.add_argument("--disable-plugins") # 禁用插件,进一步压缩资源需求 driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/root/chromedriver') driver.get("https://google.com")
这些参数里,--disable-dev-shm-usage是关键:Linux系统默认的/dev/shm分区很小,Chrome会优先使用它存储临时数据,1GB VPS上很容易耗尽,禁用后Chrome会切换到磁盘临时文件,虽然速度稍慢但能解决启动失败的问题。
2. 检查并更新Chrome与chromedriver版本匹配
你用的chromedriver是2.26版本,这个版本非常老旧(对应Chrome 53-55版本),老版本Chrome的内存优化远不如新版,而且兼容性问题更多。建议:
- 先查看当前VPS上安装的Chrome版本:
google-chrome --version - 下载对应版本的chromedriver(确保主版本号一致,比如Chrome是114.x,就下载114.x的chromedriver)
- 替换掉旧的
/root/chromedriver,并赋予执行权限:chmod +x /root/chromedriver
3. 增加Swap分区缓解内存压力
1GB内存确实紧张,给VPS加个Swap分区当“虚拟内存”,能有效避免内存不足导致进程崩溃:
# 创建1GB的swap文件 sudo fallocate -l 1G /swapfile # 设置权限避免被其他用户访问 sudo chmod 600 /swapfile # 格式化swap文件 sudo mkswap /swapfile # 启用swap sudo swapon /swapfile # 设置开机自动挂载swap echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4. 避免用root用户运行(可选)
虽然你加了--no-sandbox,但root用户运行Chrome还是可能触发一些权限或安全限制导致异常。如果可以的话,创建一个普通用户来运行脚本:
sudo adduser selenium-user sudo su - selenium-user # 然后在这个用户下安装依赖、运行脚本
按这个顺序一步步试,先加优化参数,不行再更新版本,最后加swap,基本能解决问题。
内容的提问来源于stack exchange,提问作者molecules




