# 昨晚开始网站响应非常缓慢

**URL:** <https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822>\
**Category:** Support\
**Created:** [2020年十一月21日 01:40 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822 "2020-11-21T01:40:51Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十一月21日 01:40 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/1 "2020-11-21T01:40:51Z")

</div>

提前抱歉，如果这是错误的分类、版块等。

我通过 DigitalOcean VPS 运行 Discourse 站点已有大约 6 个月，期间几乎没有遇到问题。管理员页面显示我当前版本为 2.5.0.beta4。从昨晚开始，大部分站点内容要么无法加载，要么需要长得离谱的时间。例如，我可以导航到首页或 /admin 页面，但这些页面的实际内容（帖子、管理员图表或其他标签页）似乎都无法加载。我检查了系统状态，CPU 使用率一直徘徊在 2% 左右，流量和磁盘占用也极低。我的用户群大概只有 10 人左右，因为我还在尝试和设置阶段。考虑到这一点，这种行为显得非常奇怪。

根据 app.yml，我安装的插件只有 docker\_manager 和 discourse-signatures。我是唯一的管理员用户，可以确认站点设置已经很久没有更改了。

我的第一个想法是重启机器，我也尝试过使用 git pull 和 ./launcher rebuild app 手动更新。我不确定在这个过程中应该关注哪些迹象来判断是否发生错误，但重建似乎完成了，之后可以再次访问站点，但版本仍然停留在 2.5.0.beta4。同样，尝试访问 /admin/update 页面最终也会超时。这一切都相当奇怪，因为站点可以说是“功能正常”的——我只是不太了解其运作方式，无法真正诊断问题。我找到了 discourse-doctor 工具并可以运行它，但我不确定它具体能完成什么——比如成功发送邮件等。

唯一可能表明存在问题的情况是，昨晚我收到了一封来自论坛的邮件，通知我对某条帖子有回复。当我导航到“最新帖子”分类时（在最终加载完成后），似乎没有任何迹象表明该帖子存在，因为“最新”中的主题概览并未显示该用户最后发布了这条帖子。我无法加载任何帖子的内容，因此无法确切检查。所以，数据库中可能存在某些错误或数据不一致？我不确定这种情况如何会蔓延导致整个站点的大部分内容无法加载，或者这是否值得深入追查。

对于这类问题，大家有什么建议的排查起点吗？如果您花时间阅读了，非常感谢！🙂

---

<div class="post-metadata">

**Author:** ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)\
**Post date:** [2020年十一月21日 02:04 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/2 "2020-11-21T02:04:06Z")

</div>

嗨，tuckie！欢迎！

看来你做的都是对的。

如果你能更新的话，我强烈建议你更新一下——你的版本已经落后最新版很多了。但请务必先下载备份，以免丢失任何数据。

你能通过 SSH 登录并检查一下是否存储空间不足吗？

```
df -h

```

无论如何，检查存储空间是首要步骤。运行以下命令可以清除占用空间的陈旧容器：

```
./launcher cleanup app

```

然后，尝试将应用重新构建到最新版本。如果这次能正常运行且控制台没有显示任何错误，请告诉我们。

```
./launcher rebuild app

```

---

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十一月21日 02:48 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/3 "2020-11-21T02:48:52Z")

</div>

感谢迅速响应。  
当前挂载在 /dev/vda1 并挂载到 / 的驱动器显示约有 7.9 GB 可用空间。我对 Ubuntu 上其他分区的使用情况及其对运行的影响并不太了解（Discourse 是运行在容器中，对吧？），其余部分看起来是引导分区等。论坛目前总共只有约 30–40 篇帖子，处于测试阶段，因此在这方面似乎没有风险。清理操作已成功释放约 4 GB 额外空间。

至于应用重建，我实际上已经运行过几次了。在过程中我没有看到任何明显的警告信息，但同样地，完成后也没有看到任何表示“成功”的提示——我也不清楚应该留意哪些错误或警告行。它会先移除旧容器，然后运行 Docker 容器，之后便结束。我刚刚又运行了一次，但当我访问网站时，它仍然提示有可用更新，而且报告当前版本（仍是 2.5.0.beta4）和目标更新版本所需的时间极其漫长。

