Google Cloud Run 中的 PHP 服务突然停止响应所有传入请求

2024-01-09

我正在 Google Cloud Run 中运行 PHP (8.1) 后端应用程序。后端连接到在 Google Cloud SQL 中运行的 MYSQL 数据库。 在过去的两周里,我们发生了三次完全中断的情况。后端服务器不响应任何请求,导致我们的应用程序和网站完全关闭。

在第一次发生这种情况之前,服务器已经运行了好几个月,没有出现任何类似问题。我首先怀疑这与后端或数据库的某些规格有关,但查看图表,我看不出任何明显的原因说明为什么它应该全部下降。

Notice how the traffic goes down every night, but is still spiky, before it went completely flat around 4PM today: Cpu utilization of the database

然后,我查看了 Cloud Run 服务器的统计数据,以查找其中的任何迹象。我们正在以相对较高的规格和灵活的容器实例大小运行,因此这不应该引起任何这样的麻烦。容器内存和CPU利用率突然下降。在服务决定终止之前似乎没有发生任何异常活动。

我们的 Sentry 仪表板显示在停机时间段内没有捕获任何事件。 然而,在 Google Cloud Logs Explorer 中查看后端服务的日志,在这个时间间隔内似乎有 200 个响应堆。通过查看日志,我没有看到任何迹象表明有什么问题。

我唯一能想到的解决这个问题的办法就是在 Google Cloud Run 中重新部署服务,有效地启动一个具有完全相同代码和规格的新容器。然后它又开始工作了,从那以后一直在工作,但我不知道发生了什么。 据我所知,我们没有任何可能导致此类问题的代码或配置相关更改。

有人有想法吗?我唯一能想到的是某种突然失控的内存泄漏。但我认为应该能够以某种方式追溯到。如果是这样的话,我也认为在很长一段时间内这种情况应该发生得更频繁。很长一段时间运行不佳,然后在两周内下降了 3 次。

任何帮助或指示将不胜感激!


此错误可能是由 Cloud Run 网络基础架构内的预期内部行为引起的。有时,此网络基础设施确实会进行维护,这可能会导致某些连接关闭。由于 Cloud Run 的运行状况检查不依赖于网络,因此这可能会导致容器卡住并无法与服务器通信。某些 Cloud Run 应用程序也对这种网络连接中断很敏感。由于您能够重新部署 Cloud Run 容器,因此您能够“取消粘连”该容器,并且它能够按预期运行。

推荐的解决方法和实践是在服务代码中实现重试逻辑。这将使 Cloud Run 服务能够在网络连接断开时重新连接到服务器。

您有一个向您的 Cloud Run 服务发出请求的网站。 Cloud Run 服务刚刚停止服务/响应任何请求。 这也反映在 Cloud SQL 中,因为 Cloud Run 服务连接到 Cloud SQL,因此对 Cloud Run 的请求的减少反映在 Cloud SQL 使用情况中。

如果这是正确的,那么重试逻辑应该位于前端。目的是重试从您的网站(前端)到 Cloud Run 服务(后端)的请求。

