Introducción
Los asignadores de memoria forman parte de interesantes estudios de la ingeniería de software. Esta asignador proporciona implementaciones del standard de rutinas de C, malloc(), free() y realloc()gperftools incluye TCMalloc (Thread-Caching Malloc), heap-checker, heap-profiler y cpu-profiler.
Si tienes un servidor con más de 8 núcleos (cores) deberías usar algo diferente que el asignador de memoria predeterminada de glibc.
Instalación
wget http://code.google.com/p/gperftools/downloads/detail?name=gperftools-2.0.tar.gz
tar xvzf gperftools-2.0.tar.gz
cd gperftools-2.0
./configure (usar --enable-frame-pointers) si estás usando sistema x86-64 y mira libunwind))
make
make install
Uso
Puede utilizar tcmalloc en aplicaciones que no has compilado tu mismo, mediante el uso de LD_PRELOAD:
$ LD_PRELOAD="/usr/lib/libtcmalloc.so"
También puedes instalar gperftools usando yum (CentOS, RHEL, Fedora, etc) (sin tener que compilar) usando el repositorio epel (o tipo atrpms, rpmfusion, rpmforge, etc) :
yum install gperftools-libs --enablerepo=epel
el cuál instala:- /usr/lib64/libtcmalloc.so.4
- /usr/lib64/libtcmalloc_minimal.so.4
Gestión de librerías compartidas en GNU/Linux
Y usar por ejemplo MySQL:export LD_PRELOAD="/usr/lib64/libtcmalloc_minimal.so.4" && binario mysqlTambién puedes tratar de jemalloc que supuestamente está cerca del rendimiento de tcmalloc
pero utiliza menos memoria:
yum install jemalloc --enablerepo=epelEl cuál instala:
- /usr/lib64/libjemalloc.so.1
Ejemplo uso MySQL (mysqld)
Y usarla para tu ejecutable (binario)
- export LD_PRELOAD="/usr/lib64/libjemalloc.so.1" && binario
O añadir en el my.cnf la librería que quieres usar:
[mysqld_safe]
- malloc-lib=/usr/lib64/libtcmalloc_minimal.so.4
- malloc-lib=/usr/lib64/libjemalloc.so.1
El nombre de la biblioteca para usar para la asignación de memoria en lugar
de lalibrería del sistema de malloc(). Cualquier librería se puede
utilizar al especificar el nombre de ruta, pero hay una forma de acceso directo
para permitir el usode la librería tcmalloc que se incluye con las distribuciones
de MySQL binarios para Linux en MySQL 5.5.
La opción malloc-lib funciona modificando el valor de entorno LD_PRELOAD para afectar la vinculación dinámica para que el cargador para encontrar la librería de asignación de memoria cuando se ejecuta mysqld.
Estas líneas también son suficientes para los usuarios en cualquier plataforma que ha instalado un paquete tcmalloc en /usr/lib. Para utilizar una biblioteca tcmalloc específico, especifique el nombre de ruta completo. ejemplo:
[mysqld_safe] malloc-lib = /opt/lib/libtcmalloc_minimal.so
http://www.ibm.com/developerworks/wikis/display/LinuxP/Tuning+and+optimizing+malloc+on+PowerLinux
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
La opción malloc-lib funciona modificando el valor de entorno LD_PRELOAD para afectar la vinculación dinámica para que el cargador para encontrar la librería de asignación de memoria cuando se ejecuta mysqld.
- Si la opción no se da, o se da sin un valor (- malloc-lib =), LD_PRELOAD no se modifica y no se intenta utilizar tcmalloc.
- Si se da la opción como - malloc-lib = tcmalloc, mysqld_safe busca una biblioteca tcmalloc en / usr / lib y luego en la ubicación pkglibdir MySQL (por ejemplo, / usr / local / mysql / lib o lo que sea apropiado). Si tmalloc es encontrado, su nombre de ruta se añade al principio del valor LD_PRELOAD para mysqld. Si tcmalloc no se encuentra, mysqld_safe aborta con un error.
- Si se da la opción como - malloc-lib = / ruta / a / algun / biblioteca, la ruta completa se agrega al principio del valor LD_PRELOAD. Si la ruta completa a un archivo inexistente o ilegible, mysqld_safe aborta con un error.
- Para los casos en que mysqld_safe añade un nombre de ruta para LD_PRELOAD, se agrega la ruta de inicio de cualquier valor existente de la variable ya tiene. Los usuarios de Linux pueden utilizar el libtcmalloc_minimal.so incluidos en los paquetes binarios añadiendo estas líneas al archivo my.cnf:
Estas líneas también son suficientes para los usuarios en cualquier plataforma que ha instalado un paquete tcmalloc en /usr/lib. Para utilizar una biblioteca tcmalloc específico, especifique el nombre de ruta completo. ejemplo:
[mysqld_safe] malloc-lib = /opt/lib/libtcmalloc_minimal.so
Otras opciones (Memory allocators) C++
- nedmalloc
- jemalloc (usado por Facebook y Firefox)
- lockless
- PTMalloc2-3 GNU C library (libc)forma parte de glibc, antes usaba dlmalloc
- ottomalloc
- nedmalloc
Instalación jemalloc
wget http://www.canonware.com/download/jemalloc/jemalloc-3.3.1.tar.bz2
tar -xjvf jemalloc-3.3.1.tar.bz2
cd jemalloc-3.3.1
./configure
make && sudo make install
export LD_PRELOAD=$LD_PRELOAD:/usr/local/lib/libjemalloc.so
Comprobar uso librería
pmap $PID | grep mallocLinks de interés
http://www.oracle.com/technetwork/articles/servers-storage-dev/mem-alloc-1557798.htmlhttp://www.ibm.com/developerworks/wikis/display/LinuxP/Tuning+and+optimizing+malloc+on+PowerLinux
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
No hay comentarios:
Publicar un comentario