Puppeteer在Rendertron中使用时会在/tmp中创建大量缓存文件

问题描述

我们在我们的一个网站上使用 rendertron 进行服务器端渲染,但我们在处理 puppeteer 创建的文件时遇到了问题。

我们将 rendertron 缓存设置为“内存”,限制为 500,这似乎可以正常工作。 但即使将缓存设置为 rendertron 中的内存,底层的 puppeteer 进程也会在 /tmp/puppeteer_dev_chrome-[profileId]/Default/Cache 目录下创建数以万计的文件

当有大量请求命中 rendertron 时,这会导致问题。磁盘 I/O 将很快达到 100%,然后服务器将变得无响应。

我们已经尝试研究可以传递给 puppeteer 的标志(在此处 https://peter.sh/experiments/chromium-command-line-switches 找到),但似乎找不到一个(或多个)可以解决我们的问题。

有没有人用过 rendertron 做 SSR 并且遇到过这种问题?任何形式的帮助将不胜感激。

解决方法

我最近在 GCP 上遇到了这个问题,即使我们将缓存设置为内存,我们的 iops 也被 /tmp 的使用消耗在渲染框上。最好的办法是通过利用 tmpfs 将您的 RAM 与存储用于 /tmp 数据。以下是 /etc/fstab 中利用 tmpfs 的“安全”1GB /tmp 示例:

tmpfs /tmp tmpfs mode=1777,nosuid,nodev,size=1g 0 0

一旦添加了 fstab 条目,只需“挂载 /tmp”,然后使用与之前的 /tmp 相关联的任何打开的文件句柄重新启动服务。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...