Contenu connexe
Similaire à 『Ficia』インフラとPerlにまつわるエトセトラ
Similaire à 『Ficia』インフラとPerlにまつわるエトセトラ (20)
『Ficia』インフラとPerlにまつわるエトセトラ
- 2. 自己紹介• ひろせ まさあき • id:hirose31 • http://twitter.com/hirose31• えとらぼ(株) • インフラの設計・構築・運用管理
- 4. アジェンダI. mod_perl 2 Tips & Tricks • メモリ関係のパラメータチューニング • Tips 3II. 構成・運用支援ツールとPerl • MATRIXとその周辺
- 5. I mod_perl 2Tips & Tricks Linux kernel 2.6.29.X Apache 2.2.X (Prefork) mod_perl 2.0.4
- 9. メモリ使用量の計測• ざっくりなら • ps, top• fork(2) - Copy on Write • 書き込みがあるまで親プロセスと同 じページをポイント • 親との共有領域と固有領域
- 10. CoW httpd httpd httpd libperl libperl libperlloaded loaded loadedmodules fork modules modules(startup.pl) (startup.pl) (startup.pl) variables variables variables 親 子 子
- 11. CoW httpd httpd httpd libperl libperl libperlloaded loaded loadedmodules fork modules modules(startup.pl) (startup.pl) (startup.pl) variables variables variables loaded modules variables 親 子 子
- 13. PID VSZ RSS SHARED20765 346040 59376 59064 ( 99%)20768 346040 59376 59064 ( 99%)20799 346040 59376 59064 ( 99%)20802 346040 59376 59064 ( 99%)
- 14. PID VSZ RSS SHARED20765 346040 59376 59064 ( 99%)20768 346040 59376 59064 ( 99%)20799 346040 59376 59064 ( 99%)20802 346040 59376 59064 ( 99%) PID VSZ RSS SHARED20765 433476 113716 45844 ( 40%)20768 433032 113432 46736 ( 41%)20799 434688 115000 45736 ( 39%)20802 435160 115548 45728 ( 39%)
- 15. 太る PID VSZ RSS SHARED20765 346040 59376 59064 ( 99%)20768 346040 59376 59064 ( 99%)20799 346040 59376 59064 ( 99%)20802 346040 59376 59064 ( 99%) PID VSZ RSS SHARED20765 433476 113716 45844 ( 40%)20768 433032 113432 46736 ( 41%)20799 434688 115000 45736 ( 39%)20802 435160 115548 45728 ( 39%)
- 17. 太る#1 対策• 使うモジュールは起動時に親プロセスでロード する • PerlPostConfigRequire startup.pl• モジュールの一覧は? • PerlResponseHandler Apache2::Status • Loaded Modules で一覧を確認☺ロード済みなので即戦力
- 26. StartServers {Min,Max}Spare fork!#procs fork! fork! fork! t
- 27. StartServers {Min,Max}Spare fork! fork!#procs fork! fork! fork! fork! fork! fork! t
- 29. StartServers ={Min,Max}Sparefork!fork!#procsfork! idlefork!fork! t
- 30. StartServers ={Min,Max}Sparefork!fork! ♪∼#procsfork! idlefork!fork! t
- 31. StartServers ={Min,Max}Sparefork!fork! ♪∼ ♪∼#procsfork! idlefork!fork! t
- 36. PerlOptions• Clone • VirtualHostごとにインタプリタ プールを持つ (threadモードのとき のみ?)• Parent • VHごとにインタプリタプールを持つ (=Clone) • VHごとに親インタプリタを持つ
- 39. #1 PerlSwitches とsymlink• PerlSwitches • -I/path/to/mylibdir • -Mlib=/path/to/mylibdir• 指定パスがsymlinkだと探しに行かない • failed to resolve handler...
- 40. #2 VirtualHostごとに ErrorLogを吐きたい • トップレベルのserverコンテキストの ErrorLogに出力されてしまうwarn "Test: warn"; # warndie "Test: die"; # dieeval q[my $v2 = "3:" + 4;]; # evalmy %h1 = qw(foo bar baz); # 実行時エラーprint STDERR "Test: STDERRn"; # STDERRmy $v1 = "2:" + 3; # use warnings(undef) . "xxx"; # use warnings
- 41. #2 VirtualHostごとに ErrorLogを吐きたい • warn #httpd.conf PerlOptions ... +GlobalRequest • die • eval #Handler use Apache2::Log (); • 実行時エラー $SIG{__WARN__} = &Apache2::ServerRec::warn;• STDERR *STDERRをtieしてprint STDERRを Apache2::ServerRec::warnにする• use warnings 未解決 情報求む!
- 42. #3 init.d/httpd• 問題点• stop • stopしたのに新規リクエストが来ちゃう • ロードバランサのヘルスチェック間隔• start • 起動直後にリクエストがきちゃう • fork(2)しまくって高負荷なのでちょっ と待ちたい
- 43. #3 init.d/httpd• httpdが生きている状態でも、LBの VirtualServerGroup(VSG)から離脱できる ようにする• LBのヘルスチェックURLを動的なものに • curl -H ‘Host: health’ http://svXXX/alive.php • フラグファイルによってres codeを変える • touch -t +1 hours /tmp/stop-sv • now - mtime <= 5分 ? 503 : 200
- 44. #3 init.d/httpd• stop • configtest • ロードバランサのVSGから離脱 • apachectl -k graceful-stop • clear semaphore (ipcs -s, ipcrm)• start • VSGに参加しないようにする • configtest • apachectl -k start • sleep 3 && VSGに復帰
- 47. 問題提起• サーバがたくさんあると・・・ • どのサーバがどの役割だっけ? • 1サーバで複数の役割を持ってるさらに混乱 • 役割変更のたびにOSインストールと か・・・• 管理情報がいろんなところにあって収集つか ない
- 49. svNNNrealname MATRIX (XXX) remark sv101: <lv1> sv102: <ll2> [TTNNN] sv103: <lv2> Complex sv104: <ll1><TTNNN> systemname sv105: <co1> (core) Archetyp sv106: <co2> sv107: <ap101> ficia irori [mc101] XXXXX sv108: <ap102> ficia *FREE* assigned prj sv109: <ht101> ficia irori [qu101] sv110: <ht101> [qu102] sv111: <db101> (db100) sv112: <db102> *XXX* sv113: <st101> (st100) special state sv114: <st102> sv115: <ap103> ficia *STOP*
- 50. Archetyp and Complexsv101 sv102 sv103 / / /
- 51. Archetyp and Complex core Web Web static app sv101 sv102 sv103Archetyp / / /
- 52. Archetyp and Complex Q4M kumo Q4M log core kumo Web Web static app mcd sv101 sv102 sv103Archetyp / / /Complex
- 54. Generate• as YAML • ganglia (PHP) • Archer (Perl)• Nagios host.cfg• OS起動時に読む用(役割切り替え) • shでハンドリングしやすい形式
- 57. MATRIXと その周辺edit! MATRIX sv101: <lv1> sv102: <ll2> sv103: <lv2> sv104: sv105: sv106: <ll1> <co1> <co2> (core) ... sv107: <ap101> ficia irori [mc101] sv108: <ap102> ficia *FREE* sv109: <ht101> ficia irori [qu101] sv110: sv111: <ht101> <db101> [qu102] (db100) activate sv112: <db102> sv113: sv114: sv115: <st101> <st102> <ap103> (st100) ficia *STOP* matrix ...
- 58. まとめI. mod_perl 2 Tips & Tricks • メモリ関係のパラメータチューニング • Tips 3II. 構成・運用支援ツールとPerl • MATRIXとその周辺