不同的框架提供不同的资源来实现重试逻辑。这里有一个有关重试逻辑的 Google Cloud 文档 https://cloud.google.com/iot/docs/how-tos/exponential-backoff#example_algorithm.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Cloud Run 中的 PHP 服务突然停止响应所有传入请求 的相关文章

  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • 在这个页面中,悬停不起作用,我不知道为什么,而且页脚也没有占用 100% 宽度,即使我已经给了它

    我的编码是否不正确 或者悬停和页脚有什么问题 我需要知道 php 邮件程序是正确的还是我有错误 我无法找到错误 因为邮件功能在本地服务器上不起作用
  • PHP:file_get_contents 与 json_decode 不能一起工作

    使用 file get contents 读取 json 文件后遇到问题 当我运行这段代码时 它工作正常
  • 如何在 Laravel 中编写联合查询?

    我正在使用 laravel 5 0 并且我有 mysql 查询 SELECT surat masuk id surat surat masuk nomor surat FROM surat masuk WHERE EXISTS SELECT
  • 如何在MySQL中查找上周的数据

    我想显示来自 Q1 每个学生只有最后一周 Q2 每个学生只有最后一个月 我怎样才能实现这个目标 一周演示 http sqlfiddle com 2 f1fbb 3 当月演示 http sqlfiddle com 2 f1fbb 4 CREA
  • 如何在 Cakephp 3 中创建按字段集分组的多个复选框

    我在阅读本文档时遇到问题 Cakephp3 Cookbook 表单 创建选择选择器 http book cakephp org 3 0 en views helpers form html creating select pickers我尝
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • Blueimp jQuery 文件上传,传递额外的表单数据

    我可以使用一些帮助 我已经设法使 blueimp jQuery 文件上传为我工作 但我仍然绝对是一个新手 我对 jQuery 等知之甚少 所以请尝试将其清晰明了地提供给我尽可能简单 我会尝试具体一点 好的 我想实现的是人们可以上传照片 并为
  • php在html页面中创建额外空间

    我是网络开发新手 我真的被这个愚蠢的问题困扰了 当我在 html 代码之前插入 php 代码时 如下所示 它在我的页面顶部创建了额外的空白空间 并将整个内容 推下 是否有可能以某种方式避免创建额外的空间 如果 php 代码位于 html 的
  • 在 PHP 中使用 file_get_contents 进行 PUT 请求的错误请求

    这个 api 调用使用 Postman REST 客户端 可以正常工作 但是当我的 GAE 应用程序中的服务器上发出请求时 我当前收到以下错误 HTTP 请求失败 在 C Projects app file php 第 26 行 打开流失败
  • Laravel 5 / Codeception 未正确路由

    我正在尝试使用代码接收为控制器函数编写 API 测试用例 但遇到了一个问题 即控制器函数的路由似乎未正确评估 并且评估似乎根据我的不同而不同我的测试用例中有 这是我的测试用例中的代码示例 use ApiTester class Custom
  • 基本的 simpleXML 工作示例?

    看起来 PHP 中的 simpleXML 有很多问题 我在 Windows 上运行最新版本的 php 但无法让 simpleXML 的基本示例按照文档中的方式工作 我的 xml 文件是
  • 从 php 对 Active Directory/ISA 进行身份验证 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个复杂的问题 而且由于我真的不知道从哪里开始而加剧 在过去的几年里 我开发了许多基于 php Web 的系统 当我构建它们时 我
  • 如何使用 PHP 从 MySQL 查询中按升序对值进行排序?

    我使用以下 PHP 脚本从 MySQL 表中获取和更改数据 并将结果打印在 HTML 表中 我希望按升序对数据进行排序 utilization percentage变量 它是由创建的 total client time total avai
  • zend 模块特定配置问题

    我使用 zend 框架构建 REST Web 服务 并且使用模块来分隔我的 api 版本 现在 我想为每个模块 v1 和 v2 都有一个单独的配置文件 主要用于指定单独的数据库连接 我有这样的目录结构 application modules
  • 何时以及为何应使用 $_REQUEST 而不是 $_GET / $_POST / $_COOKIE?

    标题中的问题 当所有 3 个都发生时会发生什么 GET foo POST foo and COOKIE foo exist 其中哪一个被包含到 REQUEST 我想说永远不会 如果我想通过各种方法设置某些内容 我会为每个方法编写代码以提醒自
  • ejabberd 16.06 + mysql 5.5.50,消息历史记录不保存

    我使用ejabberd 16 06 mysql 5 5 50 消息历史记录没有保存 我的 ejabberd yml MySQL server odbc type mysql odbc server freldo odbc port 3306
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我

