2011年 7月 9日 はてなブックマーク -

このサーバは接続を受け入れきれずに、SYNを取りこぼしてしまっているみたいです。memcachedのbacklogはデフォルト値を使用しているので1024になっているはずです。

$ memcached -h | grep backlog
-b            Set the backlog queue limit (default 1024)

これって、本当に1024で足りなくなっているのでしょうか。単純にバックログを増やせば解決する問題かなと期待しつつも、どうも釈然としなかったので 、man listen をじっくりと読み返していたところ、

backlog 引き数が /proc/sys/net/core/somaxconn の値よりも大きければ、backlog の値は暗黙のうちにこの値に切り詰められる。このファイルのデフォルト 値 は128 である。バージョン 2.4.5 以前のカーネルでは、この上限値はコード埋め込みの固定値 SOMAXCONN であり、その値は 128 であった。

いやーな予感がしたので、おもむろにコマンドを叩いてみると・・・・・

# sysctl net.core.somaxconn
net.core.somaxconn = 128

あちゃあ!
実際はこれ、128になっていたわけですね!

# sysctl -w net.core.somaxconn=1024

としてmemcachedを再起動したところ、大幅に性能が改善されました。

DSAS開発者の部屋:高負荷サイトのボトルネックを見つけるには

TCP接続のリトライが起きているなら変更しておきたい所ですね。
上記設定だとマシンを再起動したら消えてしまう気がします。以下の様に実行すればOKです。
echo “net.core.somaxconn = 1024” » /etc/sysctl.conf
sysctl -p


10ヶ月前 | | 2011年 7月 9日 | このエントリーを含むはてなブックマーク
2010年 11月 4日 はてなブックマーク -
タグ: #Linux #nginx #memcached
CakePHPとnginx+memcachedで手軽にキャッシュを活用する | Shin x blog

こういった構成も面白いですね
1年前 | | 2010年 11月 4日 | このエントリーを含むはてなブックマーク
2010年 10月 16日 はてなブックマーク -

memcachedの運用について発表をさせていただきました。今回は監視scriptの書き方やcronlog、Nagiosの設定tipsなどの内容にしました。memcachedの監視というよりかは一般的なノウハウ寄りだったかなと

監視の狭間問題の対策としてmemcachedのuptimeを見るscriptを紹介していますが、この問題はmemcachedには限りませ ん。自動的に再起動してくるようなサービスで勝手に再起動した=何か問題が起きたと想定できる、例えばMySQLや /proc/sys/kernel/panic が設定されているLinuxにも同じような監視が必要になるでしょう。

Shibuya.pm#14 で memcachedの運用について発表しました - blog.nomadscafe.jp

1年前 | | 2010年 10月 16日 | このエントリーを含むはてなブックマーク
2010年 8月 26日 はてなブックマーク -
タグ: #PHP #memcache #memcached

$memcached->addServer(‘localhost’, 11211);

$key = ‘hoge’;
$value1 = ‘fuga’;
$value2 = ‘mote’;

$memcached->set($key, $value1);
$cas = null;
$resultValue = $memcached->get($key, null, $cas);
assert($resultValue === $value1); //fugaが返される

$success = $memcached->cas($cas, $key, $value2);
$resultValue = $memcached->get($key, null, $cas);

assert($success === true); //更新は成功
assert($resultValue === $value2); //更新されmoteが返される


$memcached->set($key, $value1);
$resultValue = $memcached->get($key, null, $cas);

$memcached->set($key, $value1); // 取得したあとに誰かがもう一度セットしたとする

//更新しようとする
$success = $memcached->cas($cas, $key, $value2);

assert($success === false); //更新失敗
assert($resultValue === $value1); //更新されずhogeが返される

ウノウラボ Unoh Labs: リビドーに赴くままlibmemcachedをPHPから使ってみる

CASを使った一貫性のサンプルです。
rpm化しつつのインストール方法も解説されています。


1年前 | | 2010年 8月 26日 | このエントリーを含むはてなブックマーク
2010年 6月 25日 はてなブックマーク -
タグ: #KVS #memcache #memcached

memcachedの開発者らが中心となって今年の3月に立ち上げた企業NorthScaleが、memcached互換のNoSQLデータベース「Membase」のオープンソースプロジェクト「membase.org」を6月23日に発表しました。

MembaseはWebアプリケーションのバックエンドに使われることを想定したキーバリュー型データストア。高速かつ高いスケーラビリティを目指したもの。

主な機能として、将来にわたってmemcashedとプロトコルの互換性を保証しつつ、ディスクへの永続性機能(データのディスクへの書き込み)、階層型データストア管理、データレプリケーション、稼働状態での設定変更とノード間のリバランシング機能なども備えると説明されています。

memcached互換のNoSQLデータベース「Membase」がオープンソースで登場 - Publickey

またまた良いものが出てきました。


1年前 | | 2010年 6月 25日 | このエントリーを含むはてなブックマーク
2010年 6月 23日 はてなブックマーク -
タグ: #KVS #memcache #memcached
#!/bin/bash
#
# Init file for memcached
#
# Written by Dag Wieërs 
#
# chkconfig: - 80 12
# description: Distributed memory caching daemon
#
# processname: memcached_session
# config: /etc/sysconfig/memcached_session
# config: /etc/memcached_session.conf

source /etc/rc.d/init.d/functions

### Default variables
PORT="11212"
USER="nobody"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
SYSCONFIG="/etc/sysconfig/memcached_session"
MEMCACHED="/usr/bin/memcached"
MEMCACHED_SESSION="/usr/bin/memcached_session"

### Read configuration
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

RETVAL=0
prog="memcached_session"
desc="Distributed memory caching"

start() {
        echo "searching $prog"
        if [ -e $MEMCACHED_SESSION ]
        then
                echo "$prog exist"
        else
                ln -s $MEMCACHED $MEMCACHED_SESSION
        fi 
        echo -n $"Starting $desc ($prog): "
        daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        return $RETVAL
}

stop() {
        echo -n $"Shutting down $desc ($prog): "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}

restart() {
        stop
        start
}

reload() {
        echo -n $"Reloading $desc ($prog): "
        killproc $prog -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  condrestart)
        [ -e /var/lock/subsys/$prog ] && restart
        RETVAL=$?
        ;;
  reload)
        reload
        ;;
  status)
        status $prog
        RETVAL=$?
        ;;
   *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        RETVAL=1
esac

exit $RETVAL
@wieers.com>

memcachedを複数起動する起動スクリプト - netmark.jp

pid分けて起ち上げるだけですが、意外と便利そうです。


1年前 | | 2010年 6月 23日 | このエントリーを含むはてなブックマーク