鯖屋のお仕事ってどーよ 大規模サイトの為のLinuxカーネルチューニング 関西オープンソース 2004 ステージ 2004年10月22日 13:45 - 14:00 もりかわひろかず はじめに • SunOS4, Solaris2, FreeBSD系で育ってきた鯖 屋が、1999年に Linuxでの大規模サーバ(大規 模なweb、メール、共有型仮想サーバ)の運用 を試行錯誤しながら行い、肌で感じた Linux kernel の体験記(格闘記)をお話し、それを通じ て運用の現場の姿を感じていただけたらと思 います 遠い昔… A long time ago in the UNIX far, far away…. • 1994年頃からインターネットサーバのSIを手がけてい た • その頃、Solaris 2系が安定してきて、SunOS4を捨て てSolaris 2系に移行していた • PC-UNIXは*BSD系しか選択肢無し • 当時、Linux系はnetwork系の信頼性が無いという話 で、実際のサービスには使わなかった (冒険はしたくなかった) • 安定性があり、運用ノウハウが多いOSを選択した 枯れたOS • 実際の業務に使用するOSの選択に際しては、 枯れたOS(信頼性があり、安定して、ノウハウ も蓄積された)を選択するでしょう • 大規模なサーバ運用にも枯れたチューニング の定石があった なぜチューニングが必要なのか • 一般的な使用状況を想定してる – 無駄なリソース浪費を避けるため • 安全性を確保するためにリソース制限をしている – open files, memory, process…etc – 各ユーザごとのリミット • 何につかうのか? その用途に合わせてチューニングする必要がある – リソースを消費してもスピード優先という用途 – DBのような巨大アプリを動かすという用途 – たくさんのユーザを安全にさばくという用途 定石 • Solaris系では – /etc/system の maxusers, rlim_fd_max, rlim_fd_cur • maxusersを変更することによってkernel内のテーブルサイズを自動 的に調整する – (BSD系であるSunOS4から引き継いだ) – あとはnddでdriverのconfigurationをさわる • 挙動を見てNetwork系のパラメータを変更 – 大規模なDBサーバやroot DNSにも実績がある – 世の中に書籍やよくまとまったtuning 系の tips Web Siteが あった 定石 (2) • FreeBSDでは – Kernel configuration の maxusers, NMBCLUSTERS をさわ る • 今は maxusers=0 にしておけばハードのスペックを見てよしなに設 定してくれる kernel recompile すら不要で /boot/loader.confにホゲっておわり – FD_SETSIZE, SOMAXCONN系の調整 • sysctl と アプリ側の調整 • 学術分野での長年のノウハウ蓄積 • 過 負 荷 で 悲 鳴 を あ げ て も 予 測 の 範 囲 (調整の範囲) Linux を使え! • 1999年 Linuxバブル全盛期 • 営業サイドから Linux を使えとのご命令 – お客様はLinuxを望んでおられる (お客様は神様です) – お客様のニーズに早く対応すべき • Linux 2.2.11-ac? ぐらいから安定してきたという噂が あった • ちょいとLinuxさわってみるのもいいかな • まー UNIX(like)だしなんとかなるかー おどろいた! • おそろしく速い filesystem – 恐れていた障害時の不整合は皆無 • 意外と丈夫じゃん • I/Oが早いのは大規模なWebサーバにとっては うれしい • さっと動かしたら安定してるじゃん • 結構 Linux ラヴ☆かもぉ 限界まで鯖をシバク Size matters not. • こんな鯖 – ps ax | wc -l 1115 – cat /proc/net/sockstat Sockets: used 643 TCP: inuse 637 orphan 45 tw 71368 alloc 641 mem 796 • Apache combined format の access log が 1 日で6GB以上 定石(3) • 2.4.x Linux では – システム中のファイル・ディスクリプタ数の上限を緩和する • echo "32768" > /proc/sys/fs/file-max – ユーザ毎のファイル・ディスクリプタ数の上限を緩和する • ulimit -n unlimited – ユーザ毎の起動するプロセス数の上限を緩和する • ulimit -u unlimited – セマフォの設定の上限を緩和する • echo "250 32000 128 1024" > /proc/sys/kernel/sem – ネットワークキューの上限を緩和する • echo ”2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog 不可解な挙動 Linuxの心が解るまでの道のり • • • • • • • • 定石の調整はやっていたが… ふつーにつかってるかぎりはすごく安定していた むちゃな使い方したらMM系で不可解な挙動 メモリーは余裕があるのに突然のOOM-kill ドライバからはバッファが足りないとの悲鳴 なぜ急にメモリーが足りなくなるのぉ なぜ極端にパフォーマンスが悪くなるのぉ 2.2の途中までは過負荷時に突然死も – ぐはっ吐血! Linuxの心が解るまでの道のり(2) • 当時は、Linuxを用いた大規模サーバの運用ノウハウの情 報が不足 • Linux関連書籍は多いが入門書(インスコ本)ばっか • おしえてGoogle! – しかし、当時はまとまった情報は無し • できるヤツはそんなの当たり前でわざわざとりたてては書 かない!? • kernelあげろ、メモリー増やせ攻撃 – 本質の議論無し 不可解な挙動の例 No! Try not. Do, or do not. There is no try. • パフォーマンスがよかったので採用したIntel EtherExpress Pro/100 で当時 2.2 のドライバ eepro100 が過負荷時に eth0: can’t fill rx buffer のメッセージをはきまくる • (その当時は Linux でそのNICを使うことを嫌う 人もたくさんいた) 不可解な挙動の例(2) • Googleで検索したら、同じように困ってる人ちらほら • ズバリの解決策は見付けられなかった – ふつーに使ってる限り出ないもん • お決まりの監視 – – – – vmstat 1 watch -n 1 ’cat /proc/meminfo’ watch -n 1 ’cat /proc/slabinfo’ watch -n 1 free 不可解な挙動の例(3) • どうも、そのメッセージを吐く時は MemFree が極端に少なく なっているっぽい • しかし、Buffres, Cached はふんだんに確保されている • そのあたりに秘密がありそう • /proc/sys/vm あたりで tuneable な物を探すとbdflushと freepages(2.2の場合) が怪しい 不可解な挙動の例(4) • /usr/src/linux/Documentation を読む – ここでもカルチャーショック受る • メンテされてない(^^;;; • man も嘘書いてる場合もあるし… • /proc/sys/vm/freepages を増やしてやると現象はおさまるよ うだ • freepages をキーワードにざっと kernel の source を追っかけ てみた – なんか謎な閾値やら定数やら… • Memory Management subsystem 怪しいなぁ Linuxの心が解るまでの道のり(3) Use the source, luke! • 「KISS principle」”Keep it Simple, Stupid”, “Keep it Simple and Small”には共感するが… • コア開発者が議論している kernel mlやMM ml をあさ る • MMごっそりかえちゃえ的なノリ • AndreaさんとRikさんが喧嘩してるしぃ • 仕切りまくる Alan Cox 氏 • 慎重な Linus 氏 Linuxの心が解るまでの道のり(4) No! No different! Only different in your mind. • 猥雑だけどパワフル • *BSD系にはない面白さ (猥雑さが嫌いという意見もよく解るけどね) • 自分が同時代的に参加しているのだという気になる し、参加せざるを得ない面白い開発コミュニティー • というわけで自分も何かしようと1999年から kernel tuning 系 tips を Web siteで書き始めた (今ではいろんな所にいっぱい情報が出てます) 枯れないOS とーれとれぴーちぴちLinux • “枯れ”とは無縁 • 日々改善、日々実験 – ハードウェアやnetwork環境はものすごく変化している – それにつれて kernel も変化している • 現実のサービスに使っていいかどうかは議論がある が(安定性、信頼性の面で) • 処理が速いのは得難いメリット • “今”はかなりいいよね – いつも”今”が旬 おまけ • 最近のディストリビューションのkernelなら安定してま す • 特にサーバ用として提供されている物であれば変更 を加えることも不要 (のはず) • 自身でkernelをcompile場合は、-ac, -aa, -mm 等の patchを吟味した上で、必要に応じた物を当てたほう がいいです • 素のリリースのままでは不具合がでるパターンもある • 2.4.x では -rmap は有効かも • そろそろ 2.6.x にかえる時期かも May the source be with you! • • • • • • • http://www.kernel.org/pub/linux/kernel/people/alan/ (-ac patch) 旅に出ますた! http://www.kernel.org/pub/linux/kernel/people/andrea/ (-aa patch) http://www.kernel.org/pub/linux/kernel/people/akpm/ (-mm patch) http://linux-mm.org/ the home page of Linux-MM http://surriel.com/patches/ Rik van Riel's Linux kernel patches (-rmap VM patch) http://www-didc.lbl.gov/TCP-tuning/ TCP Tuning Guide http://www.nxhack.tarumi.kobe.jp/linux_kernel_tuning.html 私のWeb
© Copyright 2024 ExpyDoc