tcmalloc: Speicheroptimierung

Das TC steht fuer Thread-Caching. Es soll nicht nur deutlich schneller als das normale malloc oder ptmalloc sein sondern die lock-contention fuer multi-threaded Programme deutlich reduzieren. Gutes Einsatzgebiet sind hier MySQL, Apache, Tomcat, Squid, Varnish, LDAP usw.

 

HP: https://github.com/gperftools/gperftools

Installieren:
Endweder per Paket libtcmalloc-minimal oder händisch:

ACHTUNG: Für 64bit Systeme muss, sofern man die cpu und heap profiler benutzen möchte, vorher „libunwind“ installiert sein. Kleiner „kicker“ hierbei: die Version darf nicht älter als 0.99 aber auch nicht „zu neu“ sein. http://mirror.netcologne.de/savannah/libunwind/libunwind-1.2.tar.gz. Für weitere schmerzen mit 64bit sei das Lesen der README datei empfohlen und die „üblichen“ Fallstricke wenn man statisch linken will. Für die minimal Version, also nur libtcmalloc(_minimal), braucht man das alles nicht.

Für Applikationen die an sich schon viel Speicher benötigen (z.B. Java) ist es angebracht beim configure „CXXFLAGS=-DTCMALLOC_LARGE_PAGES“ mit anzugeben. Das erhöht zwar den Speicherverbrauch dafür aber gibt es eine spürbare performance erhöhung gegenüber einem tcmalloc ohne diese Option.

(Hier nur die minimalversion ohne profiler und schnickschnack.)
/usr/local/src # wget https://codeload.github.com/gperftools/gperftools/zip/master
/usr/local/src # tar xzf google-perftools-1.6.tar.gz
/usr/local/src # cd google-perftools-1.6/
/usr/local/src/google-perftools0.6 # ./configure –enable-minimal –disable-cpu-profiler –disable-heap-profiler –disable-heap-checker && make && make check && make install && make clean

Default installation erfolgt nach /usr/local/lib

 

Benutzen von tcmalloc:
1. Recompile der Applikation die tcmalloc benutzen soll mit „-ltcmalloc_minimal -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free“.
2. Per LD_PRELOAD=“/usr/local/lib/libtcmalloc_minimal.so“, im Startscript der Applikation, einbinden.

Letzteres ist, zum testen ob und wieviel performance es bringt oder welche compileoption man noch benötigt, vorzuziehen. Für Dauer-/Livebetrieb ist ersteres vorzuziehen.