Maison >base de données >Redis >Comment Redis utilise différents allocateurs de mémoire pour comparer les taux de fragmentation
Dans le code source zmalloc.c de Redis, nous pouvons voir le code suivant :
/* Remplacer explicitement malloc/free etc lors de l'utilisation de tcmalloc */
#if défini(USE_TCMALLOC)
#define malloc(size) tc_malloc (size)
tc_calloc(count,size) est la définition de la fonction calloc
#define realloc(ptr,size) tc_realloc(ptr,size)
#define free(ptr) tc_free(ptr)
#elif défini( USE_JEMALLOC)
#define malloc(size) je_malloc(size)
La phrase suivante est réécrite comme demandé : L'instruction "#define calloc(count,size) je_calloc(count,size)" est utilisée pour remplacer la fonction définie standard "calloc" par une fonction personnalisée nommée "je_calloc".
#define realloc(ptr,size) je_realloc( ptr,size)
#define free(ptr) je_free(ptr)
#endif
À partir du code ci-dessus, nous pouvons voir que lorsque Redis est compilé, il déterminera d'abord s'il doit utiliser tcmalloc. Si tel est le cas, il le fera. Utiliser tcmalloc La fonction correspondante remplace l'implémentation de la fonction dans la libc standard. Après cela, il vérifiera si jemalloc prend effet. Sinon, la fonction de gestion de la mémoire de la libc standard sera utilisée.
Dans la dernière version 2.4.4, jemalloc a été inclus dans le package de code source dans le cadre du package de code source, il peut donc être utilisé directement. Et si vous souhaitez utiliser tcmalloc, vous devez l'installer vous-même.
Parlons brièvement de la façon d'installer le package tcmalloc. tcmalloc fait partie de google-proftools, nous devons donc en fait installer google-proftools. Lors de l'installation sur une machine 64 bits, la bibliothèque libunwind requise doit d'abord être installée.
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
tar zxvf libunwind-0.99-alpha.tar.gz
cd libunwind-0.99-alpha/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
Comment Redis utilise différents allocateurs de mémoire pour comparer les taux de fragmentation
Et puis installez google- preftools :
wget http : //google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz
tar zxvf google-perftools-1.8.1.tar.gz
cd google-perftools-1.8.1 /
./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal
make && make install
sudo echo "/usr /local /lib" > /etc/ld.so.conf.d/usr_local_lib.conf #Si vous n'avez pas ce fichier, créez-en un vous-même
sudo /sbin/ldconfig
Ensuite, installez Redis et spécifiez-le lors de la création du correspondant paramètres pour activer tcmalloc
$ curl -O http://redis.googlecode.com/files/redis-2.4.4.tar.gz
$ tar xzvf redis-2.4.4.tar.gz
$ cd redis -2.4.4
$ make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes
$ sudo make install
Après avoir redémarré Redis, vous pouvez voir l'allocateur de mémoire utilisé via la commande info.
Revenant au sujet de cet article, cet article traite des trois allocateurs de mémoire correspondant à tcmalloc, jemalloc et libc. Ce qui suit est un résultat de test simple, tiré des informations d'informations Redis, conçu pour évaluer ses performances et son taux de fragmentation. Les tests ont utilisé différents allocateurs. Nous pouvons voir que le taux de fragmentation est le plus bas lors de l'utilisation de tcmalloc, qui est de 1,01, jemalloc est de 1,02 et le taux de fragmentation de l'allocateur de la libc est de 1,31, comme indiqué ci-dessous : 8M
mem_fragmentation_ratio : 1.01
mem_allocator:tcmalloc-1.7
used_memory:708381168
used_menory_human:675.56M
used_memory_rss:723587072
used_memory_peak:70880 3768
used_memory_peak_human:675,97 M
mem_fragmentation_ratio:1.02
mem_allocator:jemalloc-2.2. 1
used_memory:869000400
used_menory_human:828.74M
used_memory_rss:11 36689152
used_memory_peak:868992208
used_memory_peak_human :828,74M
mem_fragmentation_ratio:1,31
mem_allocator :libc
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!