Google cloud platform GCP Composer-气流Web服务器持续关闭

Google cloud platform GCP Composer-气流Web服务器持续关闭,google-cloud-platform,airflow,google-cloud-composer,Google Cloud Platform,Airflow,Google Cloud Composer,我正在使用GCP Composer和最新的图像版本Composer-1.16.1-airflow-1.10.15 由于缺少一些缓存文件,我的Web服务器有时会死掉 {cli.py:1050} ERROR - [Errno 2] No such file or directory 有人知道怎么解决吗 其他信息: 工人: 节点计数3磁盘大小(GB)20机器类型n1-standard-1 Web服务器配置: 机器类型composer-n1-webserver-8(8个vCPU,7.6 GB内存)

我正在使用GCP Composer和最新的图像版本Composer-1.16.1-airflow-1.10.15

由于缺少一些缓存文件,我的Web服务器有时会死掉

{cli.py:1050} ERROR - [Errno 2] No such file or directory

有人知道怎么解决吗


其他信息:

工人: 节点计数3磁盘大小(GB)20机器类型n1-standard-1

Web服务器配置: 机器类型composer-n1-webserver-8(8个vCPU,7.6 GB内存)

配置覆盖:


更新27.04.2021

我设法找到了杀死网络服务器的地方


GCP Composer正在使用Cellery Executor under-soo进行检查,它试图读取一些已被工作人员删除的缓存文件?

我找到了!aa我将向GCP Composer团队报告错误

因此,如果config webserver.reload_on_plugin_change=True,则cli将进入该部分:

它通过调用os.walk(settings.PLUGINS\u FOLDER)函数生成要检查的文件

与此同时,gcsfuse决定删除这些文件的一部分 发生错误-找不到文件

因此,禁用webserver.reload_on_plugin_更改会使工作正常-但是这个选项非常方便,所以我将为谷歌创建错误通知单

 # if we should check the directory with the plugin,
    if self.reload_on_plugin_change:
        # compare the previous and current contents of the directory
        new_state = self._generate_plugin_state()
        # If changed, wait until its content is fully saved.
        if new_state != self._last_plugin_state:
            self.log.debug(
                '[%d / %d] Plugins folder changed. The gunicorn will be restarted the next time the '
                'plugin directory is checked, if there is no change in it.',
                num_ready_workers_running, num_workers_running
            )
            self._restart_on_next_plugin_check = True
            self._last_plugin_state = new_state
        elif self._restart_on_next_plugin_check:
            self.log.debug(
                '[%d / %d] Starts reloading the gunicorn configuration.',
                num_ready_workers_running, num_workers_running
            )
            self._restart_on_next_plugin_check = False
            self._last_refresh_time = time.time()
            self._reload_gunicorn()

def _generate_plugin_state(self):
    """
    Generate dict of filenames and last modification time of all files in settings.PLUGINS_FOLDER
    directory.
    """
    if not settings.PLUGINS_FOLDER:
        return {}
    all_filenames = []
    for (root, _, filenames) in os.walk(settings.PLUGINS_FOLDER):
        all_filenames.extend(os.path.join(root, f) for f in filenames)
    plugin_state = {f: self._get_file_hash(f) for f in sorted(all_filenames)}
    return plugin_state