コマンド備忘録 sar, pidstat, dstat

WEB+DB PRESS vol.65で紹介されていたコマンドが便利そうだったので備忘録として残しておく。

sar

さまざまな統計情報を見ることができる。
また、過去の統計値を確認することもできる。

sar 1 5 (= sar -u 1 5 )

CPU使用率に関する情報を1秒毎5回表示する。

sar -W 1 5

スワップに関する情報を1秒毎5回表示する。

sar -q 1 5

ロードアベレージやタスクのランキューに関する情報を1秒毎5回表示する。

sar -r 1 5

メモリに関する情報を表示する。

sar -u -P ALL 1 5

プロセッサ毎にCPU使用率に関する情報を1秒毎5回表示する

pidstat

プロセス単位で統計情報を参照できる.

pidstat -u

すべてのプロセスについて、プロセス毎にCPU使用率に関する情報を表示する。

pidstat -u -p 2022

PIDが2022のプロセスについて、CPU使用率に関する情報を表示する。

dstat

vmstat,iostat,netstat,ifstat といったツールを置き換えるために開発された。
プラグインによる高い拡張性を持つ。

dstat --cpu --sys --disk --net 1 3

CPU、スワップ、ディスク、ネットワークに関する統計情報を1秒毎3回表示する

dstat --top-io

最もIOをしているプロセスを表示する

YAPC::Asia Tokyo 2011に行ってきた。感想というより反省。

1ヶ月近く経つのに、未だに自分の中でYAPCが終わってなかったのでいい加減終わらせておく。



タイトルの通りYAPCに行って来た。
二日間のチケットを買ってはいたんですが、一日目は仕事があって不参加。
二日目は寝坊してしまい遅刻して参加、70周年講堂でのセッションをずっと聞いていた。



今回のYAPCでは、前職での先輩と久しぶりに会え色々お話できて楽しかった。
ここ1年インプットを頑張ったおかげか、以前は考えられないぐらい先輩と技術的な話をでき盛り上がることができたのは、ほんとに良かったと思う。



ただ、それ以外の方との交流をほとんどしなかったのはすごい反省点だった。
特に、Hokkaido.pmの方もいらっしゃっていたようなのに、声をかけたりすることをしなかったのは反省したい。
引っ込み思案な自分の性格をもうちょっとなんとかしないと。
自分に自信がなかったりするのが原因の一端を握っているのは間違いないと思うので、自信をつけるべくアウトプットなどの行動をもっと積極的にやっていかないといけない。
(と思いつつも、相変わらず行動できてない。。。)
来年のYAPCでは、もっと交流できるようになっておきたいと思う。



あと、社内勉強会でkazeburoさんの「運用しやすいWebアプリケーションの構築方法」の資料を使い情報共有をさせてもらった。
残念ながら寝坊してライブで聞くことはできなかったので、youtubeにあがっている動画を3回聞いて伝えたかったことが漏れないようにさせてもらった。
youtubeの動画、非常に助かりました!運営スタッフの方あげてくださってありがとうございます。


というわけで、YAPCに参加してない方も動画を見てみるといいと思う。
再生数がまだまだ少ないのが寂しいので。

互換表示の罠

開発環境をIE8で表示した場合、jQueryで作っていたUIがうまく動かないことに気がついた。
本番環境では問題なく動いている状態だったが、開発環境の該当のソースコードをいじった覚えはなく、すごく悩んだ。
過去の経験から、こういう場合は自分が何かやらかしてると考えるのが妥当だったのでうまく動作してる本番環境との差分をとってみるが・・・差分はなかった。


改めてIEをよく見てみると開発環境では互換表示のボタンがないことに気がつく。
もしかして、互換表示がなにかしらやらかしてるのかと思いツール→互換表示設定を開いてみると・・・。


このように、"互換表示でイントラネット サイトを表示する"にチェックが付いてる。
このチェックを外すことで、互換表示が解除され無事UIが動き始めた。


結論:IE死ねばいいのに。

cookieの罠

IEで本番環境(example.jp)でログインしたのちに、サンドボックス環境(sandbox.example.jp)にログインしようとすると、ログインはできるがページを移動しようとするとまたログイン画面が表示される不具合の解決を依頼される。


