MongoDB 报错 Illegal instruction 的原因与解决

原先这个博客和其他的一些服务放在DMIT的SPro洛杉矶上,使用这一商家的这一产品的原因是其通过Cloudflare来清洗DDOS流量,且采用电信的CN2优化回程路由。这一路由让DMIT成为对中国大陆方向最佳的建站选择。

但是在更换到Azure的CDN以后,考虑到目前DDOS防护已经由Azure解决,源站服务器对大陆的优化也变的可有可无。加上DMIT过于昂贵,所以在购买了一个德国4核Ryzen+3G内存的服务器,成本仅为原先的三成。

在迁移服务器的过程中,有一个项目需要使用MongoDB,于是去mongodb官网找到了他们发布的debian包。我个人比较喜欢安装新版本的软件,看到MongoDB发布6.0+以后便打算安装最新的版本。

但是在安装完成之后,却发现MongoDB服务一直未启动,使用”mongod”指令得到”Illegal instruction”的报错。

问题原因

在前往MongoDB相关论坛查询后得知,从MongoDB 5.0.0版本开始,就需要CPU支持AVX指令集。目前绝大部分CPU都支持这一指令集,使用相关命令查看服务器的指令集列表,发现缺少这一指令集。

root@*:*# cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 107
model name      : QEMU Virtual CPU version 2.5+
stepping        : 1
microcode       : 0x1000065
cpu MHz         : 4241.996
cache size      : 512 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl cpuid extd_apicid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cmp_legacy 3dnowprefetch vmmcall
bugs            : fxsave_leak sysret_ss_attrs swapgs_fence amd_e400 spectre_v1 spectre_v2
bogomips        : 8483.99
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

问题解决

商家标称CPU使用Ryzen 3000+系列,而咱用的3700X是支持AVX指令集的,所以我推测是他们的虚拟化配置问题导致虚拟机中缺少AVX指令集。

3700X

KVM虚拟化的CPU Model是可以自由设置的,如果没有调整为Host模式,那么显示的CPU就会是奇奇怪怪的名字。在这台服务器上,CPU的型号为”QEMU Virtual CPU version 2.5+”。名字倒是无所谓,但是设置不当结果便是虚拟的CPU可能会缺少指令集。

原先使用的Dmit设置的是Host模式,就可以直接看到CPU型号为“AMD EPYC 7443P 24-Core Processor”,指令集也对的上。

root@*:*# cat /proc/cpuinfo 
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 25
model           : 1
model name      : AMD EPYC 7443P 24-Core Processor
stepping        : 1
microcode       : 0x1000065
cpu MHz         : 2844.606
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 16
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr arat npt nrip_save umip vaes vpclmulqdq rdpid arch_capabilities
bugs            : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 5689.21
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

遂发工单给德国人,要求他解决这一问题,并附带上我对这一问题的推测。

在德国人解决问题之前,考虑到现在不需要MongoDB的一些新特性,只好安装旧版MongoDB(4.22),正常运行。

后续

在装完旧版本的MongoDB以后,德国人回复了我的工单,表示已经完成了配置,附上一张新的配置报告。

root@*:*# cat /proc/cpuinfo 
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 113
model name      : AMD Ryzen 7 3700X 8-Core Processor
stepping        : 0
microcode       : 0x8701021
cpu MHz         : 4241.996
cache size      : 512 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 16
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr wbnoinvd arat npt nrip_save umip rdpid arch_capabilities
bugs            : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 8483.99
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management:

MongoDB高版本无法使用的问题也得以彻底解决。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