天天看點

啟動MySQL如何加載Jemalloc

如何加載Jemalloc。

有時候,我們想采用Jemalloc代替glibc自帶的lib庫,或者如果想啟用TokuDB引擎,則就必須啟用Jemalloc才行了。

如果通過搜尋引擎找到如何加載Jemalloc方法時,可能會看到像下面這種建議:

#修改my.cnf檔案 [mysqld_safe]配置區間,加上Jemalloc選項
[mysqld_safe]
thp-setting = never
malloc-lib = /usr/lib64/libjemalloc.so      

實際上這種做法現在已經不能用了。尤其是從MySQL 5.7版本開始,已經預設不使用mysqld_safe來啟動了,可以改用下面的方法:

#在啟動mysqld之前,執行指令
export LD_PRELOAD=/lib64/libjemalloc.so

#然後再正常啟動mysqld即可,例如
/usr/local/mysql/bin/mysqld --default-file=/mysql/mysql-8.0/my.cnf &      

LD_PRELOAD是個環境變量,用于動态庫的加載,動态庫加載的優先級最高。

一般情況下,其加載順序為:

LD_PRELOAD>LD_LIBRARY_PATH => /etc/ld.so.cache => /lib => /usr/lib      

然後執行下面的指令确認是否正确加載了:

[root@imysql ~]# lsof -p `pidof mysqld` | grep -i jemalloc
mysqld  21481 mysql  mem  REG  253,0  212096  1600 /usr/lib64/libjemalloc.so.1      

如果能看到類似上面的結果,就表示成功了。

最後多說一句,也可以考慮采用Google的TCMalloc(Google Performance Tools項目),有同學測試過,其記憶體管理效率比Jemalloc還要略好些。

延伸閱讀

繼續閱讀