作业异常错误

我有一些 Discourse 实例,它们运行了很长时间都没有问题。最近我从 DO 迁移到了 Hetzner。作为迁移的一部分,我终于开始进行监控,目前使用的是 Uptime。我使用 Ubuntu USG 加固了服务器。

7 个实例中有 3 个每天在同一时间会例行离线 5 到 15 分钟。也许这在 DO 上也发生过,但由于没有监控,谁知道呢。

所有站点都运行着相同的官方插件。
我怀疑是内存问题,于是将一个实例从 2 CPU 2GB RAM 升级到 3 CPU 4GB RAM。
db_shared_buffers: “256MB” 未更改
UNICORN_WORKERS: 4 未更改

增加的性能似乎有所帮助,但一个非常安静的站点是否需要这么多资源?

任何想法或建议都将不胜感激。

事件序列总是以 Job exception error 开始

Message (4 copies reported)

Job exception: Waited 1.0 seconds

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/buffered_io.rb:214:in `block in fill_buffer'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/buffered_io.rb:197:in `fill_buffer'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/buffered_io.rb:187:in `ensure_remaining'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/buffered_io.rb:152:in `getbyte'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/resp3.rb:113:in `parse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection/resp3.rb:50:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/ruby_connection.rb:96:in `read'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/connection_mixin.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client.rb:316:in `block (2 levels) in call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client/middlewares.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client.rb:315:in `block in call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client.rb:721:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.0/lib/redis_client.rb:314:in `call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/client.rb:90:in `call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.0/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:152:in `block in send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/strings.rb:191:in `get'
/var/www/discourse/lib/discourse_redis.rb:144:in `public_send'
/var/www/discourse/lib/discourse_redis.rb:144:in `block (3 levels) in <class:DiscourseRedis>'
/var/www/discourse/lib/discourse_redis.rb:29:in `ignore_readonly'
/var/www/discourse/lib/discourse_redis.rb:144:in `block (2 levels) in <class:DiscourseRedis>'
/var/www/discourse/lib/sidekiq/pausable.rb:19:in `paused?'
/var/www/discourse/lib/sidekiq/pausable.rb:105:in `paused?'
/var/www/discourse/config/initializers/100-sidekiq.rb:98:in `block (3 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler.rb:74:in `block (2 levels) in start'

随后很快出现类似以下内容:

Failed to warm up pretty text: terminated /var/www/discourse/lib/discourse_js_processor.rb:89:in `call' /var/www/discourse/lib/discourse_js_processor.rb:89:in `block in v8_call' /var/www/discourse/lib
Message (2 copies reported)

Failed to warm up pretty text: terminated
/var/www/discourse/lib/discourse_js_processor.rb:89:in `call'
/var/www/discourse/lib/discourse_js_processor.rb:89:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:88:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:88:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:113:in `perform'
/var/www/discourse/lib/pretty_text.rb:34:in `apply_es6_file'
/var/www/discourse/lib/pretty_text.rb:41:in `block in ctx_load_directory'
/var/www/discourse/lib/pretty_text.rb:39:in `each'
/var/www/discourse/lib/pretty_text.rb:39:in `ctx_load_directory'
/var/www/discourse/lib/pretty_text.rb:81:in `create_es6_context'
/var/www/discourse/lib/pretty_text.rb:135:in `block in v8'
/var/www/discourse/lib/pretty_text.rb:133:in `synchronize'
/var/www/discourse/lib/pretty_text.rb:133:in `v8'
/var/www/discourse/lib/pretty_text.rb:176:in `block in markdown'
/var/www/discourse/lib/pretty_text.rb:678:in `block in protect'
/var/www/discourse/lib/pretty_text.rb:678:in `synchronize'
/var/www/discourse/lib/pretty_text.rb:678:in `protect'
/var/www/discourse/lib/pretty_text.rb:175:in `markdown'
/var/www/discourse/lib/pretty_text.rb:301:in `cook'
/var/www/discourse/lib/discourse.rb:960:in `after_fork'
config/unicorn.conf.rb:197:in `block in reload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:684:in `init_worker_process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:721:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:561:in `maintain_worker_count'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:294:in `join'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in block in error' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in block in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in each' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in error' /var/www/discourse/lib/discourse.rb:962:in rescue in after_fork’
/var/www/discourse/lib/discourse.rb:958:in after_fork' config/unicorn.conf.rb:197:in block in reload’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:684:in init_worker_process' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:721:in worker_loop’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in spawn_missing_workers' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:561:in maintain_worker_count’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:294:in join' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/bin/unicorn:128:in <top (required)>’
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in load' /var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in

1 个赞

因此,我再次提醒自己,为什么支付专业人士通常是一件好事。这种服务器加固工作并不容易。我仍在努力学习更多,但目前在没有 cis_level1_server 审计和修复工作的情况下,在全新服务器上重新安装 Discourse 可以使网站恢复 Discourse 通常的无错误运行。
开箱即用的 cis_level1_server tailoringfile.xml 也与 Ghost 不太兼容,尽管我能够通过审计/修复方法让我的 Mailcow 工作。

简单的加固配合适当和频繁的更新可能就足够了。