鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

关闭透明大页和使用TCMalloc

目的

TCMalloc是一种高效的内存分配器,它通过一系列优化来提高内存分配的效率和性能。

  • 传统的malloc在分配和释放内存时会造成内存碎片,这会导致内存的利用率下降,甚至会导致内存不足的情况。而TCMalloc通过使用固定大小的page和对象来执行内存获取和分配操作,可以减少内存碎片的产生,提高内存的利用率。
  • TCMalloc适用于多核,具有更好的并行性支持。它可以基于每个线程或者每个CPU设置缓存大小,提高并行性能。
  • TCMalloc通过缓存常用对象来提高获取内存的速度。
  • TCMalloc可以基于每个线程独立设置缓存分配策略,从而减少多线程之间锁的竞争,进一步优化内存分配的效率和性能。

方法

  • 关闭透明大页
    1
    2
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    
  • 使用TCMalloc

    下面以MariaDB为例描述TCMalloc的使用方法。以下命令中,请根据实际情况将gperftools-xx修改为具体的gperftools版本号。

    1. 下载gperftools源码。

      下载地址:https://github.com/gperftools/gperftools/releases

    2. 解压gperftools源码。
      1
      tar -zxvf gperftools-xx.tar.gz
      
    3. 进入gperftools源码目录,并执行编译安装。
      1
      2
      3
      4
      cd gperftools-xx
      ./configure --enable-frame-pointers
      make -j
      make install
      
    4. 修改MariaDB启动脚本mysqld_safe文件。“/usr/local/mysql/bin/mysqld_safe”表示mysqld_safe文件的目录,请根据MariaDB实际的安装位置修改。
      1. 打开mysqld_safe文件。
        1
        vim /usr/local/mysql/bin/mysqld_safe
        
      2. “i”进入编辑模式,在“#executing mysqld_safe”的下一行添加如下内容。
        1
        export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 重启MariaDB服务使mysqld_safe文件的修改生效。