nDiki : 2004年01月中旬

2004年1月11日 (日)

tkhを囲む会

今日は先日来社したtkh夫妻を囲んでお昼を食べる日。 とともに銀座へ。

ギーニョギーニョ

GUINOGUINO パエリア

11:30にJR有楽町駅の改札口で待ち合わせて、ガード下のスペイン料理のお店「ギーニョギーニョ」へ。 場所を決めていなかったので朝webで検索してあたりを付けておいたのだが、ゆっくりできたしなかなか良かったんじゃないかな。 バイキングが自分の好きなペースで食べれるかなと、最初は以前にもいった事もあったジョン万次郎にしようと思っていたのだがWebで確認したら銀座店は無くなっているようだ。

ギーニョギーニョは駅から近いし、時間制限がないし(日曜はランチ終了15:00までOK)、ちょっと集まる時にはいいのかも。 味はそこそこかな。料理はもう少し品数が多いといいんだけれど。 出来上がると店員が祭りのように大騒ぎして店内を巡ってから給仕が始まるパエリアは、ちょっとカタめでイマイチだった。 デザートは食べなかったので不明。 加藤茶のヅラtopのちょび毛みたいなくねくねチョコの乗った洋菓子が気になったかな。

tkh&さおり さおり&花田

今回はtkh研究室が一緒だったやまだ君、花田君と我々夫婦の6人。

計算機談議に終始した昔とは違い、子育て・住まい・株などの話題も多くのぼりある意味衝撃的であった。大人らしくなってきたのか? ま、計算機の話ももっとモリモリしたかったけどね。

やまだ君が研究室から EOS-10Dを持ってきていた(持ってきてと頼んだ)。 やはり一眼レフはいいね。レスポンスがいい。

Apple Store,Ginza

アップルストア

14:30ぐらいにお店を出て、 アップルストア銀座へ。

年末には1Fしかのぞかかなかったんだけれど、今日はきちんと4Fから1Fまで見てまわってみた。 tkhは sourceforge から iTerm をデモ端末にダウンロードして、他マシンにログインしてメールチェックしてた。ふふふ。

ゆっくり見てまわってから、お店の前で解散。 また帰国した際には飯食いましょう。

スポンサード リンク

過去の今ごろ

過去の1月11日より。

  • Dove の味
    • その後もまたやらかしているのだが、なぜか逆のパターン(歯磨き粉で洗顔)はたしかまだない。

www.naney.org BTS 休止

ディスク容量が結構やばくなってきたので、ホームにインストールしていた Ruby とともに、影舞を削除・www.naney.org BTS を停止。

[ 1月11日全て ]

2004年1月12日 (月)

過去の今ごろ

過去の1月12日より。

[ Perl ] Memcached を使ってみる

WiKicker の高速化に Memcached が使えないかいろいろいじってみる。 評価は今のところ「微妙」。 Memcachedメモキャッシュを提供するデーモンプログラムで、キーと値の配列を記憶しておいてくれる。 Slashdot でも使っているらしい。

ホスティングサービスのサーバ(FreeBSD 4.4-RELEASE)に入れてみる。

Memcached 1.1.10

依存している libevent と一緒にビルドしてインストール

 cd /tmp
 wget http://www.monkey.org/~provos/libevent-0.7c.tar.gz
 tar zxvf libevent-0.7c.tar.gz
 cd libevent-0.7c
 ./configure
 make
 cd ..
 wget http://www.danga.com/memcached/dist/memcached-1.1.10.tar.gz
 tar zxvf memcached-1.1.10.tar.gz
 cd memcached-1.1.10
 CFLAGS='-L../libevent-0.7c -I../libevent-0.7c' ./configure --prefix=$HOME/local/memcached-1.1.10
 make
 make install

'-l' オプションがうまく動かない。

 bind(): Can't assign requested address
 failed to listen
 /PRE

指定しなくても動くのでとりあえず、よしとする。

ちなみに、EVENT_SHOW_METHOD=1 の結果は以下の通り。

 $ EVENT_SHOW_METHOD=1 ./memcached
 libevent using: kqueue

Cache::Memcached 1.0.11

Perl 用の API モジュールを入れておく。 make test でこける。

 Your vendor has not defined Socket macro MSG_NOSIGNAL

