256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

curlでボトルネック調査をする

ますだっくすさんが

curlのエントリ書いてたのでおいらも1つだけ追記しませう。

Webサイトのボトルネック調査

あるサイトでアクセスが遅いなぁ、って話になったときにまず当たりをつけるために遅い部分を調べたい。
って時のcurlの使い方。

実際の手順

基本的には、前述のますだっく(@)さんの、「その3. レスポンスの出力を加工する」であるのですが、詳細な項目を設定することで問題の切り分けにも使用できます。

出力フォーマット用のファイル。
cat <<'EOF' >/tmp/curl_env.txt
url_effective\t\t: %{url_effective}\n
http_code\t\t: %{http_code}\n
http_connect\t\t: %{http_connect}\n
time_total\t\t: %{time_total}\n
time_namelookup\t\t: %{time_namelookup}\n
time_connect\t\t: %{time_connect}\n
time_appconnect\t\t: %{time_appconnect}\n
time_pretransfer\t\t: %{time_pretransfer}\n
time_redirect\t\t: %{time_redirect}\n
time_starttransfer\t\t: %{time_starttransfer}\n
size_download\t\t: %{size_download}\n
size_upload\t\t: %{size_upload}\n
size_header\t\t: %{size_header}\n
size_request\t\t: %{size_request}\n
speed_download\t\t: %{speed_download}\n
speed_upload\t\t: %{speed_upload}
EOF
サイトアクセスと結果出力
$ curl  -o /dev/null http://www.example.com -w @/tmp/curl_env.txt -s
url_effective		: http://www.example.com
http_code		: 200
http_connect		: 000
time_total		: 5.113
time_namelookup		: 5.083
time_connect		: 5.092
time_appconnect		: 0.000
time_pretransfer		: 0.000
time_redirect		: 0.000
time_starttransfer		: 5.102
size_download		: 6435
size_upload		: 0
size_header		: 328
size_request		: 177
speed_download		: 1258.000

この場合

DNSのルックアップに時間がかかってるので、そこを改善しましょう、と言う話になります。
ほかにも、time_starttransferが大きければアプリケーションかな?などの切り分けに使えます。

各項目の意味

他にもこんな項目がありますよ。
manページから抜粋。

url_effective		最後にアクセスした URL 。特に curl に対し location: ヘッダに従うように指示した場合に有意になるものです。
http_code			直前の HTTP(S) あるいは FTP(s) 転送から取得された応答コード。 7.18.2 以降では同じ情報を示す response_code がエイリアスとして利用可能になりました。
http_connect		curl による CONNECT リクエストに対する(プロクシからの)最後の応答コード。(7.12.4 以降)
time_total			全体の処理にかかった時間(秒)。表示精度はミリ秒単位。
time_namelookup		開始から名前解決が完了したときまでの時間(秒)。
time_connect		開始からリモートのホスト(またはプロクシ)への TCP 接続完了までの時間(秒)
time_appconnect		開始からリモートホストへの SSL/SSH/etc 接続/ハンドシェイク完了までの時間(秒)(7.19.0 以降)
time_pretransfer	開始から最初のバイトの転送が行われようとするまでの時間(秒)。転送前になされるべきコマンドやプロトコル特有のネゴシエーションも含まれる。
time_redirect		正引き(名前解決), 接続, 前段転送処理, 最終的なトランザクションが開始される前の転送を含む、すべてのリダイレクションの段階に要した時間(秒)を表す。この変数は一連のリダイレクション全体に要した時間を表す。(7.12.3 以降)
time_starttransfer	開始から最初のバイトが転送されるまでの時間(秒)。 time_pretransfer に加えてサーバが結果を算出するのに要した時間も含まれる。
size_download		ダウンロードされた総バイト数。
size_upload			アップロードされた総バイト数。
size_header			ダウンロードされたヘッダの総バイト数。
size_request		送信された HTTP リクエストの総バイト数。
speed_download		curl により測定されたダウンロード完了までの平均ダウンロード速度。バイト数/秒。
speed_upload		curl により測定されたアップロード完了までの平均アップロード速度。バイト数/秒。
content_type		(存在するなら)リクエストした文書の内容型。
num_connects		直前の転送による新規接続数。(7.12.3 以降)
num_redirects		リクエストに応じて行われたリダイレクトの回数。(7.12.3 以降)
redirect_url		リダイレクト追跡の -L を用いずにHTTP リクエストを生成した場合、実際のリダイレクト先になるものとされる URL がこの変数に示される。 (7.18.2 以降)
ftp_entry_path		リモート FTP サーバにログインしたときに libcurl により最初に辿り着いたパス。(7.15.4 以降)
ssl_verify_result	リクエストされた SSL ピア証明書の検証結果。 0 は検証の成功を意味する。(7.19.0 以降)

