タグ

ブックマーク / hirose31.hatenablog.jp (22)

  • いっぱい接続したいの - (ひ)メモ

    とあるホストに、TCP接続を張っては切るという処理をぐるんぐるん繰り返すベンチマーク的なプログラムを書いて動かしました。 最初のうちは期待した通りの動作をしてるんですが、途中から対向のホストにTCP接続できなくなってエラー出まくり。 $ netstat -tna | grep TIME_WAIT | wc -l 28230これが原因ぽい。 KERNEL_SOURCE/Documentation/networking/ip-sysctl.txt によれば、 ip_local_port_range - 2 INTEGERS Defines the local port range that is used by TCP and UDP to choose the local port. The first number is the first, the second the last loc

    いっぱい接続したいの - (ひ)メモ
  • dstatの万能感がハンパない - (ひ)メモ

    サーバーのリソースを見るにはグラフ化は重要ですが、推移ではなくリアルタイムな状況、例えば秒単位のスパイキーな負荷を見るには、サーバー上でvmstatやiostatなどの*statファミリーを叩く必要があります。 さて、vmstatはメモリの状況やブロック数単位のI/O状況は見られますが、バイト単位のI/O状況やネットワークの送信、受信バイト数を見ることはできません。 # vmstat 1 procs -----------memory---------- ---swap--- -----io----- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 3 1 0 4724956 355452 726532 0 0 54 484 3 3 1 0 99 0 0 2 0 0 47

    dstatの万能感がハンパない - (ひ)メモ
  • 垂れ流されるログのおしりを追いかける - (ひ)メモ

    滝のように流れるログは見ていて楽しいのですが、見ているばかりでは仕事にならないので、 https://github.com/hirose31/chase-tail というスクリプトを書きました。 機能はこんな感じで、 ログ中のきわどいキーワードに色をつけて目立たせる HTTPステータスの「50[0-9]」とかMySQLの「Lock wait timeout exceeded」とか 秒間にある一定行数以上ログが流れたら「NOTIFY_FLOOD」と出力する iTerm 2のPreferences→Profiles→AdvancedタブのTriggersにキーワードを登録しておくとGrowlで通知できるので、「NOTIFY_FLOOD」を登録しておけば、いつよりログがビャービャー流れたときにGrowlで知ることができます ちなみに、iTerm以外のアプリがフォアグラウンドでも、chase-ta

    垂れ流されるログのおしりを追いかける - (ひ)メモ
  • Plack::Middleware::Pictogram::MobileJp - 3キャリア対応の絵文字に変換するPlack::Middleware - (ひ)メモ

    id:tokuhiromがHTML::Pictogram::MobileJpというモジュールをリリースしていたので、これを使ったPlack::Middlewareを作ってみました。 http://github.com/hirose31/Plack-Middleware-Pictogram-MobileJp 「モバイル用のHTMLのチェックを実機やFireMobileSimulatorでやりたいのだけど、&#xXXXX;で絵文字を指定するとドコモ以外のクライアントで絵文字が表示されないのでチェックにならない」 というような場合に、このMiddlewareを介して表示すれば、クライアントのUser-Agentをみてキャリアに応じた絵文字のコードポイントに変換してコンテンツを返してくれるので便利なんじゃないかと思います。 ごくシンプルですが、こんな感じで使えます。 # psgi use Plac

    Plack::Middleware::Pictogram::MobileJp - 3キャリア対応の絵文字に変換するPlack::Middleware - (ひ)メモ
  • LinuxのLVS(IPVS)でMySQLをロードバランスするときはtimeoutに注意 - (ひ)メモ

    構成 [appサーバ] -> [lvs] -> [MySQL]群 DRでMySQLのスレーブ群にロードバランス appサーバはDBコネクションのプーリング、永続化をしている 問題の現象 DBサーバ上ではmysqldへのコネクションが存在するのに、appサーバ上ではコネクションが存在しない。(netstat調べ) →無用なコネクションが残留するせいで、MySQLのmax_connectionsに達してしまう。 原因 MySQLの世界の無通信時のコネクションのタイムアウトはデフォルトで 28800秒 (8時間)。一方、IPVSの世界の無通信時のタイムアウトはESTABLISHEDなコネクションで900秒 (15分)。 # ipvsadm -Ln --timeout Timeout (tcp tcpfin udp): 900 120 300なので、DBコネクションの永続化等でコネクションを張りっ

    LinuxのLVS(IPVS)でMySQLをロードバランスするときはtimeoutに注意 - (ひ)メモ
    masa_matya
    masa_matya 2011/06/19
    lvsとmysqlのtimeoutが異なる事によって、mysql側にコネクションが残ってしまいmaxに達してしまうことがある。対応方法は4種類ある。
  • WEB+DB PRESS連載の『スケーラブルWebシステム工房』の記事を公開しましたっ! - (ひ)メモ

    だいぶ前の記事(2007/04〜2008/2の連載記事)ですが、WEB+DB PRESSで連載していた拙著の『スケーラブルWebシステム工房』の記事を公開しました。ふと、思い出したので。 連載目次 第1回 いろんなものをロードバランス ― MySQL、SMTPサーバ… 第2回 DRBDとkeepalivedで、障害性の高いストレージサーバの構築 第3回 監視にまつわるエトセトラ 第4回 LinuxとVLANで作る、シンプル&スケーラブルネットワークの極意 第5回 止まらないネットワークの極意 ― bonding × リンクアグリゲーション × スパニングツリー 第6回 見逃さない通知の極意 これらの文書は、ソフトウエアの名称、バージョン、設定項目、社名などの固有名詞などなどは当時のまま掲載しています。 ですので、インストール手順や設定内容は最新版のドキュメントを参照していただき、この文書か

    WEB+DB PRESS連載の『スケーラブルWebシステム工房』の記事を公開しましたっ! - (ひ)メモ
  • 実録、ほぼ無停止なMySQLのフェイルオーバ (動画もあるよ) - (ひ)メモ

    レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン でも掲げたゴールである、「マスタが落ちてもぐーすか寝ていられるようにしたい」がほぼできたので、ほとんどサービスが停止することなく、フェイルオーバする様をスクリーンキャストに収めました。 埋め込みプレイヤーだと、小さくてわからないと思うので、リンク直接でみてください。 http://www.irori.org/pub/mysql-mm.mov 登場するホスト 登場するホストは2台、db901db902です。 最初は、db901が更新系クエリを受けるプライマリでdb900の浮動IPアドレスを持っています。 画面分割 画面は5分割しています。 左上 = 「select sysdate(),@@server_id」をdb900に対して(sleep 1しながら)延々と実行しまくりんぐ 右上 = ping -n

    実録、ほぼ無停止なMySQLのフェイルオーバ (動画もあるよ) - (ひ)メモ
    masa_matya
    masa_matya 2010/12/24
    lvs + Dual Master + keepalived。PrimaryのMasterのみ書き込み可能
  • Regexp::Common::URI::http でURIのフラグメントがマッチしないなぁ - (ひ)メモ

    ステキな正規表現 $RE{URI}{HTTP} を使うと、テキストからURIをさくっと抜き出したりaタグで囲ったりできるんですが、フラグメント(aタグname属性値の#topみたいなの)にマッチしないんす。 なぜか? URIについてのRFCにはRFC 3986があります。で、RFC 3986はRFC 2396をobsoletesしてるんで、URIについては最新の仕様が3986で、1コ前の仕様が2396ということになります。 で、RFC 2396ではURIのBNFに含まれていなかったfragmentが、3986では含まれるようになったんす。 おそらく、Regexp::Common::URI::httpはRFC 2396の時代に作られたため、$RE{URI}{HTTP}がフラグメントにマッチしないんだと思います。 $RE{URI}{HTTP}{fragment=>1}でフラグメントにもマッチす

    Regexp::Common::URI::http でURIのフラグメントがマッチしないなぁ - (ひ)メモ
    masa_matya
    masa_matya 2010/11/09
    Regexp::Common::URI::httpはRFC2396に準拠していてフラグメントにマッチしない。
  • memcachedに張られているコネクション数を監視するNagios pluginを作ってみた - (ひ)メモ

    夏休みが終わったので宿題しました。(小ネタはありません) http://github.com/hirose31/nagios-check_memcached_connections 要 libmemcached こんな感じで。 $ ./check_memcached_connections -H mc101 -w 3 -c 5 MEMCACHED WARNING: conn 5, 0.001 seconds あわせてよみたい mixi Engineers’ Blog » mixi大規模障害について その2

    memcachedに張られているコネクション数を監視するNagios pluginを作ってみた - (ひ)メモ
  • MySQLのスロークエリログを別サーバに転送する - (ひ)メモ

    複数台あるMySQLのスロークエリログを、いちいちDBサーバにログインして読むのがめんどうくさい log_output = FILE,TABLE としてテーブルに入れてリモートからSELECTできるようにするのは? → テーブルに入れた場合、query timeとlock timeの型がTIME型になり精度が秒になってしまうのでダメ ファイルに出力したものをログサーバーにどうにかして飛ばす 10分おきとかにscpする →これでできるのはわかるけど、他にいい方法ないかなぁ syslogで飛ばすのはどうか (id:stanaka++) →srd!! スロークエリログに限らず、追記されるファイル全般に適用できると思います。 rsyslogの方がいけてるそうですが、自分が使ってるのは syslog-ng 2.0.9 なのでそ の設定例です。 DBサーバ # follow_freq(180) で 3

    MySQLのスロークエリログを別サーバに転送する - (ひ)メモ
  • 実録MySQLのチューニング 春の陣 - (ひ)メモ

    long_query_time = 0.5 とか閾値を小さめにしてもスロークエリが出なくなったけど、CPU(user)使用率高いとか、なんか足引っ張ってるクエリがあるっぽいなぁという場合のお話です。 「実録」の通り、現在絶賛進行中ですので、逐次動きがあったら書き足していくつもりです。 「あれを見た方がいい」とか「これをあーした方がいい」とかあれば、コメントかTwitterで @hirose31 までお知らせいただけるとうれしいです! 使用しているのは、MySQL 5.1.41 です。 前提: サーバーリソースのグラフ GangliaでもCactiでもMuninでもなんでもいいんですが、サーバリソースのグラフ化は必須です。チューニングした際の効果測定や、そろそろリソースい潰してやばいとかの予測にも使えます。 自分はDBサーバの場合このあたりをグラフ化してます。 CPU使用率 (user,

    実録MySQLのチューニング 春の陣 - (ひ)メモ
    masa_matya
    masa_matya 2010/05/18
    cactiの監視項目に
  • Amazon EC2シンガポールを含む、ping RTTやhttpingの計測グラフ - (ひ)メモ

    計測元は、都内のBフレッツでISPはライブドアプロバイダ。 計測とグラフ描写のコードはここに: http://github.com/hirose31/monitor-latency グラフは、紺色の線がレイテンシの平均値で、水色の範囲は最小値と最大値。 ping RTT まず、ホットなシンガポールのEC2。このグラフだけ、表示期間が1日分。だいたい90msecぐらいですね。 続いてEC2のwestとeast。この2つだけ、計測期間がちょっと古くて2010/3/27のもの。 Amazon EC2 アメリカ西海岸 125msec Amazon EC2 アメリカ東海岸 200msec あとはいろいろ。 ニフティクラウド Google JPIX はてなブックマーク 都内某iDC httping データは httping -c 10 -i 0.7 -r -g TARGET_URLの結果の最小値、平均

    Amazon EC2シンガポールを含む、ping RTTやhttpingの計測グラフ - (ひ)メモ
  • MySQLで、指定したときだけクエリキャッシュする - (ひ)メモ

    今までMySQLのクエリキャッシュはは有効にしてたんですが、Webサービスだとキャッシュヒットするようなクエリはそんなに多くないし、どこかで見かけたんですが(失念…)クエリキャッシュをオフにしたら(逆に)パフォーマンスが上がっただか負荷が下がっただかというのも目にしたので、今度クエリキャッシュはオフにしようと思ってました。(どのみちヒット率悪いし) そんなとき、同僚に query_cache_type を教えてもらいました。(4.0からあるオプションなのに今まで知りませんでした。。。><) http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type てっきりクエリキャッシュはオンかオフかしかできないと思い込んでたんですが、"DEMAND" を指定すると、「原則キャッシ

    MySQLで、指定したときだけクエリキャッシュする - (ひ)メモ
    masa_matya
    masa_matya 2010/04/07
    キャッシュを見るクエリを指定可能
  • ソースから自前ビルドしたソフトウエアの効率的な管理方法 - (ひ)メモ

    ぼくは長年こういう方法で管理してますよ、というお話です。Linuxです。 ディレクトリレイアウト概観 たとえば、asoとbmdという名前のソフトウエアをインストールしている状態はこんな感じ: /usr/local/ ┬ app/ ┬ aso → aso-1.3 │ ├ aso-1.2/ ┬ bin/ ┬ armored │ │ │ └ scrum │ │ ├ sbin/ ─ syd │ │ └ share/ ─ man/ │ ├ aso-1.3/ ┬ bin/ ┬ armored │ │ │ └ scrum │ │ ├ sbin/ ─ syd │ │ └ share/ ─ man/ │ ├ bmd → bmd-2.0 │ └ bmd-2.0/ ┬ bin/ ─ tri │ ├ include/ ─ angle.h │ └ lib/libsnk.so.2.0.0 ├ bin/ ┬ armor

    ソースから自前ビルドしたソフトウエアの効率的な管理方法 - (ひ)メモ
    masa_matya
    masa_matya 2009/12/17
    なるほど!
  • YAPC::Asia 2009で「『Ficia』インフラとPerlにまつわるエトセトラ」というタイトルでしゃべってきました - (ひ)メモ

    YAPC::Asia 2009 第一日目で「『Ficia』インフラとPerlにまつわるエトセトラ」というタイトルでしゃべってきましたのでその資料を公開します。 『Ficia』インフラとPerlにまつわるエトセトラView more documents from Masaaki HIROSE. 他の方のスライドも http://www.slideshare.net/event/yapcasia-2009 から参照できるようでっす。 以下、今回のトークの内容で参考にさせてもらったURLのリストです。 Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる - naoyaのはてなダイアリー http://d.hatena.ne.jp/naoya/20080212/1202830671 mod_perl における C10K Problem, 竹迫 良範 http

    YAPC::Asia 2009で「『Ficia』インフラとPerlにまつわるエトセトラ」というタイトルでしゃべってきました - (ひ)メモ
  • Linuxでiptablesを使ってDSRする - (ひ)メモ

    1. リアルサーバ側にもグローバルIPを振る必要がある(IPが少ないところは結構きついかも). リアルサーバでは、VIPをループバックインターフェースにIP aliasすればいいので、リアルサーバの数だけグローバルIPアドレスを消費するってことはないような。(誤読してるかも ただ、この方式だと、VIPの数だけいちいちリアルサーバにIP aliasして回らないといけないので、わりと大規模(VIPがたくさんある or リアルサーバがたくさんある)だとめんどくさいことこの上ない。 で、リアルサーバでこんなiptablesのルールを設定すれば、IP aliasしないでDSRできそうというのが主題。 VIP=10.1.1.0/24 iptables -t nat -A PREROUTING -d $VIP -j REDIRECT多分、これでいけると思うんですけどちと自信なし。検証 and 詳しい説明

    Linuxでiptablesを使ってDSRする - (ひ)メモ
    masa_matya
    masa_matya 2009/08/25
    iptablesを使って色々できる。
  • 慣習を気にせずsyslog-ngの設定をしてみた - (ひ)メモ

    たいていのsyslogのデフォルトの設定だと、 同じログが結構な量、複数のファイルに記録されて(IO負荷的、ディスクサイズ的に)無駄だなぁ 日付のフォーマットが機械処理しづらいなぁ ローテートがめんどいなぁ と思ってたので、今つくってる環境では慣習を気にせずに syslog-ng (v2.0.9) の設定をしてみたのでそのメモです。 不要なログは記録しない options { ... mark_freq(0); stats_freq(0); ... } 日付の形式を変える options { ... ts_format(iso); ... }これで、こんなの Dec 19 16:44:20 HOST ...から、こんなの 2008-12-19T14:07:52+09:00 HOST ...に変わります。 facilityごとにわける facilityごとのfilterを作る。 destic

    慣習を気にせずsyslog-ngの設定をしてみた - (ひ)メモ
    masa_matya
    masa_matya 2009/08/05
    無駄をなくした設定を
  • bashのhistoryに時刻を表示する - (ひ)メモ

    追記: HISTTIMEFORMATが使用可能なbashのバージョンを明記。あざーっす> id:kdaiba bash 3.0から(2.05bを含んでそれより以前のはダメ)使用可能なHISTTIMEFORMATという環境変数を使うと、ヒストリに時刻も記録できると同僚に教えてもらた。これは便利。 $ HISTTIMEFORMAT='%Y-%m-%d %T '; export HISTTIMEFORMAT $ man ci $ man co $ shutdown now && echo nigeteeeee | wall && shutdown -c $ history 1 2008-01-17 15:42:48 HISTTIMEFORMAT='%Y-%m-%d %T '; export HISTTIMEFORMAT 2 2008-01-17 15:42:52 man ci 3 2008-01

    bashのhistoryに時刻を表示する - (ひ)メモ
  • (ひ)メモ - そんなわきゃない>DNS RRはロードバランサの座を奪い返せるか

    チープなDNSラウンドロビンは高価なロードバランサの座を奪い返せるか つっこみどころが満載スギなのは脇においておいて、金をかけないなら、DNSラウンドロビンじゃなくて、せめて、件の記事でも紹介されている Apache 2.2のmod_proxy_balancer か、Apache 2.2じゃなくても使えるreverse proxy系の実装たち、 POUND mod_backhand Perlbal を使うべきでしょう。 んで、「L7ロードバランサ(要はreverse proxy)なんていらねっす。セッション? んなのmemcachedでシェアすりゃいいんじゃん。その方がスケールアウトしやすいしー」という向きには、LinuxでL4のロードバランサするのをオススメでします。まともなL4ロードバランサが手に入るのに、金銭的コストはゼロですってよ、オクサン! Linux Virtual Serve

    (ひ)メモ - そんなわきゃない>DNS RRはロードバランサの座を奪い返せるか
  • Nagiosのcheck_snmpで警告レベル(WARNING, CRITICAL)別に通知先を変えたい - (ひ)メモ

    やりたいこと 警告レベル (WARNING か CRITICAL) によって、通知先を切り替えたい。 WARNING は PC メールと IRC に CRITICAL は 携帯メールと PC メールと IRC に 外部ホストの監視は NRPE じゃなくて SNMP (check_snmp) を使っている。 通知先の切り替え なぜか warn と crit で contactgroup を別々にせねばという思い込みがあり、単一のservice定義では実現できなさそうと思ってたんですが、ひとつのcontactgroupに、service_notification_optionsがwのとcのcontactを入れとけば OK ですね。(thanks: @toshiak_netmark) unknownとcriticalは携帯+PCIRCに、それ以外はPCIRCに通知するようなcontact,

    Nagiosのcheck_snmpで警告レベル(WARNING, CRITICAL)別に通知先を変えたい - (ひ)メモ