memcachedの活用と運用 実践編

第1回 memcachedの起動オプションを把握しよう

この記事を読むのに必要な時間:およそ 6 分

-t スレッド数

1.4系から追加されたオプションです。1.4.0からマルチスレッドでの動作が前提となっています。そのスレッド数をここで指定します。以下のように -t に 1を指定することでシングルスレッドでの動作も可能です。

$ memcached -t 1

スレッド数のデフォルトは4です。マルチスレッドによって一度のコマンドで複数のキャッシュオブジェクトを取得する際に若干の高速化が期待できるようです。

-C CASの無効化

memcachedはトランザクションのサポートをしていませんが,CASを使うことでキャッシュの更新に一貫性を保つことができます。CASを利用するクライアントは,キャッシュオブジェクトを取得する際に,getsコマンドを使い,ID(CAS値)を取得します。データを更新する際にはクライアントはそのCAS値も送信します。memcached側ではCAS値が変わっていなければデータを保存する処理を行います。

このようにCASを使うことで簡単に一貫性を保つことができますが, CASを実現するためにmemcachedは64bitのIDを1つ1つのキャッシュオブジェクトにつける必要があり,そのために1つのキャッシュにつき8Byteのデータ領域が確保されます。-C オプションを指定することでCAS機能を無効にし,8ByteのCAS領域もキャッシュのために利用できるようになります。

$ memcached -C

-b 接続のバックログ

OSレベルでのTCP接続の確立はしたが,アプリケーションレベルのmemcachedで処理待ちとなっている接続キューの最大数です。負荷が大きいmemcachedサーバの場合には変更が必要となるかもしれません。デフォルトは1024です。ただし,Linuxでは「/proc/sys/net/core/somaxconn」で定義される値以上に設定することはできません。

Linuxでのsomaxconnのデフォルトは128なので,接続キュー数を増やすには,まずsomaxconnのチューニングが必要となります

$ echo 1024 > /proc/sys/net/core/somaxconn

somaxconnの変更後memcachedの再起動が必要です

-I 最大キャッシュオブジェクトサイズ

長らくmemcachedに格納できるキャッシュのオブジェクトサイズの最大は1MBに固定されていましたが,バージョン1.4.2から変更ができるにようになっています。変更できるサイズの幅は 1024Byteから128MBです

以下は512KBに制限をする例と,2MBに拡張する例です。

$ memcached -I 512k # 512KB
$ memcached -I 2m

設定の確認

memcachedの1.4系からは,起動後に外部からmemcachedがどのようなオプションで起動されているか,⁠stats settings」コマンドを発行することで確認することができます。

$  telnet localhost 11211
stats settings
STAT maxbytes 1073741824
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 0
STAT inter NULL
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.10
STAT chunk_size 48
STAT num_threads 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled no
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 1048576
END

バージョン 1.4.5では stats settingsの表示のうち,maxbytesの値が正しくないバグがあるようです。statsコマンドのlimit_maxbytesで正しい値が参照できます。

まとめ

今回は,memcached のバージョン 1.2.5から1.4.5へアップデートで追加されたオプションの紹介,さらにWebアプリケーションの運用でよく利用されるmemcachedのオプションの説明をしました。次回はmemcachedを運用する上で気になる脆弱性やその対策について書く予定です。

著者プロフィール

長野雅広(ながの まさひろ)

株式会社ライブドア 開発部 システム管理グループ所属。最近はリソース監視ツール「CloudForecast」を開発しながら,ライドドアのさまざまなサービスに導入を行い,スケーラビリティの向上を目指している。

URLhttp://blog.nomadscafe.jp/