我發現 tcl-rocksdb 在載入時會出現 TLS error: cannot allocate memory in static TLS block 的問題,經過搜尋與研究,是因為 RocksDB 使用了 jemalloc,而 jemalloc 在 5.0 之後就會有這個問題。
解決的方法有幾個,一個是連結 jemalloc 時使用 static library 而非動態連結;一個是編譯 jemalloc 時加入選項 --disable-initial-exec-tls
來解決 TLS error issue,但是這樣使用者就要自己編譯 jemalloc。
另外的解決方法就是暫時在 RocksDB 關掉 jemalloc,沒有使用 jemalloc 就沒有載入問題。經過思考,因為我目前不想要在自己的 OBS repo 放一個 jemalloc,所以暫時關掉了我放在 OpenSUSE Build Service 上 RocksDB jemalloc 的選項,這樣連結到 rocksdb 的程式或者是函式庫就不會出現載入問題。
沒有留言:
張貼留言