SSD定点観測

運用開始してから100日強の X25-M G2R5。3年くらいは持ちそう。 $ sudo smartctl -d ata -a /dev/sdc smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START …

ウェブのアーキテクチャパターン=空間と時間の分割、という話

Twitter でつぶやいたことだけど。 ウェブの本質はメッセージのルーティング(と保存)だし、最重要なアーキテクチャパターンは空間と時間の分割アルゴリズム。マルチコアvs時分割マルチタスク、L3(もしくは携帯のセル)と CSMA等、リバースプロキシとAppサーバ…

XenServer と KVM のネットワークレイテンシ比較

どちらのサーバも、秒間数十の HTTP 接続をハンドリングしている状態で、ping -c 100 で測定した平均値。 ホスト ゲスト XenServer*1 0.138 1.295 KVM*2 0.130 10.590 KVM のゲストだけが遅い。常に遅いっていうんじゃなくて、時々ひっかかる感じ。ping の出…

2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット)

HTTP の持続的接続の功罪について はじめに、HTTP の持続的接続 (keep-alive) のメリットについて。持続的接続を使うメリットは、以下の2点。 TCP 接続の確立にかかる時間の節約*1 TCP の接続と切断に必要な資源 (CPUとネットワーク) の節約 ウェブブラウザ…

linux の TCP_DEFER_ACCEPT (サーバサイド) の挙動について

以前 (2.6.31 まで?) は以下の挙動*1。 最初のペイロードを受信するまで SYN_RECV ステート クライアントの ACK (TCP ハンドシェイクの最後のパケット) を受信していたとしても、SYN-ACK を送り続ける 190 秒たったら、サーバ側は TCP 接続確立失敗と認識 ク…

KVM のI/Oパフォーマンス評価 (ゲストOS = Windows XP)

測定環境等は前の記事と同じ。ゲスト OS が Windows の場合は virtio のブロックデバイスドライバは使えないので、IDE エミュレーションになる。OS からは MWDMA2 (max 16.7MB/s) として見えるが、実際はもっと速い。以下のような感じ。ゲスト OS のライトバ…

KVM (virtio) のI/Oパフォーマンス評価

測定環境は下記のとおり。 Ubuntu 9.10 server AMD Opteron 2218 x2 nVidia MCP55Pro Hitachi HDS72101 ゲストは LVM 上に構築 4並列でのランダムアクセス (16KB) ホスト ゲスト (cache=writethrough) ゲスト (cache=none) Read 207.7 138.3 187.4 Write 13…

Q4M のコンパクションをノンブロッキングにする話

Q4M には、キューファイルを定期的に圧縮するコンパクションという処理がある コンパクションが走ってる間は INSERT も queue_wait も固まる コンパクションの実行時間は、キューに滞留してるデータサイズに依存 *1 第2点のうち、INSERT が固まっちゃうのは…

MySQL や PostgreSQL でトリガーベースの実体化ビューを後から追加する方法 (もしくは無停止での CREATE INDEX)

読み込み>書き込みなデータベースだと、実体化ビュー (materialized view) を使って読み込み速度を上げるってのは有効な手法 ちなみに MySQL や PostgreSQL だと実体化ビューはトリガーを使って書く *1 では、トリガーベースの実体化ビューを後から追加した…

Solr って、書き込みの Disk I/O が多くて、リアルタイム検索は不可能なのかしら

を読んでいて、pp.266-267 に、以下のような記載があった。 ・Optimize の重要性 コマンドは Solr のインデックスを物理的に最適化するコマンドです。具体的には、Solr では commit のたびに一群 11 個のファイルを作成します。 つまり、細かく commit を繰…

彼氏が LIKE 検索使ってた。別れたい… (もしくは Solr 入門とか Tritonn のインクリメンタルバックアップとか)

LIKE 検索だとデータ増えてきた時なんか恥ずかしいwww 下向いちゃうしww 男にはせめて全文検索エンジン使ってほしい・・・ 検索が遅すぎてユーザー帰っちゃったら・・・・もう最悪www せめて普通 Tritonn や Solr くらいは使って欲しい。 常識的に考えて欲し…

Consistent Hashing を使うべきケース、使う必要がないケース

Consistent Hashing が便利なのは、頻繁にノードが上がったり落ちたりする環境で、ネットワークレベルで可用性を保証する必要がある場合。逆に RDBMS のシャーディング等で ノード毎に高可用性を確保している ノード追加/削除は頻繁じゃない 場合は、値域分…

TCPサーバのテスト用に、空きポートを見つける方法

