核心转储和无效指令表明在低级别(CPU、内存)出现了问题。
我不是硬件专家,但这款 CPU 是 12 年前上市的,我怀疑它可能太老了(即它试图运行假定为较新 CPU 的已编译代码)。
核心转储和无效指令表明在低级别(CPU、内存)出现了问题。
我不是硬件专家,但这款 CPU 是 12 年前上市的,我怀疑它可能太老了(即它试图运行假定为较新 CPU 的已编译代码)。
我们确实考虑过这个问题,但鉴于它在过去三年中运行一直良好,是什么更新了堆栈中突然需要更新的指令?(另外,是什么/哪个指令?)
FEATURE: Add support for clear_every parameter in Redis backend (#309) · discourse/message_bus@1baa1ea · GitHub 是否会在 Redis 中触发一些不同的行为?![]()
我还想补充一点,上周五主要版本升级已顺利完成,整个周末运行得毫无问题。我甚至在周日进行了一次成功的更新。如果原因是 CPU(这是可以理解的),那么在主要版本升级时就会出现此错误。
但也许自周一以来发生了一些变化……
这很有可能,它在消息总线代码的 JSON 解析例程中崩溃,尽管您提到的更改已有 4 个多月了。
-- C 级回溯信息 -------------------------------------------
/usr/local/lib/libruby.so.2.7(rb_vm_bugreport+0x50a) [0x7f30fc64839a] vm_dump.c:755
[0x7f30fc4b9b47]
/usr/local/lib/libruby.so.2.7(sigill+0x3b) [0x7f30fc5c4f0b] signal.c:962
/lib/x86_64-linux-gnu/libc.so.6(0x7f30fc283d60) [0x7f30fc283d60]
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/oj-3.13.15/lib/oj/oj.so(oj_parse2+0x4f9) [0x7f30f3a68339] /usr/lib/gcc/x86_64-linux-gnu/10/include/smmintrin.h:649
I, [2022-07-05T10:03:30.513303 #1] INFO -- : cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-4.2.0/lib/message_bus/codec/json.rb:11: [BUG] 0x00007f30f3a68339 处的非法指令
ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]
-- 控制帧信息 ----------------------------------------------
c:0030 p:---- s:0162 e:000161 CFUNC :parse
c:0029 p:0013 s:0157 e:000156 METHOD /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-4.2.0/lib/message_bus/codec/json.rb:11
c:0028 p:0037 s:0152 e:000151 METHOD /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-4.2.0/lib/message_bus.rb:648
c:0027 p:0020 s:0144 e:000143 BLOCK /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-4.2.0/lib/message_bus.rb:766
c:0026 p:0082 s:0135 e:000134 BLOCK /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-4.2.0/lib/message_bus/backends/redis.rb:330
c:0025 p:0024 s:0130 e:000129 BLOCK /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/subscribe.rb:46
c:0024 p:0034 s:0124 e:000123 BLOCK /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.5.1/lib/redis/client.rb:183 [FINISH]
是的……所以它应该已经在周日出现了。![]()
查看日志,似乎在尝试启动 Redis 时已经有另一个 Redis 实例在运行。
这会是问题吗?
102:C 05 Jul 2022 09:53:34.597 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
102:C 05 Jul 2022 09:53:34.597 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=102, just started
102:C 05 Jul 2022 09:53:34.597 # Configuration loaded
102:M 05 Jul 2022 09:53:34.598 * monotonic clock: POSIX clock_gettime
102:M 05 Jul 2022 09:53:34.599 * Running mode=standalone, port=6379.
102:M 05 Jul 2022 09:53:34.599 # Server initialized
102:M 05 Jul 2022 09:53:34.599 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
102:M 05 Jul 2022 09:53:34.599 * Loading RDB produced by version 6.2.6
102:M 05 Jul 2022 09:53:34.599 * RDB age 1972 seconds
102:M 05 Jul 2022 09:53:34.599 * RDB memory usage when created 60.60 Mb
102:M 05 Jul 2022 09:53:34.949 # Done loading RDB, keys loaded: 8005, keys expired: 9.
102:M 05 Jul 2022 09:53:34.950 * DB loaded from disk: 0.351 seconds
102:M 05 Jul 2022 09:53:34.950 * Ready to accept connections
129:C 05 Jul 2022 09:53:45.056 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
129:C 05 Jul 2022 09:53:45.056 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=129, just started
129:C 05 Jul 2022 09:53:45.056 # Configuration loaded
129:M 05 Jul 2022 09:53:45.057 * monotonic clock: POSIX clock_gettime
129:M 05 Jul 2022 09:53:45.057 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
129:M 05 Jul 2022 09:53:45.057 # Failed listening on port 6379 (TCP), aborting.
102:signal-handler (1657015415) Received SIGTERM scheduling shutdown...
102:M 05 Jul 2022 10:03:35.245 # User requested shutdown...
102:M 05 Jul 2022 10:03:35.245 * Saving the final RDB snapshot before exiting.
102:M 05 Jul 2022 10:03:39.882 * DB saved on disk
102:M 05 Jul 2022 10:03:39.882 # Redis is now ready to exit, bye bye...
这对于 launcher rebuild app 来说是很正常的——它不会影响任何东西(据我所知,至少是这样……)。
代码路径也可能在某些数据存在或不存在时触发。也许有问题的代码存在,但它没有被执行。
我将尝试对最近的提交进行一些准二分查找,看看是否能将其缩小到一个特定的近期更改。这需要“一些时间”…… ![]()
编辑:
好的,第一个带有非法指令的坏提交是 https://github.com/discourse/discourse/commit/4c69619334d01b9139b78039eb9d8a0cb2e1be57,它链接到 Fix NaN object dump issue · ohler55/oj@f0122cf · GitHub
一些之前的提交也无法构建,但出现了不同的问题(这也似乎是暂时的……):
I, [2022-07-05T12:14:35.377926 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
102:M 05 Jul 2022 12:14:44.308 * 300 秒内更改 100 次。正在保存...
102:M 05 Jul 2022 12:14:44.312 * 后台保存由 pid 709 启动
709:C 05 Jul 2022 12:14:45.166 * DB 已保存到磁盘
709:C 05 Jul 2022 12:14:45.169 * RDB:copy-on-write 使用 1 MB 内存
102:M 05 Jul 2022 12:14:45.217 * 后台保存已成功终止
I, [2022-07-05T12:14:46.192386 #1] INFO -- :
I, [2022-07-05T12:14:46.193317 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile'
缺少 yarn 包:
包:ember-cli-deprecation-workflow
* 指定:^2.1.0
* 已安装:(未安装)
运行 `yarn` 来安装缺少的依赖项。
堆栈跟踪和错误报告:/tmp/error.dump.ccfa3d8342a442ee6860db37ce7c7330.log
在 /var/www/discourse/app/assets/javascripts/node_modules/ember-cli-dependency-checker 中的 ember-cli-dependency-checker 的构造函数中发生错误
error 命令因退出代码 1 而失败。
好发现,它确实在 oj gem 中崩溃了。
3.13.15 版本还包含此提交,该提交切换到使用 SSE 4.2 指令以提高性能。而这些指令不支持 AMD Opteron 41xx 处理器。
所以我们又回到了
恕我直言,gem 作者选择将其作为编译时决定,这很糟糕。
太好了。oj 更新日志中未提及的另一项更改……![]()
所以,如果 gem 在安装过程中不进行本地编译(因此我们有可能通过 OJ_USE_SSE4_2 使其正常工作),那么它似乎需要迁移服务器……![]()
编辑:gem 不分发任何预编译对象,所以这应该是可行的——那么下一个问题是为什么它会在不支持 SSE4.2 的系统上进行编译。
我们当前的基础镜像包含 3.13.14 版本,因此它将在您的系统上进行编译。
您能否尝试使用来自 此提交 的基准测试脚本重现该错误:
○ → docker run --rm -it -u discourse discourse/base:2.0.20220621-0049 bash
discourse@313d7af3be39:/$ cd
discourse@313d7af3be39:~$ gem install --user pry benchmark-ips oj
…
Successfully installed oj-3.13.15
5 gems installed
discourse@313d7af3be39:~$ /home/discourse/.local/share/gem/ruby/2.7.0/bin/pry
[1] pry(main)> require 'benchmark/ips'
require 'oj'
def json(string)
"\"#{string}\""
end
Benchmark.ips do |x|
x.warmup = 5
x.time = 20
json_0 = json('a' * 0)
json_64 = json('a' * 64)
json_128 = json('a' * 128)
x.report('Oj.load [0]') { Oj.load(json_0) }
x.report('Oj.load [64]') { Oj.load(json_64) }
x.report('Oj.load [128]') { Oj.load(json_128) }
end;
您还可以使用以下命令检查它是否是使用有问题的指令编译的:
discourse@313d7af3be39:~$ objdump -d /home/discourse/.local/share/gem/ruby/2.7.0/gems/oj-3.13.15/lib/oj/oj.so | grep -C3 pcmpestri
2e32b: 0f 82 b5 03 00 00 jb 2e6e6 <oj_parse2+0x8a6>
2e331: 66 0f 6f 05 77 d6 01 movdqa 0x1d677(%rip),%xmm0 # 4b9b0 <exp_plus+0x330>
2e338: 00
2e339: 66 0f 3a 61 07 00 pcmpestri $0x0,(%rdi),%xmm0
2e33f: 83 f9 10 cmp $0x10,%ecx
2e342: 74 dc je 2e320 <oj_parse2+0x4e0>
2e344: 48 63 c9 movslq %ecx,%rcx
如果是这样,这可能需要向 oj gem 项目报告。
我想进一步研究这个问题,但是 1) 我想避免更多的停机时间(至少在一段时间内;我知道上面的内容不涉及停机时间,但我可能会忍不住尝试其他方法)以及 2) 当这个发生变化时:
到 3.13.15,并且 Discourse 的 base 镜像继承了相同的最低 CPU 微架构要求,那么当前的服务器将无法维持(除非有办法绕过它,例如单独(重新)安装 gem,例如作为预代码钩子的一部分,但我猜这对大多数人来说有点麻烦)。
这也引发了一个问题:无论如何,硬件支持的合理截止日期应该是多久;不应该期望支持 32 位 CPU,所以 SSE4.2 可能是现代软件的一个合理的“新最低要求”。
确实,我已经在内部提出了这个问题。
![]()
嘿!
感谢您对此事的关注。我在 Intel Atom N2800(2011 年末)上也遇到了同样的问题。
您认为是否有办法解决此问题,还是我现在唯一能做的就是迁移到更新的硬件?
谢谢!
我的论坛因为今天收到的更新提示而陷入了停滞状态。我从未收到过任何关于CPU即将过时的警告,这种情况突然发生……很糟糕。所有可用的服务器都配置相同以保持一致性,并且都使用相同的CPU。
AMD Athlon™ II X2 B22 Processor
在目前的经济状况下,即使有时间,也不可能突然购买新服务器、进行配置等。
在情况得到更好理解之前,我该如何撤销这次更新?论坛宕机,我现在甚至无法联系到我的用户。谢谢。
如果您使用的是 Docker 部署方法,您可能有一个可以重新启动的旧容器(请参阅 docker images 和/或 docker ps -a)。
您还可以通过编辑 app.yml 并将版本设置为更改之前的提交来覆盖用于构建 Discourse 实例的提交,然后重新构建:
params:
version: adb7fa5e2fc51308efc9fc4ee57ecb1c15a85cfa
如果在此之后更新,Discourse 仍会再次中断,鉴于自那时以来已发布的安全更新(尽管对大多数实例而言,利用的可能性似乎非常有限),这并非理想情况。
一种选择(我还没有尝试过)是单独安装 oj gem,并希望它能使用正确的 CPU 功能(或缺乏这些功能)来触发编译。
我曾计划在 app.yml 中尝试这样做:
hooks:
before_code:
- exec:
cmd:
- gem install oj
但我没有时间进行更多的论坛停机时间了。
该安全更新与我无关,因为我不在共享托管环境中。我不确定如何解读 Docker 信息。这是 ps:
37c258b23221 local_discourse/app “/sbin/boot” 3 个月前 已退出 (7) 3 小时前
这是镜像列表:
REPOSITORY TAG IMAGE ID CREATED SIZE
discourse/base 2.0.20220621-0049 a44ca4f67972 3 周前 2.65GB
local_discourse/app latest b5f2a8a39709 3 个月前 3.53GB
discourse/base 2.0.20220413-0411 ab71a5d97460 3 个月前 2.81GB
<none> <none> 58ba7d1c8d7a 3 个月前 3.74GB
discourse/base 2.0.20220224-2005 cd112601450a 4 个月前 2.84GB
<none> <none> d9cf1feb92fd 6 个月前 3.19GB
<none> <none> d53ee33f6fe1 6 个月前 3.19GB
<none> <none> 14f79500c49c 6 个月前 3.19GB
<none> <none> edff9b614f46 6 个月前 3.19GB
<none> <none> e2348b41f937 6 个月前 3.19GB
<none> <none> 42f6511b414c 6 个月前 3.19GB
<none> <none> 3086f92af2fe 6 个月前 3.19GB
<none> <none> 6ada029723ba 6 个月前 3.19GB
<none> <none> ca61149580d4 6 个月前 3.19GB
<none> <none> ce5ae3bb62ac 6 个月前 3.19GB
<none> <none> e9a5c1b1aed4 6 个月前 3.19GB
<none> <none> 6bb94ce1e01f 6 个月前 3.19GB
<none> <none> e1df4acbd927 6 个月前 3.19GB
<none> <none> 7e05a0b160c5 6 个月前 3.19GB
<none> <none> 979926f28a73 6 个月前 3.19GB
<none> <none> d055f9b01556 6 个月前 3.19GB
<none> <none> aa0c779093dc 6 个月前 3.19GB
discourse/base 2.0.20211118-0105 b6cc7cf8974a 7 个月前 2.58GB
discourse/base 2.0.20210528-1735 482386bf57af 13 个月前 2.36GB
<none> <none> e6011d2b206c 14 个月前 2.69GB
discourse/base 2.0.20210415-1332 30e4746e631e 15 个月前 2.23GB
<none> <none> 8066ac13b8c3 17 个月前 2.45GB
discourse/base 2.0.20201221-2020 c0704d4ce2b4 18 个月前 2.11GB
<none> <none> 043da6b3335d 2 年前 2.4GB
discourse/base 2.0.20200429-2110 dc919e1dae2c 2 年前 2.13GB
<none> <none> ff15472f4794 2 年前 2.79GB
discourse/base 2.0.20191013-2320 09725007dc9e 2 年前 2.3GB
<none> <none> f65391a062f0 2 年前 2.62GB
discourse/base 2.0.20190901-2315 10f636afbeaf 2 年前 2.29GB
<none> <none> 6944d06786b4 2 年前 2.31GB
discourse/base 2.0.20190625-0946 2b3a5b47565f 3 年前 1.93GB
<none> <none> 60b39deba7d2 3 年前 2.3GB
discourse/base 2.0.20190505-2322 ed87227f60d2 3 年前 1.91GB
<none> <none> cc5c0e56298c 3 年前 2.38GB
discourse/base 2.0.20190321-0122 7db99586b5b5 3 年前 1.97GB
<none> <none> b19f9a483788 3 年前 2.27GB
discourse/base 2.0.20190217 9c24db193c37 3 年前 1.92GB
hello-world latest fce289e99eb9 3 年前 1.84kB
<none> <none> 614db6988e9c 3 年前 2.25GB
<none> <none> 729b196da862 3 年前 2.25GB
<none> <none> 80584ec5ec01 3 年前 2.25GB
<none> <none> 0e2481aefed8 3 年前 2.25GB
<none> <none> 725d0c17a6bb 3 年前 2.25GB
<none> <none> 220bed95d236 3 年前 2.25GB
<none> <none> fca469dba597 3 年前 2.25GB
<none> <none> edab31d0ffce 3 年前 2.25GB
<none> <none> dbacaff2d35e 3 年前 2.25GB
<none> <none> 3d6a0453da1d 3 年前 2.25GB
<none> <none> fbf0529eb303 3 年前 2.25GB
<none> <none> 7a45443ae44c 3 年前 2.25GB
<none> <none> ad90d7f42416 3 年前 2.25GB
<none> <none> d61ea07d6084 3 年前 2.25GB
<none> <none> d393fd8b4de0 3 年前 2.25GB
discourse/base 2.0.20181031 ea31cd77735a 3 年前 1.88GB
你能试试 ./launcher start app 吗?