Implementasi Squid 3.1 Menggunakan tcmalloc

Berawal dari keisengan membaca-baca referensi squid dari thread ini, saya sangat tertarik dengan penggunaan squid dengan dynamic library tcmalloc (thread-caching malloc).

Tcmalloc umumnya digunakan untuk optimasi pada kinerja MySQL (dalam beberapa benchmark menunjukkan MySQL 6 kali lebih cepat jika menggunakan tcmalloc) dibandingkan dengan menggunakan glibc. Namun, kata mas Domas Mituzas , tcmalloc tidak hanya bekerja pada MySQL, namun juga bekerja pada squid cache.

Masalah yang sering muncul pada squid adalah pada saat squid mengalami beban puncak (diakses dengan jumlah yang sangat besar) akan terjadi fragmentasi pada memory, yang mengakibatkan terjadinya lonjakan penggunaan cpu yang sangat signifikan.

Dengan menggunakan tcmalloc, fragmentasi pada memory dapat secara signifikan dapat dikurangi, sehingga squid bisa bekerja dengan lebih efisien. Sebagaimana ditunjukkan pada grafik dibawah :

How to…

Dalam kasus ini saya menggunakan Squid Cache versi 3.1.9 dengan opsi kompilasi sebagai berikut :

configure options:  '--prefix=/usr' '--libexecdir=/usr/lib/squid' '--srcdir=.' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--exec_prefix=/usr' '--bindir=/usr/sbin' '--sbindir=/usr/sbin' '--localstatedir=/var/spool/squid' '--enable-async-io=24' '--with-pthreads' '--enable-ecap' '--enable-linux-netfilter' '--enable-arp-acl' '--enable-epoll' '--enable-storeio=ufs,aufs' '--enable-icmp' '--enable-forward-log' '--enable-multicast-miss' '--enable-snmp' '--enable-htcp' '--enable-forw-via-db' '--enable-cache-digests' '--enable-default-err-language=English' '--enable-err-languages=English' '--enable-large-cache-files' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-referer-log' '--enable-useragent-log' '--enable-auth=basic,digest,ntlm' '--enable-carp' '--enable-follow-x-forwarded-for' '--with-large-files' '--with-maxfd=65536' --with-squid=/root/source/squid-3.1.9

Berjalan pada mesin berbasis Ubuntu Server 10.10 (Maverick).

Awalnya saya melakukan kompilasi manual dari sourcecode tcmalloc, namun banyak terdapat error..

ERROR: ld.so: object '/usr/local/lib/libtcmalloc.so' from LD_PRELOAD cannot be preloaded: ignored.
atau
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/nanda/.gvfs

Alhasil.. make uninstall :D

Namun dengan sedikit utak-atik, akhirnya bisa juga si tcmalloc dipasangkan ke squid. Berikut langkah-langkahnya…

# wget http://google-perftools.googlecode.com/files/libgoogle-perftools0_1.6-1_i386.deb

# dpkg -i libgoogle-perftools0_1.6-1_i386.deb

# ldconfig

Cek apakah tcmalloc udah terinstall dengan baik…

# dpkg -l | grep malloc

Sip.. udah.. Sekarang tinggal mengintegrasikan ke squid.

# vim /etc/squid/squid.conf

Tambahkan tag loadable_modules /usr/lib/libtcmalloc.so.0, simpan konfigurasinya, kemudian restart / reconfigure service squid…

# lsof -n | grep malloc

kburs

Voila..  :)

2 Comments

  1. fitriansyah

    kalau di terapkan di squid 2.7 bisa gk Mas fajar

    • fazar

      sepertinya tidak bisa. :)

Leave a Reply

Your email address will not be published. Required fields are marked *