Redis の zmalloc.c のソース コードでは、次のコードを確認できます:
/* tcmalloc を使用するときに、malloc/free などを明示的にオーバーライドします。 */
#if 定義されています。 (USE_TCMALLOC )
#define malloc(size) tc_malloc(size)
tc_calloc(count,size) は calloc 関数の定義です
#define realloc(ptr,size) ) tc_realloc( ptr,size)
#define free(ptr) tc_free(ptr)
#elif defined(USE_JEMALLOC)
#define malloc(size) je_malloc(size) )
次の文はリクエストに応じて書き直されました。 ステートメント「#define calloc(count,size) je_calloc(count,size)」は、標準定義関数「calloc」を「je_calloc」という名前のカスタム関数に置き換えるために使用されます。 size) je_realloc(ptr,size)
#define free(ptr) je_free(ptr)
#endif
上記のコードから、Redis がコンパイル時にtcmalloc を使用する場合は、標準 libc の関数実装が tcmalloc に対応する関数に置き換えられます。この後、jemalloc が有効かどうかを確認しますが、有効でない場合は標準 libc のメモリ管理機能が使用されます。
最新バージョン 2.4.4 では、jemalloc がソース コード パッケージの一部として含まれており、直接使用できるようになりました。 tcmalloc を使用したい場合は、自分でインストールする必要があります。
tcmalloc パッケージのインストール方法について簡単に説明します。tcmalloc は google-proftools の一部であるため、実際には google-proftools をインストールする必要があります。 64 ビット マシンにインストールする場合は、必要な libunwind ライブラリを最初にインストールする必要があります。
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
Redis がさまざまなメモリ アロケーターを使用する方法の断片化率の比較
# 次に、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 #このファイルがない場合は、自分で作成してください sudo /sbin/ldconfig次に Redis をインストールし、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 Redisを再起動すると、infoコマンドで使用されているメモリアロケータが確認できます。 この記事の主題に戻り、この記事では、tcmalloc、jemalloc、libc に対応する 3 つのメモリ アロケータについて説明します。以下は、Redis 情報情報から取得した、パフォーマンスと断片化率を評価するために設計された簡単なテスト結果です。テストでは異なるアロケーターが使用されました。以下に示すように、tcmalloc を使用すると断片化率が最も低くなり、jemalloc は 1.02、libc のアロケータ断片化率は 1.31 であることがわかります。 :675.57M used_memory_rss:715169792 used_memory_peak:708814040 used_memory_peak_human:675.98M 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:708803768# 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:1136689152
used_memory_peak:868992208
used_memory_peak_human:828.74M
mem_fragmentation_ratio:1.31
mem_allocator:libc
以上がRedis がさまざまなメモリ アロケータを使用して断片化率を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。