MongoDB 5.0 報(bào)錯(cuò)Illegal instruction解決

七月的一聲炮響,MongoDB Inc給我們送來(lái)了MongoDB 5.0,該版不僅帶來(lái)了核心特性—時(shí)序集合,但若使用不慎還會(huì)給我們埋些小小的“坑”;如果您的環(huán)境正準(zhǔn)備安裝、試用或升級(jí)到MongoDB 5.0,那不妨留步討論下。

現(xiàn)象

先注明下,我的Linux版本為CentOS Linux release 7.2.1511。
安裝完最新的mongodb-5.0.x后,執(zhí)行 mongo 或 mongod 直接報(bào)錯(cuò) Illegal instruction.

[root@10-186-61-38 mongodb]# cd mongodb-linux-x86_64-rhel70-5.0.5/bin/
[root@10-186-61-38 bin]# ./mongo --help
Illegal instruction
[root@10-186-61-38 bin]# ./mongod --help
Illegal instruction

滿(mǎn)臉疑惑,使用低版本MongoDB 4.4.9 是沒(méi)有任何問(wèn)題的。

[root@10-186-61-38 mongodb]# cd mongodb-linux-x86_64-rhel70-4.4.9/bin/
[root@10-186-61-38 bin]# ./mongo --help
MongoDB shell version v4.4.9
usage: ./mongo [options] [db address] [file names (ending in .js)]

排查

執(zhí)行 mongo 或 mongod 命令獲取到2行 demsg 日志報(bào)錯(cuò):

[root@10-186-61-38 bin]# dmesg -T
······
[Thu Dec 23 18:05:13 2021] traps: mongo[16596] trap invalid opcode ip:7f0ad9fa90da sp:7ffe9deaa050 error:0 in mongo[7f0ad7f86000+2c8c000]
[Thu Dec 23 18:05:17 2021] traps: mongod[16597] trap invalid opcode ip:7f3b1e329a6a sp:7ffc8fb540e0 error:0 in mongod[7f3b1a355000+5110000]

可以看到,命令執(zhí)行失敗是因?yàn)?code>invalid opcode 導(dǎo)致,貌似是跟操作系統(tǒng)的某種指令集有關(guān)。
帶著疑惑和關(guān)鍵字在MongoDB社區(qū)進(jìn)行查找,發(fā)現(xiàn)存在類(lèi)似報(bào)錯(cuò):

image.png

該案例雖然操作系統(tǒng)為Ubuntu,但是系統(tǒng)錯(cuò)誤信息類(lèi)似,報(bào)錯(cuò)原因是因?yàn)椋篗ongoDB 5.0版本基本的要求是所在服務(wù)器的 CPU 需要支持 AVX指令集。
仔細(xì)查找官方文檔,可以看到安裝MongoDB 5.0 版本確實(shí)需要依賴(lài)支持 AVX 指令集的 CPU:
image.png

目前支持AVX指令集的CPU型號(hào)可以參考鏈接:https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX
檢查下我自己服務(wù)器的 CPU , 確實(shí)不支持 AVX (注意:若支持AVX指令集,flags字段會(huì)有打印 'avx' 字符串):

[root@10-186-61-38 ~]# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 13
model name  : QEMU Virtual CPU version 2.5+
······
flags       : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl xtopology eagerfpu pni cx16 x2apic hypervisor lahf_lm
······

支持AVX的CPU測(cè)試

找臺(tái)CPU 支持 AVX 指令集的服務(wù)器進(jìn)行測(cè)試。


image.png

MongoDB 5.0 新版本命令正常執(zhí)行。


image.png

AVX指令集

AVX(Advanced Vector Extensions,高級(jí)向量擴(kuò)展指令集)是x86架構(gòu)微處理器中的指令集

  • 由英特爾在2008年3月提出,并在2011年第一季度發(fā)布的Sandy Bridge系列處理器中首次支持。AMD在隨后的2011年第三季度發(fā)布的Bulldozer系列處理器中開(kāi)始支持AVX.所以較老的CPU架構(gòu)中可能并不支持AVX指令集。AVX是X86指令集的SSE延伸架構(gòu),如IA16至IA32般的把寄存器XMM 128bit提升至YMM 256bit,所以從理論上看CPU的運(yùn)算性能將提升2倍。

目前MongoDB官方文檔中僅說(shuō)明安裝MongoDB 5.0 需要依賴(lài)服務(wù)器CPU支持AVX指令集,但并未說(shuō)明具體需要支持的原因; 網(wǎng)上僅檢索到一篇關(guān)于MongoDB with AVX的文章《Getting storage engines ready for fast storage devices》提到:可以使用經(jīng)過(guò)高度優(yōu)化基于A(yíng)VX的memcpy方式,實(shí)現(xiàn)數(shù)據(jù)從內(nèi)存映射區(qū)域拷貝到另一塊應(yīng)用的緩沖區(qū); 猜測(cè)目前5.0版本的發(fā)布包含了文章提到的WiredTiger存儲(chǔ)引擎層面的更新(文章提到更新引擎后的讀吞吐量提升了63%),而底層存儲(chǔ)引擎的優(yōu)化更新依賴(lài)于avx的支持。

https://engineering.mongodb.com/post/getting-storage-engines-ready-for-fast-storage-devices

結(jié)論

若需要安裝或升級(jí)到MongoDB 5.0 新版本,一定要提前確保自己的服務(wù)器 CPU 能否支持 AVX指令集 架構(gòu),檢查命令如下:

grep avx /proc/cpuinfo  

參考文檔:

https://www.mongodb.com/community/forums/t/mongodb-5-0-cpu-intel-g4650-compatibility/116610
https://docs.mongodb.com/manual/administration/production-notes/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 高可用性即HA(High Availability)指的是通過(guò)盡量縮短因日常維護(hù)操作(計(jì)劃)和突發(fā)的系統(tǒng)崩潰(非計(jì)...
    小波同學(xué)閱讀 21,810評(píng)論 6 54
  • 曾自己借助阿里云和hexo搭了個(gè)站點(diǎn),現(xiàn)已廢棄,過(guò)往寫(xiě)的博客暫挪到此處。 title: MongoDB 初接觸da...
    monvhh閱讀 514評(píng)論 0 0
  • 本周我們精選出社區(qū)問(wèn)答進(jìn)行整理匯總,開(kāi)發(fā)者在使用PaddlePaddle過(guò)程中遇到任何技術(shù)難題,都可以到Paddl...
    PaddleWeekly閱讀 8,619評(píng)論 0 0
  • 環(huán)境要求: MongoDB只支持64位系統(tǒng) MongoDB支持持Oracle Linux Red Hat Comp...
    StephenZ閱讀 301評(píng)論 0 1
  • 1. MongoDB介紹 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),用C++語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供...
    小屁孩cmq閱讀 490評(píng)論 0 1

友情鏈接更多精彩內(nèi)容