Your SlideShare is downloading. ×
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
『Ficia』インフラとPerlにまつわるエトセトラ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

『Ficia』インフラとPerlにまつわるエトセトラ

4,306

Published on

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,306
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 『Ficia』インフラと Perlにまつわる エトセトラ ひろせ まさあき id:hirose31
  • 2. 自己紹介• ひろせ まさあき • id:hirose31 • http://twitter.com/hirose31• えとらぼ(株) • インフラの設計・構築・運用管理
  • 3. http://ficia.com
  • 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
  • 6. mod_perl 2 Tips & Tricks メモリ関係の パラメータ チューニング
  • 7. 推測するな計測すべし
  • 8. 計  測 ↓パラメータの調整
  • 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 親 子 子
  • 12. 共有領域の計測• /proc/PID/smaps (kernel >=2.6.14) • 共有領域 = Shared_Clean + Shared_Dirty• shared_memory_size.pl $(pgrep httpd) • use Linux::Smaps • id:naoya♥♥
  • 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%)
  • 16. 太る#1 原因• 子プロセスが、後でロードしたモジュー ルの分• CoW故に※子プロセス間ではメモリ共有はしない
  • 17. 太る#1 対策• 使うモジュールは起動時に親プロセスでロード する • PerlPostConfigRequire startup.pl• モジュールの一覧は? • PerlResponseHandler Apache2::Status • Loaded Modules で一覧を確認☺ロード済みなので即戦力
  • 18. 太る#2 原因• Perl内でのメモリアロケーション • メモリプール的な?• もりもり太る例 • slurp的な一気読み • File::Find - 再帰のせい?• パフォーマンス、利便性との兼ね合い
  • 19. 太る#2 対策• 太っているモジュールを探す • Apache2::Status + B::TerseSize • Memory Usage で一覧を確認
  • 20. 太る#2 対策• メモリ食いのモジュールを: • 他のモジュールを使う • コードに手を入れる • スルー
  • 21. 計  測 ↓パラメータの調整
  • 22. httpd.confStartServersMinSpareServersMaxSpareServersMaxClientsMaxRequestsPerChild
  • 23. httpd.conf• {Start,{Min,Max}Spare}Servers, MacClient • smapsの結果と搭載メモリを鑑みて計算 • 増減があるので、実際に変更して様子を 見る • 「swapしたら負けかなと思ってる」
  • 24. httpd.conf• {Start,{Min,Max}Spare}Servers, MacClient • 全部同じ値にして、起動時に一気に fork(2)する • reqが来てはじめてよっこらせと fork(2)するのは時間がもったいない • 起動時にload avgが上がるのは運用で 回避(Tipsで後述)
  • 25. StartServers {Min,Max}Spare#procs t
  • 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
  • 28. StartServers ={Min,Max}Spare#procs idle 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
  • 32. Apache Process Report
  • 33. httpd.conf• MaxRequestsPerChild • そこそこ小さい値に • 早期刈り取り • 肥大化 • リーク
  • 34. httpd.confStartServers 42MinSpareServers 42MaxSpareServers 42MaxClients 42MaxRequestsPerChild 64
  • 35. httpd.confPerlOptions +ClonePerlOptions +Parent
  • 36. PerlOptions• Clone • VirtualHostごとにインタプリタ プールを持つ (threadモードのとき のみ?)• Parent • VHごとにインタプリタプールを持つ (=Clone) • VHごとに親インタプリタを持つ
  • 37. +Parent• VirtualHostごとに空間を分離できる • メモリ空間 • 名前空間• 反面、メモリ使用量が増える • multi Parent VS multi instance
  • 38. mod_perl 2 Tips & Tricks Tips 3
  • 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に復帰
  • 45. 続いて
  • 46. II構成・運用支援ツール とPerl
  • 47. 問題提起• サーバがたくさんあると・・・ • どのサーバがどの役割だっけ? • 1サーバで複数の役割を持ってるさらに混乱 • 役割変更のたびにOSインストールと か・・・• 管理情報がいろんなところにあって収集つか ない
  • 48. 解決案• 構成管理情報の一元管理• テキスト形式 • 人が読めて編集できる• 数十台ならこんな簡単な形式でもOK
  • 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
  • 53. MATRIXの反映• activate-matrix (with Perl) • 3 steps 1.ActivateMATRIX::Generate::* 2.ActivateMATRIX::Execute::* 3.ActivateMATRIX::Suggest::*
  • 54. Generate• as YAML • ganglia (PHP) • Archer (Perl)• Nagios host.cfg• OS起動時に読む用(役割切り替え) • shでハンドリングしやすい形式
  • 55. Execute• 起動時にMATRIXを読んで、あとは参照せず にループするdaemonの類いを再起動/再読 み込み• monitor-ping (AnyEvent::FastPing)
  • 56. Suggest• 残作業とかを表示 • 自動でやるのはちと怖いのとか• ロードバランサへの反映手順 • generate config, copy , diff, apply
  • 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とその周辺
  • 59. ご清聴ありがとう ございました

×