いじょー。

curl高機能すぎて書き始めると色々大変になってきますw
manなど色々見ながら使ってみてくださいませね。


明治 カールチーズあじ 72g×10個

明治 カールチーズあじ 72g×10個

【聖地巡礼】孤独のグルメ(ドラマ版)にでてた店メモ【深夜の胃袋崩壊】

TVドラマ終わりました

ずっと地味に見てた孤独のグルメが終わったんで、録画消す前に場所のメモとっときます。
ヤンさんところ(「カライヨ?」の。)だけはいったのですが、後のお店もじわじわいってみるよー。

リスト

各回 サブタイトル お店 URL
第一話 江東区 門前仲町のやきとりと焼きめし 庄助 http://r.tabelog.com/tokyo/A1313/A131303/13065350/
第ニ話 豊島区 駒込の煮魚定食 和食亭 http://r.tabelog.com/tokyo/A1323/A132301/13126067/
第三話 豊島区 池袋の汁なし担々麺 中国家庭料理ヤン http://r.tabelog.com/tokyo/A1305/A130501/13009261/
第四話 千葉県 浦安市静岡おでん locodish http://r.tabelog.com/chiba/A1202/A120203/12005201/
第五話 杉並区 永福の親子丼と焼きうどん 釣り堀・お食事 武蔵野園 http://tmani.net/article/000548.html
第六話 中野区 鷺ノ宮のロースにんにく焼き とんかつ みやこや http://r.tabelog.com/tokyo/A1321/A132104/13011853/
第七話 武蔵野市 吉祥寺 喫茶店のナポリタン ランチ&食事とお酒 カヤシマ http://r.tabelog.com/tokyo/A1320/A132001/13040521/
第八話 神奈川県 川崎市 八丁畷の一人焼肉 焼肉ジンギスカンつるや http://r.tabelog.com/kanagawa/A1405/A140502/14018525/
第九話 世田谷区 下北沢の広島風お好み焼き お好み焼きと鉄板焼 HIROKI http://r.tabelog.com/tokyo/A1318/A131802/13001391/
第十話 豊島区 東長崎のしょうが焼目玉丼 せきざわ食堂 http://r.tabelog.com/tokyo/A1321/A132101/13021203/
第十一話 文京区 根津 飲み屋さんの特辛カレーライス すみれ http://r.tabelog.com/tokyo/A1311/A131106/13018386/
第十二話 目黒区 中目黒 ソーキそばとアグー豚の天然塩焼 草花木果 http://r.tabelog.com/tokyo/A1317/A131701/13015531/


孤独のグルメ DVD-BOX

孤独のグルメ DVD-BOX

孤独のグルメ 【新装版】

孤独のグルメ 【新装版】

花のズボラ飯

花のズボラ飯

MySQL Cluster構築・運用バイブルを読んだよ

各所で話題になっている、「MySQL Cluster構築・運用バイブル」をあろうことか技術評論社の方より献本いただいたので早速読んでみました。
ありがとうございます!


MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ

MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ

どんな本?

blog「漢のコンピュータ道」や、「エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド *1」で有名な奥野さん、いや@さんのかかれた、MySQL Clusterの入門〜実践本となります。
引越の合間に読んでみたのですが、読んでみた感想等を書かせていただければと思います。