use Socket qw(MSG_NOSIGNAL PF_INET SOCK_STREAM); のところ。 Solaris/*BSD だと駄目らしい。 CVS版だと解決されいるようなので、こちらを。

Cache::Memcached CVS

 cvs -d :pserver:anonymous@danga.com:/home/cvspub checkout wcmtools/memcached/api/perl

でとってくる。 こちらは Perl 5.005_03 という古いバージョンでいくつか問題。

 our $SOCK_TIMEOUT = 2.6;

のところの our は Perl 5.005_03 には無いので、use vars に置き換え。 use bytes も 5.005_03 に無いのでコメントアウト。

IO::Handle::blocking() も無い。

 sub my_blocking {
   my ($sock, $bool) = @_;

   my $old_flags = fcntl($sock, F_GETFL, 0)
       or die "Can't get flags for the socket: $!\n";

   if ($bool) {
       my $flags = fcntl($sock, F_SETFL, $old_flags | O_NONBLOCK)
           or die "Can't set flags for the socket: $!\n";
   }
   else {
       my $new_flag = $old_flags & ~O_NONBLOCK;
       my $flags = fcntl($sock, F_SETFL, $new_flag)
           or die "Can't set flags for the socket: $!\n";
   }
   return $old_flags & O_NONBLOCK;
 }

...でいいのかな? ささっと書いたんで一部バグっているかもしれないが、とりあえず代替しておく。

ちなみに Cache::Memecached の古い版、MemCachedClient-1.0.7 も試してみたけれどこちらも IO::Socket::INET が必要だったり面倒(なので、1.0.11 のパッチ当ての方をがんばった)。

スピード

うーん。思ったほど速くないな。 いや手元のLinuxだとかなり速いんだけれど、FreeBSD だとそうでもない。 Client側の問題が大きいようだ。 下手するとLinux BOX からADSL経由でキャッシュを読み込む方が、FreeBSD のローカルホストから読むより速かったりする。

どうも Socket の接続/切断まわりでもたついている感じである。 (無駄なはずなのだが)毎回 disconnect_all してしまった方が、Benchmark の値が良かったりするし。 接続 -> キャッシュ取得 -> 切断 で 0.6秒というのはちょっと遅すぎる。 もうちょっといじってみれば実用的な速度になるのだろうか?

[ 1月12日全て ]

2004年1月13日 (火)

過去の今ごろ

過去の1月13日より。

  • 銀ブラ
    • そういえばIXY DIGITALのバッテリ買い足したら? > tkh

Mew の設定とか

SSH 経由で、POP before SMTP なサーバ(qmail + vpopmail)へは

 smtp-server: hoge.example.com
 smtp-ssh-server: hoge.example.com

でなくて

 smtp-server: localhost
 smtp-ssh-server: hoge.example.com

でないと駄目なのかな (SMTPサーバ = SSHサーバ)。 以前は SMTPサーバ と SSHサーバが違うホストの設定を使っていたので、それぞれFQDNを書くだけだったのだが。

[ WiKicker ] CSS修正

Safari だとリスト項目の時が小さくなりすぎるというので、修正。

[ 1月13日全て ]

2004年1月14日 (水)

過去の今ごろ

過去の1月14日より。

[ お仕事 ] 送りたかったメールが。

昨日送ったはずのメールが届いていないようだ。 確認したら Mew の draft に残っていた。 再編集しようとしたら化けたので kill。 draft からも消えてた。

30分かけて書き直し。

[ Perl ] Cache::Memcached

もう一度確認したら、昨日思っていたほどより遅くなかった。 また、CVS版では、Cache::Memcached の new オプションで select_timeout でちょっと大き目の値を指定してあげると(デフォルト 1.0)「selectがタイムアウト→ socket がクローズされる」事がなくなってそこそこいい速度が出るようになった。 ちなみに Cache::Memcached 1.0.11 にはまだこのオプションはない。

うん。これなら高速化に使えるかも。

[ 1月14日全て ]

2004年1月15日 (木)

過去の今ごろ

過去の1月15日より。

[ WiKicker ] Memcached を使った検索結果のキャッシング

WiKicker の機能のうち、ヘビーな処理が必要なものの筆頭に検索機能がある。 今のところ単純に全ページに対してマッチング処理を行うのでページ数が増えるに従い遅くなってくる。 ロボットの総ナメが怖い*1ので NaneyOrgWiki では load average が 5 を越えたら一時的に検索機能が停止するようになっている。

そこで Memcached を使って検索結果をメモキャッシュするようにしてみた。 本当はWikiPageのパース・レンダリング結果をキャッシュして、通常のページ表示を高速化したいと考えているのだが、今はまず影響の少ないところから(何でもいいから Memcached を使ってみたいというのが本音)。

で、実装してみた。 キャッシュがヒットすればすばやくレスポンスを返せるはずなのだが...やはり微妙だな。 速くなった気もするのだが、サーバの状態によってかなり遅い時もあるようだし。 まずはこれでしばらく運用テストしてみて、効果がありそうだったら他の部分にも適用することにしよう。

*1検索を実行するGETリクエスト用URLへのリンクがページにある

カツ丼弁当

たまに買いに行く会社の近くの食堂で、カツ丼弁当を買ってきた。 酸っぱい。

スタミナ弁当もひどかったのだが、こいつもヒドい。 ここは当たり外れが激しいな。 もうやめよう。

[ 1月15日全て ]

2004年1月16日 (金)

[ お仕事 ] OCNエコノミー -> OCN ADSLアクセスIP8「フレッツ」プラン

本日移行。IP アドレスDNS サーバメールサーバ、Web サーバを一斉入れ換え。

午前中にはJPRS側の設定が変更され一時的に名前が引けなくなる。 午後、ADSL側開通(フレッツADSL 12M からサービス変更)。 ほぼ順調。

ただし、中からADSL経由で外へ出ていけない(別の人がルータの設定に苦戦)。 OCNエコノミー側から外へ出れるのだが、」OCNエコノミー側の IP アドレスの正引きがキャッシュされていて古い名前が引けるけど、逆引きはもうできない」という状態に一時的にあるせいで、naney.org に ssh 接続できず(ssh_exchange_identification: Connection closed by remote host)。

別の某大学サーバへは ssh でき、そこから naney.org へ ssh。 ログを見ると、

 Jan 16 15:20:05 www9 sshd[9382]: warning: /etc/hosts.allow, line 34: can't verify hostname: getaddrinfo(xxx.yyy.co.jp, AF_INET) failed
 Jan 16 15:20:05 www9 sshd[9382]: refused connect from aaa.bbb.ccc.ddd (aaa.bbb.ccc.ddd)

という感じ。うーん SSH経由での外部サーバからのメール取得ができん。 しょうがないので、某大学にSSHトンネルを掘り、そのトンネルの中にもいっちょトンネルを掘って一時的に迂回。

 ssh -L 12345:www.naney.org:22 xxx.yyy.ac.jp

しておいて、

 ssh -L 12346:xxx.naney.org:110 -p 12345 localhost

して、localhost:12346 にPOP3接続と。

そうこうしている間に直ったらしい。

完了

DNSセカンダリのゾーン転送もうまくいっているという連絡が入ったし、ほぼ移行作業完了。 残業/休日出勤しないで済んだ。

過去の今ごろ

過去の1月16日より。

  • Sodipodi + Batik
    • 今だに自分にとっての定番作図ツールが無い(たまに Sodipodi を使用)。なんか「コレだ!」っていうのは無いのだろうか。
[ 1月16日全て ]

2004年1月17日 (土)

過去の今ごろ

過去の1月17日より。

[ WiKicker ] 「最近のアクセスログ」処理思案

今のところ WiKicker 自体にはアクセスログ機能はなく、Apache のそれに頼っている(NaneyOrgWiki ではサーバ側で combined log を提供していないので別途自前で、似非 combined log を吐かせている)。

1日毎程度のアクセス統計チェックはこれでまぁある程度済むのだが、それとは別に瞬間的なアクセス状況を知りたい時がままある。 特にサーバの負荷が上がりつつある時は

  • 特定のホストから連続的なアクセスがないか?(ロボットなど)
  • 特定のページのリクエストが一時的に増えているのでは?(ドラマ放映終了直後など)
  • 特定の訪問者がリロードしまくってないか?(チャット等と勘違いして)

などをチェックしたい。 ロボットのアクセスがひどい場合は早急にはじく必要があるし。 しかし、生アクセスログの目視チェック(+grep etc)では限界がある(wiki のURIはページ名がエスケープされているからパッと見どのページかわからないし)。

ということで、直近のログを簡単にチェックできるような機能を検討。 まずはログをどこに取るか。 複数のCGI プログラムのプロセスから、ガシガシ書ける必要有り。

  • 普通のファイル
  • daemon
  • mmap
  • 共有メモリ

あたりか。 直近の数百アクセスだけあれば良く、逆にそれ以上のログはばんばん破棄したいのだが何が一番いい実装かなぁ。

シンプルに普通のファイルに append するのが一番楽だが、ログが増えると tail を取るのが遅くなるだろうし、ログを切り詰めるのも面倒。 PerlTie::File を使うとファイルの各行を配列要素に見立てて push、 unshift、splice ができるのだが、やはり切り詰めに時間がかかりすぎる。

使えそうなモジュールがないかいろいろCPAN検索して、とりあえずどんどんビルドしてみる(サーバの Perl5.005_03 なので、目的にあっても使えないかもしれないし)

要領を得ないメール

どうしたいのかよくわからんので保留。

[ 1月17日全て ]

2004年1月18日 (日)

こえだちゃん

と「キノコのおうち」の話で盛り上る。 小さい頃にどちらに家にあったアイテムとして(私の方はのだが)。 調べたら正確には「キノコちゃんとキノコのレストラン」だったか。 ちなみにウチには、

があった。

過去の今ごろ

過去の1月18日より。

お年玉付年賀はがき

ゼロ。

[ WiKicker ] IPC共有メモリを用いた直近のアクセスログ管理

昨日から本格的に検討していたアクセスログ管理であるが、今回は IPC::ShareLite モジュールを使って、IPC共有メモリに置くことにした。

  • 共有メモリなのでファイルに書くより圧倒的に速い。
  • (ipc key を変更した時など)削除し忘れてメモリに残るおそれがあるので注意。
  • IPC::ShareLitePerl 5.005_03 でも動く。
  • FreeBSDを使っているサーバで共有メモリが使えた(共有メモリを使うPostgreSQL が使えるようになっている事からも心配なし)。1024 * 512 bytes 取っても問題なし。
  • Storable を使ってシリアライズ。
  • この共有メモリを扱うモジュールファイル名を__FILE__で取得し、その更新ファイルをマジックナンバーとして、共有メモリに一緒に書いておく。読んだ時に一致しなければ破棄するようにする(今後しばらく、ちょくちょく形式を変更すると思うので)。

ちゃちゃっと実装して、やっつけであるが直近のログを見れるようにした(RecentLog )。 順次表示する情報の追加や、表示数の調整を行う予定。 それから、各ページでのロギング処理が高負荷時に重荷にならないか要チェック。

[ 1月18日全て ]

2004年1月19日 (月)

[ Debian ] qmail + vpopmail + fml でポカミス

先週末に本格始動した Debian BOX、午前中メーリングリストメールを送ったら配送されない(10日ほど前に設定したやつ)。

log を見る限り permission の様子なのだが。 g+rw したりしたのだが改善されず。 うーん。メーリングリストオーナ(=naney)権限で動くから、その必要もないはずなんだけれどなぁ。vpopmail権限で動いちゃっているのかなぁ。 テストメメーリングリストを作った時には問題なかったのだが。

で小一時間。 /etc/qmail/users/assign

 +xxx.co.jp-testml:naney:1000:1000:/var/spool/ml/etc/qmail/alias:-:testml:

ふう。xxx.co.jp ですよ。 手順まとめた時に伏せ字にしておいたのだが、そのままコピーしてあったよ。 当然実際にはマッチしないので、その後の、

 +yyy.co.jp-:yyy.co.jp:64020:64020:/var/lib/vpopmail/domains/yyy.co.jp:-::

(yyy は本当の名前ね)

行により vpopmail 扱われたと。 で「/var/lib/vpopmail/domains/yyy.co.jp/.qmail-メーリングリスト名」が一応あるから、vpopmail 権限で fml.pl が動いて。

午前中つぶしてしまったよ。

[ WiKicker ] ピーク時の様子

先日実装したRecentLogページで、ピーク時*1のアクセスについてチェックしてみた。 特定のページだけに集中している訳ではなくて、その時間においても思ったより他のページにもアクセスがあるな。 1分あたりのリクエスト処理数は最大で約38(直前300リクエスト処理時間での平均)ぐらいだった。 同時アクセス数が増えると1リクエストにかかる処理時間も増えるし、これぐらいが今のサーバ/コードでは限界ということかな(SpeedyCGI で MaxBackends を 30 に設定しているため、これ以上は同時に処理しない)。

*1ドラマの終了時間

過去の今ごろ

過去の1月19日より。

[ 1月19日全て ]

2004年1月20日 (火)

[ WiKicker ] 古くても検索キャッシュを返す

先日実装した Memcached による検索キャッシュ、1ページでも書き換えがあったら馬鹿正直にキャッシュを無効扱いするようにしてある。

NaneyOrgWiki は繁忙時にはサーバの負荷が上がるのを抑えるため自動的に検索機能を停止するようにしてあるのだが、本当はこの間も検索できるようにしたい(検索Wikiの肝だし)。 いまのところ WikiPage は内容が追加されるる事の方が多いので、多少古いキャッシュを使っても精度はあまり落ちないはず(再現率は下る可能性がある)。

ということで、load averages が高い時は古くても検索キャッシュがヒットすればそれを検索結果として返すようにしてみた。

[ 日記 ] SpeedyCGI による、同時処理数制御

SpeedyCGI はもともとPerlスクリプト起動時の遅さ(インタプリタ起動 + プログラムのコンパイル)を回避するために、一度起動させたPerlプログラムを使いまわすもの。 Apache管理権限のない一般ユーザでもインストールして利用できるしプログラムに問題があった時の対応も簡単なので、重宝している。

もちろん mod_perl でのコーディングと同様、グローバル変数の扱いなど気をつけなければならない点はある。 ハイパー日記システムも残念ながらそれらを意識しては書かれていないのでSpeedyCGI下では、うまく動かない。

このSpeedyCGIだが同時に生成できるバックエンドプロセスの数(-M オプション)と、各バックエンドプロセス(使いまわされるPerlプログラム)の実行回数(-r オプション)を指定できる。 例えば -M15 ならバックエンドの数を最大15になる。 16個目のアクセスがあるとバックエンドのどれかが空くまで待たされる事になる。 また -r の方は実行しているうちにどんどんメモリ使用量が増えてしまうような行儀の悪いプログラムの時などに使用するもので、例えば -r30 としておくとそのバックエンドは30回呼び出されると終了させられる(そして新しいバックエンドがまた作られる)。

で話は長くなったが例えば '-M15 -r1 -t1' というオプションにすれば、何度も実行できないようなコードのCGI プログラムでも、同時処理数制御用として SpeedyCGI が使えるというわけ(-t はバックエンドのタイムアウト指定)。

この日記もロボットの絨毯爆撃などがあるとサーバに高負荷をかけてしまう事があるので、SpeedyCGI で同時処理数を抑えるようにしてみた。 さて効果はあるかな?

過去の今ごろ

過去の1月20日より。

[ www.naney.org ] サーバ重い

ホスティングサーバに入っている別のユーザのCGI プログラム(index.cgi)が昨日の夜からメチャクチャ重い。 アクセス数が多いとかじゃなくて、プロセスどんどん残ってしまっている感じ。 普通CGI プログラムって30分も動かさないでしょ。 待ち状態じゃなくてずっとRUN状態だから、ループに落ちているのかなぁ。 load averages が下らん(さすがに朝は落ちついていたのだが、昼に確認したら20前後)。 メモリは1 CGI プログラムにつき3MB前後。 (Perl スクリプトである事を考えると)、たいしてメモリは使っていない様子。

2004/1/19・Diaryに一行つっこみフォームが復活しました。インタラクティブな日記 再び!是非ご利用ください。

これが非常に怪しい。

何か見覚えのあるサイト名だと思ったら、同じ高校出身の人だ。 4学年下の方だから同時に学校にいた事はないと思うが。 同じサーバに収容されたのかぁ (昔は違うURLだったから)。

[ Linux ] qmail-smtpd に2GB以上のSMTPセッションを受けるとバッファオーバーフローを引き起こす可能性

/etc/qmail/databytes (Debian の場合の場所)に2GB以下の数値を指定すればよいらしい。

[ 1月20日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.230134s / load averages: 0.45, 0.52, 0.50
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker