Ember jquery 内存溢出当输入响应时

在 2.7.0beta4 11f28e3eb3 版本中,输入回复会导致客户端浏览器卡死,开发控制台显示 Ember-jquery 内存不足。

我已禁用 Presence 功能、隐藏预览、启动新的 web_only 镜像并创建新容器,但错误依旧。

S3 上传和静态内容均使用 CDN,且已清除 CDN 缓存。

同时,error.log 中出现了大量如下错误信息:

Feb 19 02:27:42 discourse error.log 2021/02/19 10:27:42 [alert] 677#677: 768 worker_connections are not enough

如果尝试安全模式,问题是否还会出现?

your.site.com/safe-mode

安全模式下,勾选所有复选框后会出现“哎呀”页面:

哎呀

驱动此讨论论坛的软件遇到了意外问题。对于由此带来的不便,我们深表歉意。

有关该错误的详细信息已被记录,并生成了自动通知。我们将对此进行检查。

无需采取进一步操作。但是,如果错误持续存在,您可以通过在网站的反馈类别中发布讨论主题,提供包括重现错误步骤在内的更多详细信息。

我有点困惑——这指向的是服务器问题,但你其余的描述都是关于客户端问题的。安全模式失败意味着还存在额外的服务器端问题。

你能截一张“内存不足”错误的图吗?

尝试访问 /logs。那里有什么有趣的内容吗?

你的数据库设置有什么异常吗?

error.log 中的消息可能来自我转储 CDN 缓存并触发拉取操作。

几个小时前一切运行良好。我在测试版发布时启动了一个新镜像,此前我也曾启动过一个镜像以纳入 Falco 修复的 S3 CDN 头像徽章问题。

我刚刚启动了一个新镜像并部署上线。

当你在回复框中输入单个字符时,界面会冻结。

回溯堆栈:

plugins/discourse-feature-voting/plugin.rb:165:in `reached_voting_limit?'
plugins/discourse-feature-voting/plugin.rb:178:in `votes_exceeded'
(eval):58:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
activesupport (6.0.3.3) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.0.3.3) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.0.3.3) lib/active_support/core_ext/object/json.rb:42:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/application_controller.rb:571:in `preload_current_user_data'
app/controllers/application_controller.rb:382:in `preload_json'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:428:in `block in make_lambda'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:200:in `block (2 levels) in halting'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:201:in `block in halting'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:513:in `block in invoke_before'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:513:in `each'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:513:in `invoke_before'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:110:in `block in run_callbacks'
app/controllers/application_controller.rb:358:in `block in with_resolved_locale'
i18n (1.8.9) lib/i18n.rb:314:in `with_locale'
app/controllers/application_controller.rb:358:in `with_resolved_locale'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:139:in `run_callbacks'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.3.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `instrument'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (6.0.3.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.0.3.3) lib/abstract_controller/base.rb:136:in `process'
actionview (6.0.3.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.1) lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method'


actionpack (6.0.3.3) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.0.3.3) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
actionpack (6.0.3.3) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:834:in `call'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/cookies.rb:648:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.9.5) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.0.3.3) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.0.3.3) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/request_id.rb:27:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/host_authorization.rb:76:in `call'
rack-mini-profiler (2.3.1) lib/mini_profiler/profiler.rb:373:in `call'


message_bus (3.3.4) lib/message_bus/rack/middleware.rb:61:in `call'
lib/middleware/request_tracker.rb:177:in `call'
railties (6.0.3.3) lib/rails/engine.rb:527:in `call'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `public_send'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (5.8.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (5.8.0) lib/unicorn/http_server.rb:732:in `worker_loop'
unicorn (5.8.0) lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
unicorn (5.8.0) lib/unicorn/http_server.rb:144:in `start'
unicorn (5.8.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

安全模式现在似乎可以正常工作了。

好的,我想我找到问题了。

有一个主题组件似乎是导致问题的原因。

我移除了该组件,现在它已恢复正常。

您是否考虑过迁移到我们的托管服务?这样我们可以分担部分工作,您还可以获得专属支持渠道 :slight_smile:

我们考虑过这一点,但我认为托管服务的成本无法通过自托管和自主支持的成本来抵消。

每月的页面浏览量以及管理员/版主的人数,会让我们落入“索取报价”的类别,而不是我们目前为 Bunny.net(CDN)、Backblaze B2 以及 DigitalOcean 提供的免费额度(用于 droplet)所支付的费用。Discourse 本身维护起来并不困难,只是长期以来被忽视了,因为它是由一位已不再属于团队的人员搭建的,且缺乏关于为何如此搭建以及具体做了什么的明确说明。鉴于我们现在已将资源整理到存储桶中,现在可能正是彻底重构整个设置的时候了。