また、IEかよ・・・と思いつつ、おそらくcookieが原因だと思われたのでそのあたりを重点的に調べた。

本番環境で発行されるSet-Cookieヘッダ

Set-Cookie: session=926c870b5f12b60d6cdf550ca7e01b00b8793768; path=/; expires=Tue, 25-Oct-2011 17:39:56 GMT; HttpOnly

サンドボックス環境で発行されるSet-Cookieヘッダ

Set-Cookie: session=6f071365d542a347024eb9a9d9340ff02447469a; path=/; expires=Tue, 25-Oct-2011 17:39:57 GMT; HttpOnly

リクエストヘッダのcookie部 to sandbox on Firefox

Cookie: session=6f071365d542a347024eb9a9d9340ff02447469a

リクエストヘッダのcookie部 to sandbox on IE

Cookie: session=926c870b5f12b60d6cdf550ca7e01b00b8793768; session=6f071365d542a347024eb9a9d9340ff02447469a

!?

IEでは、本番環境で発行されたcookieまでリクエストに含んでる。
IEFirefoxどっちの挙動が正しいのか分からなかったのでCookieについてもっと調べた結果、どうやらIEcookieのdomain属性の解釈に不具合あり、"example.jp" と ".example.jp" に違いがなく、すべて".example.jp"として解釈される模様。

IE非対応です

とはさすがに言えるはずもないので、sandbox環境でのnameを変更することで対応。
無事、問題解決。


結論:IE死ねばいいのに。

binlogでdiskfull

重たい集計処理を改修したので、集計結果に誤りがないか確認をしたかった。
そのテストのために、集計対象のデータを本番のDBからdumpし開発環境に突っ込んだ結果diskfull。
原因は、binlogでした。*1 *2

解決方法は2つ

  1. LVMで開発環境下なので、容量を足す
  2. binlogを消す

1の方法ですぐに解決したと思うが、
binlogの削除をやったことがなかったので2つめの方法をやることに。

binlogの削除 - purge master log

ぐぐったら、purge masger log でbinlog削除できそう。
でも、diskfull状態でうまくいくのか → うまくいきませんでした。

binlogの削除 - rm

purgeがうまくいかなかったので、rmすることに。
さて、MySQLが動いている状態でrmしていいものか。
すくなくとも、現在openされているbinlogをrmで削除するのはマズイ気がする。
よって、MySQLを止めた後にrm。
ついでに、binlogを吐かないように設定変更しMySQL起動。

まとめ

開発環境だからって対応が適当すぎだと書いてて思った。
あと、いい加減会社に鍵本を持って行かないと。

*1:dumpしたファイルは1Gほどあった。対象データが少ない期間でテストするべきだった。

*2:過去に開発環境でsslなreplicationのテストをしたため、binlogを出力するようにしていた。

Maybeを知った。

package Test;

use Mouse;

has hoge => (
    is  => 'rw',
    isa => 'Str',
);

package main;

my $test = Test->new;
$test->hoge( undef );

こんな感じで、isaでStrを指定したアトリビュートにundefを書き込もうとすると怒られる。

理由は簡単で、Str型は文字列ではないundefを書き込むことができないというだけ。

これを知らなかった。勉強不足ですね。


文字列とundefも入れたいという場合は、以下のようにMaybeを使うといい。

has hoge => (
    is  => 'rw',
    isa => 'Maybe[Str]',
);

Imager::QRCodeではまった。

pngQRコードを作ろうとしていろいろとはまった。

pngのフォーマット対応してないよってエラーが出てる。


libpngがインストールされてないか確認。


libpngインストールされてる。


何だこれ状態。でいろいろ調べる。


tokuhiromさんのエントリーを見つける。
http://d.hatena.ne.jp/tokuhirom/20100813/1281692841


Imagerインストール時に、必要なライブラリがない場合それに対応するフォーマットは使えないこと、
Imager::File::PNGや、Imager::File::GIFが別ディストリビューションになってることを知る。


cpanm Imager::File::PNG


無事、QRCodeが作れました!

自分へのいましめ。

$imager->errstr で、エラーが取得できることに気づくまでに1時間ぐらいかかってることのほうが問題。