如何加載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還要略好些。
延伸閱讀
- Jemalloc項目: https://github.com/jemalloc/jemalloc
- TCMalloc項目: https://github.com/gperftools/gperftools