その前に

自分は、正直言いますとプロダクト環境でMySQL Cluster使ったことが無いです。
どんなものかは知っていましたが、実際にサービスに入れてはいませんでした。
そういう立場の自分が読んだ感想として見ていただければと思います。

感想

まず

最初にいいたいのは、この本の読みやすさです。
買ったら最初に本をパラパラって見てみるとすぐ分かると思いますが、1ページの文字が少なくて頭にパッと入ってくる。これは技術書ではついぞ無い感覚で新鮮でした。

内容

内容は大まかにはこの様な内容が含まれています。

  • MySQL Cluster のインストール
  • MySQL Cluster の機能概要
  • MySQL Cluster の内部構造
  • MySQL Cluster をNoSQLとして使う(NDB APIについて)
  • MySQL Cluster のパフォーマンスチューニング
  • MySQL Cluster の監視
  • MySQL Cluster の運用のハマりどころ

このような感じになっています。


スタンドアロンMySQLを運用してきた人にはMySQLボトルネックになりやすいのは、DISK I/Oだと言うのはわかりやすい話だと思います。
なので、iodriveなどを使用して DISK I/Oの枷を取り払おうとするのですが、クラスタリングが組まれているMySQL Cluster*2で、それと同じくらい重要になってくるのはネットワークの帯域や、レイテンシ、冗長性、ということになります。
ということはスタンドアロンMySQLをちゃんと運用できる=MySQL Clusterをちゃんと運用できる、ではないわけで、違う方法論が必要になります。