部分问题在于，由于响应时间过长或加载失败，我似乎也无法正常使用管理工具。例如，导航到“备份”选项卡时，加载动画会无限期地持续显示。出于好奇，我在备份选项卡上打开了浏览器控制台，发现浏览器尝试获取 JavaScript 文件，但所有文件都加载失败，且是一个接一个地缓慢失败。

如果能够通过 SSH 操作备份，那在这里将会非常有用。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2020年十一月21日 12:55 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/4 "2020-11-21T12:55:31Z")

</div>

这听起来像是网络问题。您使用的是 Cloudflare 吗？（如果是，请关闭橙色云朵图标）。

您可能在 DigitalOcean 遇到了“嘈杂的邻居”问题，因此可以为他们提交工单。

您提到已经进行了重建，但版本却没有变化，这说不通。我认为您需要执行 PostgreSQL 12 的升级。在进行重建时，您没有看到任何相关提示吗？

---

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十一月21日 20:24 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/5 "2020-11-21T20:24:11Z")

</div>

我在 DigitalOcean 上运行，推测可能会出现类似情况，但我不确定这是否会导致如此持续或持久的这个问题。我认为更准确地描述该网站的问题应该是：页面通常能够加载模板或“外壳”，但除此之外，获取任何实际内容时似乎会一直无限加载。

至于重建或版本变更——确实可能发生此类错误，但我不清楚如何有效地解析它，也不太确定应该寻找什么。我刚才再次运行重建时，看到输出滚动中有一行类似“postgres installed”的信息。我不确定这是否是因为容器内部正在进行的操作，但例如 `./launcher rebuild app | grep 'postgres'` 似乎无法过滤出任何内容，`./launcher rebuild app > output.txt && grep 'postgres' output.txt` 也不行。output.txt 中确实包含一些信息，但似乎并不完整？至少它的结尾与实际控制台输出不一致。

---

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十二月1日 18:58 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/6 "2020-12-01T18:58:25Z")

</div>

你好，希望我的提问没有违反关于“顶贴”等规定，但我还是希望能得到一些帮助。上周某个时候，情况似乎变得更糟了？我无法确定具体是什么时候发生的，因为上周假期期间我并没有处理这个问题，但现在我完全无法连接到我的网站了。我仍然可以成功 ping 通 IP 地址，且该 IP 也能正确解析到对应的域名，因此看起来也不是域名服务器的问题。

现在使用 Firefox 访问该网站会出现以下提示：

```plaintext
https://aregames.art/ 站点发生了无法修复的网络协议违规。

由于检测到数据传输错误，无法显示您尝试查看的页面。

```

我无法从浏览器开发者工具中找到太多有用的信息，因为它似乎没有对 GET 请求返回任何响应。

自发现这个新问题以来，我已经：

- 多次运行了重建（rebuild）操作
- 将 Ubuntu 系统升级到 20.04
- 再次执行了重建

该网站实际上仅用于测试平台约一个月，我也愿意承认当初没有及时更新软件可能不是个好主意。如果需要，我也愿意从头重新安装 Discourse。当然，如果能找到一种方法在修复问题的同时保留站点配置、用户和帖子内容，那再好不过了。但我真正需要保留的只是在主题编辑器中编写的一些自定义 CSS。如果知道这些 CSS 存储在哪里，以便我可以将其复制到新环境中，那将非常有帮助。我（不负责任地）没有在本地保存任何更新后的版本。

另外，关于重建过程，我仍然不确定如何从中解析出任何潜在问题。据我所知，该过程会运行并顺利完成，无需任何输入，完成后最后几行输出涉及使用 YAML 中的配置启动 Docker 容器。我理解“重建完成”和“成功完成”之间存在区别，但我不确定应该关注哪些内容，或者在重建过程中出现问题时该如何诊断。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2020年十二月1日 19:17 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/7 "2020-12-01T19:17:08Z")

</div>

服务器是否正常运行？你能通过 SSH 连接吗？

如果可以，请重启服务器，然后重新构建 Discourse。

如果重启和重建后服务器仍无法运行，请将重建输出粘贴到这里，我们将协助你解决问题。

---

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十二月1日 19:51 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/8 "2020-12-01T19:51:53Z")

</div>