Perl でサーバをテストするためのモジュール Test::TCP の作者 id:tokuhirom が言ってたことだけど、テスト用に空きポートを見つけるのは、bind の port 番号に 0 を渡すのが一番簡単。Perl で書くなら、こんな感じ。 my $unused_port = do { my $l = IO::So…

OpenSolaris 2009.06 のファイルを emacs + tramp で開けなかった件

http://defect.opensolaris.org/bz/show_bug.cgi?id=9227 経由で http://hub.opensolaris.org/bin/view/Project+ksh93-integration/2009-07-02 をインストールして解決

Cosmic っていうネットワークストレージを作り始めた

GitHub - kazuho/cosmic: fail-safe management tools for network-based software RAID, using mdadm + iSCSI概要 (というか近場の目標) は、以下のとおり。 fail-safe な network RAID 多重マウントが発生しないプロトコルを実装 RAID だから DRBD や MySQ…

安全なファイル書き換えにはディレクトリも fsync すべき。だけど Perl でどう書くか

間違ってたらツッコミお願いします。ext4 が出たタイミングで話題になったことだけど、(ext4 に関係なく一般論として) ファイルを安全に書き換えるためには、いくつかの手順を踏む必要がある。で、Perl だとだいたい以下のようになる。 # 1) 適当なテンポラ…

BPStudy と並カンと LRU

金曜の BPStudy で「TDD なペアプロで 30 分で課題を解きましょう」っていうイベントがあって、初対面の方 (@uranojpさん) と「C 言語にしますかね」とか言ってたら、お題が LRU で、C 言語だと辛いなと思いながら、二人でがんばってなんとか時間内に実装完…

InnoDB で fsync しない方法と、そのメリット

InnoDB はデフォルトでは同期I/O *1だけど、 innodb_flush_method=nosyncっていう隠しオプションがあって、それを有効にすると MyISAM みたく fsync しなくなるよ。ってソースコードちら見した自分が言ってた。この設定がうれしいのって、どういう時だろう?…

はてなのサーバ運用は教科書的なスケールアウト手法?

はてなにおける SSD の実績 - mura日記 (halfrack) の感想。木を見て森を語るような話ですが、この iostat を見ていて興味深かったのが、 ボトルネックは SSD この状態だと iostat -x の ioutil は 100% にかなり近い値40%-50% 前後だと思う*1 CPU がスカス…

死んだプロセスのスタックトレースを自動収集するデーモンを書いた (そして、その出力を開発者に送ってあげると喜ばれるよという話)

死んだプロセス (あるいは kill したプロセス) の core イメージから自動的にスタックトレースを収集するデーモンを書いたので、これをセットアップしてサーバにインストールしとくといいかもです (kaztools/bt_cores at master · kazuho/kaztools · GitHub)…

それでも私が Perl を使いつづける理由

元ネタ: http://d.hatena.ne.jp/tokuhirom/20100120/1263958061なぜ俺が $@%* を使いつづけるのか。* とか良く分かってないけど。 システムプログラミングができる 例えば低水準I/Oが標準で用意されているとか。 gccがない環境にも入っている gccがない環境…

2010年代にはLVMスナップショットベースのバックアップとか流行らない (もしくはログ構造化ファイルシステムへの期待)

感想文です。タイトルはテンプレから。たとえばうちの環境(普段 20-80 IOPS くらいの負荷がかかっている HDD) で、blockdiff (参照: Kazuho@Cybozu Labs: blockdiff を使ったお手軽ホットバックアップ環境の構築 (Linux, MySQL, etc.)) を実行すると、バッ…

nopan っていうレポジトリから直接ソフトウェアをインストールするインストーラを作り始めた件

perl の場合、CPAN モジュールは sudo cpan -i Module の1コマンドでインストールできる。でも、svn や git レポジトリのコードは、チェックアウトして perl Makefile.PL && make all test && sudo make install とか、めんどくさい。なので、svn や git レ…

Perlでマルチプロセスデーモンを作るためのモジュール「Parallel::Prefork」に(Min|Max)SpareServers対応を追加した話 (もしくは read(2) / write(2) の atomicity)

Perl で複数のワーカープロセスを制御するためのモジュールとしては Parallel::ForkManager が古参なんだけど、このモジュールはプロセスを fork するだけで、シグナルを受信したらワーカープロセスを再起動とかそういうことができないので、自分は Parallel…

rsyncを使って、ログとかファイルをリモートサーバに退避する方法

rsync -az -e ssh --out-format='%n' src-dir remote:dest-dir > files_copied.$$ || exit $? rm -f `cat /tmp/files_copied.$$` || exit $?CentOS だと rsync -avqz でコピーしたファイル名だけ一覧で出たんだけど、Ubuntu 9 だと出なかったorz 上なら rsync…

DNS リゾルバに、FQDN 以外でのルックアップをさせない方法

クローラを動かしている DMZ の DNS のログを読んでたら、 2010-01-12 00:25:21.493412500 7f000001:bffd:1023 + 001c foobar.example.com.dmz.localみたいな、「FQDN + DMZ のドメイン名」の検索がいっぱい実行されてた。実在する FQDN であっても応答まで…

めんどうなのでディスク容量監視をワンライナーでcrontabに書いた

15 3 * * * perl -wle 'my $s = `/bin/df -k`; print $s if $s =~ m{^/dev/.* (9[0-9]|100)\%}m'df に限らず、コマンドの結果を正規表現で比較して問題があったらprint、ってのはcrontabで監視する時の基本的なイディオム要出典。もちろん、backquoteじゃな…

ウェブ業界の15年、これからの10年 (Re ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない)

先のエントリ (ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない) ではボトムアップに煽った書き方をしたけど、自分がトップダウンでどういうふうに捉えているかについて。以下、あくまでも私見です。いわゆるネット業界は1990年代後半…

ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない

タイトルは煽り入ってますが。仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。そうすると…

Tritonn のホットバックアップ(とsync 3回伝説)

Tritonn のホットバックアップ環境を構築しようと思って調査。結論から言うと 漢(オトコ)のコンピュータ道: MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup の「MyISAMをスナップショットでバックアップ」でよさそう。確認したこ…