编译rocksdb源码导致的部署失败
這幾天經歷了一次心酸的歷程,使用了rocksdb第三方庫,編譯器是7.2,rocksdb是20190701從github上取下來的,由于rocksdb自己的CMakeList.txt中使用了-march=native編譯參數,強制使用了編譯代碼服務器的cpu指令集,由于是一個集群,集群中的服務器cpu型號信息不一定都一致,導致集群中部分服務器起不來。引起了大領導的關注,自己一下子提起了精神
事情的經過是這樣的:
我們發布了一款數據庫產品,部署在一個大的集群中,集群中大概有200臺服務器,但是部分服務器節點的進程啟動不起來。在一臺服務器A上編譯打包之后部署到其他的服務器,當時其他的服務器是一個大集群里面有幾十臺服務器,就用B來代表其中的一臺服務器吧,但是B啟動時直接失敗,可以看到的有用信息比較少。
(1)、后來改成了可以調試的版本,優先分析coredump,可以看到,有用的gdb信息比較少,直接在進程啟動時就崩潰了。
(2)、嘗試在main函數入口處加打印來獲取崩潰的模塊的信息,但是在測試過程中main函數中的打印一個也沒有出現,log文件也沒有生成,我個人直接崩潰
(3)、跟其他組的資深同事聊了半天,也沒有得到實質的幫助,此時2天已經過去了,MP催了幾次了
(4)、直接領導也給了一些幫助,讓加一些編譯參數,經過漫長的嘗試測試結果也是失敗了
經過直接領導的指導,應該調整下測試的方式,但是領導也不清楚具體原因,我也懵了,讓自己研究,作為入職公司16個月的資深工程師來說覺得應該好好深入的研究下rocksdb的源碼
(1)、各大網站一頓查找,國內網站沒有給什么幫助,stackflow給了一部分幫助
(2)、開始研究rocksdb源碼中編譯部分,經過一整夜的研究查找資料,最后得出的是rocksdb內部開啟的對cpu指令集的調整參數-march=native,修改rocksdb的編譯參數,編譯下代碼這個過程比較長,這時已經早上6::55,就讓機器自己編譯吧,洗了把臉去外面找點吃的,回來經過2小時的驗證,就是這個問題。由于需要在各種版本上驗證,因此需要考慮各種情況。
(3)、經過測試ok了
?
總結:
? ? ? 本人以前是搞通信的,碩士畢業,最早是做C開發的,現在從事分布式數據庫方面的工作,這次居然使用到了了os + 計算機組成原理+CPU架構等方面的知識,由于以前所學基礎知識扎實,這次對問題的解決得到了幫助。
總結
以上是生活随笔為你收集整理的编译rocksdb源码导致的部署失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件开发模型:瀑布模型,增量模型,原型模
- 下一篇: Git命令提交代码步骤