是的，我可以正常通过 SSH 连接，这也是我每次运行重建操作的方式。不，重建后仍然无法访问。即使重建后，我注意到 ifconfig 显示 Docker 容器有一个与服务器 IP 不同的 IP 地址，但我无法从系统网页浏览器访问该地址。我不确定这是否是预期行为。`./launcher rebuild app > output.txt` 似乎只输出了部分实际控制台输出，但我也可以提供这部分内容。

[https://paste.ubuntu.com/p/NRTDzF44zK/（简短输出文件）](https://paste.ubuntu.com/p/NRTDzF44zK/%EF%BC%88%E7%AE%80%E7%9F%AD%E8%BE%93%E5%87%BA%E6%96%87%E4%BB%B6%EF%BC%89)  
[https://paste.ubuntu.com/p/CZKjCb4qBV/（从终端复制的完整输出）](https://paste.ubuntu.com/p/CZKjCb4qBV/%EF%BC%88%E4%BB%8E%E7%BB%88%E7%AB%AF%E5%A4%8D%E5%88%B6%E7%9A%84%E5%AE%8C%E6%95%B4%E8%BE%93%E5%87%BA%EF%BC%89)

我看到 PostgreSQL 返回了几条错误消息，提示 ‘discourse’ 数据库已存在，这是否需要进一步调查？

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2020年十二月1日 20:39 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/9 "2020-12-01T20:39:24Z")

</div>

> [@twuky](#):
>
> `https://aregames.art/`

你的 DNS 设置正确吗？

```plaintext
host aregames.art 
aregames.art 的地址为 198.54.117.200
aregames.art 的地址为 198.54.117.199
aregames.art 的地址为 198.54.117.198
aregames.art 的地址为 198.54.117.197

```

为什么有这么多 IP 地址？你的服务器 IP 是什么？

---

<div class="post-metadata">

**Author:** ![twuky](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/twuky/32/200756_2.png) [@twuky](https://meta.discourse.org/u/twuky)\
**Post date:** [2020年十二月1日 22:32 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/10 "2020-12-01T22:32:14Z")

</div>

哇，这其实挺有启发性的——我竟然让域名过期了，而且巧合的是，就在我开始遇到这些问题的同一天发生的……我原本打算更换服务商，所以在那边关闭了自动付款，结果日期就悄悄过去了，我想。看来这些 IP 地址确实与某种域名停放服务有关。我刚刚已经续期了，所以也许它会重新应用正确的记录——不过我不确定这通常需要多久，目前主机仍然报告这些 IP。根据文档，我应该无法直接通过 IP 连接，所以我想我暂时无法测试这是否已经生效。感谢指出这一点。

话虽如此，我仍然对我最初遇到的问题有些困惑——我访问的是否是页面的缓存版本？由于名称服务器的问题，内容请求是否无法通过？有些内容，比如线程中的帖子，或者打开“最新帖子”时的帖子列表，最终还是会加载出来，只是需要很长时间。

更新：正如你上面提到的，`host aregames.art` 似乎再次解析到了正确的 IP 和邮件服务器。我通过 discourse-setup 脚本确认它接受 DNS 指向该 IP。看起来设置脚本也运行了重建。然而，访问该 URL 时却显示“找不到服务器”。直接通过 443 端口访问 IP 则返回 nginx 400 错误请求，这多少算是个进展。

再次编辑：我不得不清除浏览器缓存——在无痕模式下，网站完全正常加载。一切看起来又恢复正常了！我想……支付网站费用就是解决这个问题的方案。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2020年十二月2日 00:14 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/11 "2020-12-02T00:14:36Z")

</div>

> [@twuky](#):
>
> 我访问的是页面的缓存版本吗？是否因为名称服务器问题导致内容请求未能正常通过？

是的，您使用的是缓存视图。

我们在 Discourse 2.6 中新增了一项功能，当处于该视图时，会为文档添加一个特定的 CSS 类，但目前我们尚未提供默认的 UI 元素。

您可以在 [Offline Indicator](https://meta.discourse.org/t/offline-indicator/123000?u=falco) 了解更多相关信息。

---

<div class="post-metadata">

**Author:** ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)\
**Post date:** [2021年一月1日 00:14 UTC](https://meta.discourse.org/t/as-of-last-night-site-is-responding-very-poorly/170822/12 "2021-01-01T00:14:38Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