その方法論を、内部構造の話を踏まえた上できちんと説明している、と言う点においてこの本は和書として出版されたMySQL Clusterについての実践的な常識がかかれた本ということになるとおもいます。
MySQL Clusterの本というのは初、だったとおもうんですが、どうだったでしょう、、、?(汗


例えば、パフォーマンスチューニングなどはインターコネクトの話(SCIや、10GbEを使用する)などはクラスタリングのシステムを構築する際に大事なことになりますし、インデックスの仕組みとしてオーダードインデックスをしっているとしらないとではスキーマ構成まともにできないでしょう。
これらをある時は、図、ある時は表、そしてある時はコードをもって詳細に、そして前述しましたがわかりやすく表現されています。

まとめ

MySQL冗長化や、もしくはスケールアウトする仕組みとしては他にも、以下のようなものがあります。


MySQL Clusterもこれらの選択肢の中の有用な一つとして検討する時期に来ているかなとも思いますし、そのためのまさに、「MySQL Cluster」の「構築」、「運用」を行うための「バイブル」として必要な一冊じゃないかと。
名は体を表す!


スケールアウトの有力な選択肢の一つとして自分のカードにするためにも、一度お手にとってみるのがよいかとおもいます。


MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ

MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ


エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

*1:どうも今amazonでは売り切れの様です、、、カナシス

*2:当たり前ですねw

CentOS6で制限されているプロセス最大数を制限解除する

ハマったのでメモ。

Linuxでリソース制限するための仕組みのulimitがありますが、その1項目に「nproc」があります。
これはそのユーザで実行できるプロセス(スレッド)数の制限となります。


これが、CentOS5までは、

$ ulimit -u
unlimited

のように無制限だったのですが、CentOS6になって以下のように1024で制限がかかるようになりました。

$ ulimit -u
1024

そのため、デーモンとかで高負荷な処理をさせてプロセス(スレッド)が増えると処理が落ちてしまうのです。
悲しいけどこれってデフォルト値なのよね。

設定箇所は?

実際の設定は、[/etc/security/limits.d/90-nproc.conf]でされています。

# cat  /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024

という事で変更

実際の設定は、[/etc/security/limits.d/90-nproc.conf]でされています。

# cat  /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

はい!消えた!
消えたよ!


[/etc/security/limits.conf]で変更しても上書きされるので注意!

一応制限したいなら

*    soft    nproc   32768
*    hard    nproc   32768

位しておくといいかも。
戦争終結です。



詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

sedで/の置換をエスケープなしでやりたい

おっさん力その2。
sedでパス名の置換したい時に、/のエスケープすんのがめんどくさいって言ってた人がいたんで。

エスケープ

#!/bin/bash

for i in `ls /usr/local/`
do

echo ${i} | sed "s/\/usr\/local\///"

done

↓結果

bin
etc
games
include
lib
man
sbin
share
src

これでもいいんですけど、ごちゃってしてみづれーですよね。

エスケープしない

よく知られてないのかはわかりませんが、実は、s/の/部分の記号はなんでもいいのです。
ということで、このようにもかけます。

#!/bin/bash

for i in `ls /usr/local/`
do

echo ${i} | sed "s#/usr/local/##"

done

でも行けます。

まあ

このパターンならbasename使えって話ですけどね。

#!/bin/bash

for i in `ls /usr/local/`
do

basename ${i}

done


いじょー。
おれはおっさんじゃない!!!

sed & awk デスクトップリファレンス

sed & awk デスクトップリファレンス

シェルスクリプトで標準出力をファイルに出すようにする

おっさん力その1。
知らない人もいるのですなとおもって、メモ的に。

シェルスクリプトで標準出力をファイルに出す方法について
普通はあんまり使わないけど、監視サーバから叩かれるシェルのログを見たい時とかには使いますね。

テストコード

cat <<'EOF' >fdtest.sh
#!/bin/bash

# 標準出力(1)のFDを3に退避
exec 3>&1
# 標準出力をlogfileにリダイレクト
exec > logfile

echo "output file"

# 退避していたFDをもとに戻す
exec 1>&3

echo "output screen"
EOF

出力結果

kuwano@localhost:~/bin/test$ bash fdtest.sh
output screen
kuwano@localhost:~/bin/test$ cat logfile
output file

Classic Shell Scripting

Classic Shell Scripting

  • 作者: Arnold Robbins,Nelson H. F. Beebe
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2005/06
  • メディア: ペーパーバック
  • クリック: 3回
  • この商品を含むブログを見る

「ifttt」いい。instagramで取り込んだ画像をevernoteに送る

やっとでたね。

instagramのandroid版も出たことだし、instagramで取り込んだ画像をevernoteに連携しようとして「ifttt」を使ってみました。

今までは

picplzで取り込んだ画像を、

で変換してevernoteに送ってたんですが、instagramと「ifttt」だと無駄な事しなくて済むのでいい感じです。


picplz使ってて、これはこれで良かったんですけど、instagramの方がフィルタがカッコイイ、、、。
のと、「ifttt」の連携が素晴らしかったので乗り換えてみました。

ifttt

Webサービス間の連携をやってくれるサービスで、今回はinstagramに使ったんですけど、



これくらいのサービスに対応してて素晴らしいです。

などなど、、、。
それPlag(ry 、、、じゃなくてそれiftttで出来るよって感じです。

手順

ユーザ登録

ユーザ登録しましょう



「Sign Up」をクリック



ユーザ名、メールアドレス、パスワードをいれて「Create Account」で完了

タスクの登録

サービスは「Channnels」、連携は「Tasks」という形で登録します。



まずは、右上の「Channels」をクリック



連携出来るサービスがでてくるのでEvernoteのアイコンをクリック




EvernoteのActivation登録をすると、ifttt経由でEvernoteが使えるようになります。



次に、連携できるサービス一覧から、「Instagram->Evernote」をクリック



その設定詳細がでます。
これはどのような形でEvernoteに登録するかを記述します。

  • タイトル
  • ノートの内容
  • 登録するNotebook(自分が登録したいNotebookの名前をいれる)
  • つけるtag

になります。とりあえずNotebookだけ変更しておけばそのままでOKだとおもいます。



そうするとタスクが登録されているので、これでOKです。

他にも

とかのサービス連携が用意されているので、必要な物があれば、「Recipes」から探してみるとよいですな。


Evernoteの情報の海に埋もれないようにしましょうw


EVERNOTE HACK

EVERNOTE HACK