当前位置:首页 > 内存 > 正文

tcmalloc 内存池

  • 内存
  • 2024-06-11 01:11:31
  • 7158

一、linux下怎么优化mysql占用内存?

Linux进程通过C标准库中的malloc内存分配函数向系统申请内存,但在与内核实际交互之间实际上还有一层,即内存分配管理器(memoryallocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL默认使用glibc的ptmalloc作为其内存分配器。

内存分配器采用内存池管理方式,位于用户程序层和内核层之间,然后系统返回给用户程序。

为了保持高效的分配,分配器通常会在用户程序申请和释放内存时向操作系统申请一些内存,分配器会对这些内存进行管理并使用一些算法策略来决定是否将其返回给操作系统。这样做的最大好处就是可以避免用户程序频繁调用系统进行内存分配,使得用户程序使用内存更加高效、快捷。

我个人对ptmalloc的内存分配原理不太了解,这里就不多赘述了,有兴趣的同学可以查看华亭的《glibc内存管理源码分析》【链接在底部】文章]。

至于如何选择这三种内存分配器,网上大部分资料都建议放弃glibc原生的ptmalloc,而使用jemalloc或tcmalloc作为默认分配器。因为ptmalloc的主要问题实际上是内存泄漏、内存碎片以及加锁带来的性能问题,而jemalloc和tcmalloc针对内存碎片和多线程做了更好的优化。

目前jemalloc用于Firefox、FaceBook等,是MariaDB、Redis、Tengine推荐的默认内存分配器,而tcmalloc用于WebKit、Chrome,ETC。


二、linux查看mysql占用多大空间

Linux进程通过C标准库中的malloc内存分配函数使用来自系统的内存,但在与内核的实际交互之间实际上还有一层,那就是内存分配管理器(memoryallocator)。常见的内存分配包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL默认使用glibc的ptmalloc作为内存分配器。

内存累加器采用内存池管理方式,位于用户程序层和内核层之间,响应用户分配请求,向系统操作请求内存并返回。到用户程序。

为了保持高效的分配,分配器通常会先从操作系统中使用一块内存,当用户程序请求和释放内存时,分配器会管理该内存并使用多种策略算法来决定是否使用。将其返回到操作系统。这样做的最大好处就是可以避免用户程序频繁调用系统进行内存分配,使得用户程序对内存的使用更加高效、快捷。

我个人对ptmalloc内存分配原理不太了解,这里就不详细解释了,有兴趣的同学可以阅读《glibcptmalloc内存管理源码分析》。

关于如何选择这三个内存分配器,网上大多数信息都建议保留glibc原生的ptmalloc,而使用jemalloc或tcmalloc作为默认分配器。因为ptmalloc的主要问题实际上是内存浪费、内存碎片以及加锁带来的性能问题,而jemalloc和tcmalloc则针对内存碎片和多线程处理进行了更多的优化。

目前jemalloc用于Firefox、FaceBook等,是MariaDB、Redis和Tengine推荐的默认内存分配器,而tcmalloc用于WebKit、Chrome、和别的。