大家好。
希望有人能帮我解决我们论坛目前遇到的一个问题:
https://forum.combustionpunks.co.uk
这是个很长的故事……但我想提供所有可能有助于解决问题的信息,请大家耐心看完。过程中大家可能会注意到,我对 Ubuntu 的经验不多:
一切运行得非常顺利,直到昨天傍晚。
我们正在进行小幅品牌重塑,更新了 Logo 等,所以昨天我进入管理后台上传新 Logo。同时我注意到我们的版本有些落后,于是按照这里的说明手动执行了更新:
例如:
cd /var/discourse
git pull
./launcher rebuild app
一切似乎都正常,更新完成,新 Logo 上传并显示正常。我尝试了几个主题,又切回原来的主题,然后去参加了与论坛相关的社交活动……没错,我和朋友们去酒吧吃饭了。
大约 30 分钟后,在外面时我们发现论坛离线了……有点惊慌,但随后发现 Digital Ocean 出现了问题,于是稍微放松了一些。
大约两小时后回来,Digital Ocean 的问题已解决,但论坛仍然离线……没关系,我重启了 Droplet,一切又正常恢复了……但大约 30 分钟后,论坛又离线了。
接下来,我认为最好清除所有待处理的更新,于是尝试用以下命令更新 Docker:
wget -qO- https://get.docker.com/ | sh
但这似乎没什么效果。
我重新构建了应用:./launcher rebuild app
我认为并没有更新成功,因为在重新构建应用时,系统提示:
docker version 17.05.0-ce 已弃用,而运行 docker version 时显示的版本仍是 17.05.0-ce。
随后注意到,就在论坛即将离线之前,我们收到了类似以下的消息:
Out of memory: kill process (convert) or sacrifice child
Out of memory: kill process (ruby) or sacrifice child
我运行了 htop,
发现有很多 sidekiq 进程实例。我找到一篇关于减少同时重制图片线程数量的帖子,于是将线程数从 80 减少到 2,但问题依然存在。
发现有 convert 进程正在对 var/www/discourse/public/uploads/default/original/ 目录下的 JPEG 文件进行处理(我不知道如何显示完整的字符串,以查看这些进程具体在处理哪些图片)。
CPU 使用率达到 100%,进程为:Ruby var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn -E
更新了操作系统,现在运行的是 Ubuntu 18.04。
Docker 仍停留在 17.05.0-ce 版本。
将 Droplet 从 2GB 内存、1 核 CPU、50GB 存储(10 美元)升级到 3GB 内存、1 核 CPU、50GB 存储(15 美元)。
问题依旧。
重启 Droplet 或重新构建 Discourse 只能让论坛短暂恢复运行(10 到 30 分钟),之后又会离线。
非常感谢大家能提供任何帮助,提前致谢!
Matt
pfaffman
(Jay Pfaffman)
2
不久前,图像压缩方式发生了一些变化。您可能会因为正在处理大量图像而感到系统负载较高。这种情况应该很快就会缓解,但如果您有大量图像,可能需要一些时间。您可以运行
ps -ax
或
top
来查看当前正在运行的进程。按 q 键退出 top。
谢谢 @pfaffman,我会让它再运行一会儿,看看能否处理完并逐渐恢复正常。
您已经完成了我们建议的大部分故障排除步骤,做得很好。您的论坛上是否有大量图片?
我建议您有机会时尽快更新 Docker。
pfaffman
(Jay Pfaffman)
5
更新时,请记住在升级 Docker 后重启系统。系统不会发出警告,我昨天升级 Docker 后,直到想到重启之前,Docker 一直无法正常工作。
非常感谢各位。
问题仍然存在
ruby /vazr/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn -E 当前占用 98% 的 CPU,论坛无法访问。
图片数量——不确定该怎么形容,但确实不少,尽管我们并不是一个大型论坛。df 显示 50GB 空间已使用 80%,而在 Discourse 管理面板中显示上传量为 5.7GB。
我尝试的 docker 更新命令似乎没有任何效果。我找到了在 Ubuntu 18 上安装的说明,但没有更新的步骤……我应该按照安装说明操作吗?
在今早重启 Droplet 之前,没有显示任何 convert 进程;重启后现在有 5 个 convert 进程,占用了约 50% 的 CPU 和内存。其余资源似乎被 Ruby 和 Sidekiq 进程间歇性占用,处理器和内存仍然持续被占满。
Convert 进程仍因内存不足而被终止。
大家认为是否还有待处理的队列任务?进一步调整 Droplet 规格是否有助于处理这些队列?论坛目前每次只能在线最多 30 分钟,有时更短。
未能解决此问题,正在增加 Droplet 大小,以查看是否能完成图片调整大小(如果这是其正在执行的操作)。
pfaffman
(Jay Pfaffman)
8
调整大小后,请务必运行 discourse-setup 以调整内存参数并重新构建(或销毁并重新启动)。