もくじ
AWS ElastiCache (Memcached)を触るので
生のMemcachedを触ってみます。
チューニングパラメータやバッドノウハウや癖を知りたいのです。
Memcachedインストール
# yum -y install memcached
# memcached -h | head -n1 memcached 1.4.15
デフォルト設定確認
# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
- MAXCONN=”1024″
- CACHESIZE=”64″
問題になりそうなのはここかな?
動かす
# systemctl start memcached # systemctl enable memcached
Telnetを利用して使ってみる
# yum install -y telnet
# telnet localhost 11211 Trying ::1... Connected to localhost. Escape character is '^]'.
値をセット
set mykey 0 60 7 ←入力(圧縮するか?:0しない, 保持期間60秒, データバイト数) myvalue ←入力 STORED
値をゲット
get mykey ←入力 VALUE mykey 0 7 ←入力 myvalue END
statsコマンド
stats ←入力 STAT pid 9506 STAT uptime 482 STAT time 1570158687 STAT version 1.4.15 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.018763 STAT rusage_system 0.018763 STAT curr_connections 10 STAT total_connections 11 STAT connection_structures 11 STAT reserved_fds 20 STAT cmd_get 6 STAT cmd_set 1 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 1 STAT get_misses 5 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 104 STAT bytes_written 64 STAT limit_maxbytes 67108864 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT bytes 0 STAT curr_items 0 STAT total_items 1 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT evictions 0 STAT reclaimed 0 END
stats items END
stats cachedump CLIENT_ERROR bad command line
stats slabs ←入力 STAT 1:chunk_size 96 STAT 1:chunks_per_page 10922 STAT 1:total_pages 1 STAT 1:total_chunks 10922 STAT 1:used_chunks 0 STAT 1:free_chunks 10922 STAT 1:free_chunks_end 0 STAT 1:mem_requested 0 STAT 1:get_hits 1 STAT 1:cmd_set 1 STAT 1:delete_hits 0 STAT 1:incr_hits 0 STAT 1:decr_hits 0 STAT 1:cas_hits 0 STAT 1:cas_badval 0 STAT 1:touch_hits 0 STAT active_slabs 1 STAT total_malloced 1048512 END
memcached-tool
ログインしなくても使える
# memcached-tool localhost:11211 display # Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM」 11211で動いている場合はポート番号は省略できる # memcached-tool localhost display # Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
PHPと連携しよう
# yum install -y gcc-c++ # yum install -y php php-pecl-memcached
@see
- https://server-world.info/query?os=CentOS_7&p=memcached&f=4
PHPと連携できるかプログラムでチェック
# vi use_memcache.php <?php $memcache = new Memcached(); $memcache->addServer('localhost', 11211); $memcache->setOption(Memcached::OPT_COMPRESSION, false); // キーに値をセットして表示 $memcache->set('key01', 'value01'); print 'key01.value : ' . $memcache->get('key01') . "\n"; // キーに値をアペンドして表示 $memcache->append('key01', ',value02'); print 'key01.value : ' . $memcache->get('key01') . "\n"; $memcache->set('key02', 1); print 'key02.value : ' . $memcache->get('key02') . "\n"; // 加算 $memcache->increment('key02', 100); print 'key02.value : ' . $memcache->get('key02') . "\n"; // 減算 $memcache->decrement('key02', 51); print 'key02.value : ' . $memcache->get('key02') . "\n"; $memcache->set('key03', 'value03'); print 'key03.value : ' . $memcache->get('key03') . "\n"; // CAS (以下の場合 key03 の値は value05 へは更新されない) $memcache->get('key03', null, $cas); $memcache->replace('key03', 'value04'); if ($memcache->getResultCode() == Memcached::RES_NOTFOUND) { $memcache->add('key03', 'value03'); } else { $memcache->cas($cas, 'key03', 'value05'); } print 'key03.value : ' . $memcache->get('key03') . "\n";
実行
# php use_memcache.php key01.value : value01 key01.value : value01,value02 key02.value : 1 key02.value : 101 key02.value : 50 key03.value : value03 key03.value : value04
大丈夫そうですね。
デフォルト設定で問題ないか?
CPU使用率が上昇しDatabaseConnectionエラーが発生
@see
maxconns_fast
最大接続制限に達したときに新しい接続リクエストを処理する方法を変更します。
このパラメータを 0(ゼロ)に設定した場合、新しい接続がバックログキューに追加され、他の接続が終了するまで待機します。
パラメータを 1 に設定した場合、ElastiCache はクライアントにエラーを送信し、すぐに接続を終了します。
対応
- パラメータグループのmaxconns_fastを1に設定
- ElastiCache Cluster Clientをインストール
Sessionが空になってしまう
@see
キャッシュのサイズが大きくなる場合
デフォルト1MB(1048576)なのでチューニングする
データサイズが大きいと入らないでエラーになります。
→
5048576
ElastiCache(Memcache)の機能
オートディスカバリ
AmazonでのElastiCacheでの機能。
Clusterのエンドポイントを指定すると、Clusterないのノードを確認してくれてよしなに接続管理をしてくれる。
@see