随机推荐

  • 在四开图标题中将“图”文本加粗

    默认情况下 生成 html 时 quarto https quarto org 将图的标题添加到自动生成的文本 Figure NN 中 其中 NN 是图的编号 例如 以下 R 块 r label myFirstFigure fig cap
  • 无法在 CentOS 上安装 Ruby

    我只是无法在我的 CentOS 也托管 cPanel 上安装 Ruby sudo yum install ruby ruby devel ruby irb ruby rdoc ruby ri audit log user command 连
  • 有没有办法忽略 Django 中的缓存错误?

    我刚刚将我们的开发 Django 站点设置为使用 redis 作为缓存后端 一切正常 我关闭了 redis 来看看会发生什么 果然由于缓存后端行为而出现了 Django 404 连接被拒绝 或者出现各种其他错误 有什么方法可以指示 Djan
  • 用空字符串初始化所有字符串成员

    我想将对象的所有 String 成员设置为空字符串 如果它们为空 伪代码 foreach member in object if member instanceof String and member null member 实现这一目标的
  • 禁用 Flex CSS 类型选择器警告?

    我正在构建一个较大的 Flex 项目 其中包含多个模块 生成多个 SWF 的单个 Flex 项目 现在 我有一个 css 文件 正在主 SWF 标记中加载
  • 使用 JavaScript 更改输入字段的背景颜色

    我正在制作一个表单 并将输入字段设置为仅使用 JavaScript 进行读取 我想将只读属性的默认颜色更改为绿色或黄色 HTML
  • Xcode 6:如何禁用优化 (Swift)

    调试期间不会触发断点 我发现这是因为优化了代码 如何禁用优化 我浏览了每个工具栏 我能找到的最接近的选项是Product gt Perform Action gt Generate Optimisation Profile Xcode 说
  • 读取 JSF Web 应用程序静态代码中的 .properties 文件

    我想从静态块中的属性文件获取数据库连接参数 属性文件位置是WEB INF classes db properties 我会更喜欢使用getResourceAsStream 方法 我尝试了很多方法 但都返回了null private stat
  • 返回日期没有返回小时和分钟

    这是我的代码 CREATE OR REPLACE FUNCTION GET DATE P DAYS IN NUMBER RETURN DATE AS V DATE DATE BEGIN V DATE SYSDATE P DAYS DBMS
  • Odata Url 降序转换

    我需要按患者的 Visidate 降序获取数据 所以我尝试了这样的网址 192 168 1 105 33396 FalconCPDataService svc DEPhysicians format json expand DEPatien
  • NUnit:字典断言

    我想要一个一班轮 在 NUnit 中 断言两个字典是否相同 即 我想要以下代码的简洁版本 public static void DictionaryAssert
  • WPF:触发动画 - 沿 Y 轴向下移动控件

    我有一个想要向下移动的控件MouseOver 不幸的是 当我将鼠标悬停在上面时 动画不会运行 但背景颜色会改变 Toolkit Dialog是一个继承的自定义对话框控件ContentControl 另外 在最终实现中我不会使用 MouseO
  • 在 Android 上获取用户当前位置的最简单、最可靠的方法是什么?

    The LocationManager对于只需要偶尔粗略估计用户位置的应用程序来说 Android 上的 API 似乎使用起来有点痛苦 我正在开发的应用程序本身并不是真正的位置应用程序 但它确实需要获取用户的位置才能显示附近企业的列表 它不
  • Rails 中的 Carrierwave 未加载默认 URL

    我在 Carrierwave 上传器中设置默认图像时遇到问题 它似乎在 URL 前面附加了一个奇怪的类 但不渲染图像 请参阅下面的我的代码 Helper encoding utf 8 class UserpicUploader lt Car
  • 从DataTable中获取布尔值

    如何检索数据集中的布尔值 我使用的是 Visual Studio 2003 我正在尝试以下操作 但它不起作用 if product inactive don t display and redirect to main page if db
  • 将项目数据传递给反应模式

    我有一张地图 它渲染了一些项目 其中一行在下面 a this setState openDeleteModal true gt Delete a 显然 我想在用户单击删除时打开一个模式 但我必须传递一些信息 例如项目名称 项目 ID 来执行
  • switch执行所有case语句

    有人能解释一下为什么我的循环从 0 到 7 吗 我只需要获取前 3 种情况 但程序正在经历所有情况 代码位于 show 方法中 for brojac 0 brojac lt 3 brojac switch brojac case 1 fig
  • 从 SqlDataReader 创建 JSON 字符串

    UPDATE 我想到了 看看我下面的回答 https stackoverflow com questions 5554472 create json string from sqldatareader 5597472 5597472 我正在
  • PHP、MySQL、SELECT 问题

    您好 我有一个看起来很复杂的问题 但我会尽力解释得更好 这是一个逻辑问题 我有一个数据库表 该数据库表 我们称之为表 A 包含一些字符串 字符串由以下行组成 ID auto increment Text Date Time Type IDA
  • Google Cloud Run 中的 PHP 服务突然停止响应所有传入请求

    我正在 Google Cloud Run 中运行 PHP 8 1 后端应用程序 后端连接到在 Google Cloud SQL 中运行的 MYSQL 数据库 在过去的两周里 我们发生了三次完全中断的情况 后端服务器不响应任何请求 导致我们的