name: overview class: title, smokescreen, shelf, no-footer # 第03回 サーバプロセスの様子 <div class=footnote> <small> </small> </div> --- class: compact # サーバ機では複数のプロセスを走らせるのが普通です <div class=footnote> <small> <small> (脚注) nginxは「えんじんえっくす」と発音します </small> </small> </div> - 3年生の演習では、自作のwww.pyをベースにしていますが <br> <B>www.pyは演習のために、いろいろ簡略化されたプログラム</B>です <small> - 前回、確認したように、プロセスは一つだけで`/usr/bin/python3`です(その引数がwww.py`) </small> - 実運用のサーバではapacheやnginxといった定番のWWWサーバを使いますが <br> www.pyとは、だいぶ様子が違います - その様子をpstreeコマンドで調査してみましょう --- class: compact # 実行例: pstreeコマンドを使いサーバプロセスを調査 <div class=footnote> <small> <small> (脚注) このあと各自にEC2上で実際に確認してもらいます </small> </small> </div> ``` $ pstree -a systemd --system --deserialize 36 |-agetty -o -p -- \\u --noclear tty1 linux ... 省略 ... |-nginx | |-nginx | |-nginx | `-nginx ... 省略 ... |-sshd -D | `-sshd | `-sshd | `-tcsh -c pstree -a | `-pstree -a ... 省略 ... ``` --- class: compact, col-2 # 複数のnginxがWWWクライアントの相手をします <div class=footnote> <small> <small> (脚注) 親子ってなんだよ?と言う話がありますが、詳細は学部の授業では省略します </small> </small> </div> (前頁の解説の続き) ``` |-nginx | |-nginx | |-nginx | `-nginx ``` - nginxの1つの親プロセスと3つの子プロセスからなります - 左側にある1つのnginxが親プロセス - インデントが1段さがっている3つのnginxが子プロセス --- class: compact, img-right # 統計多重効果 ![](../../images/statistical_multiplexing.png) - ブラウザ(WWWクライアント)からのHTTP/HTTPSはnginx子プロセスが代わりばんこに相手をします <small> - IO(ファイルやネットワークごしの読み書き)の待ち時間はバラバラなので、 複数の子プロセス群が相手をした方が"全体として"処理が速くなります </small> - 右図が統計多重効果のイメージ <small> - AがHDD/SSDへの読み書きに行っている間は待つだけなので、 その間にBの仕事をすれば<B>全体として効率的</B>です - <B>各ユーザごとの話ではなく全体として長時間の統計をとれば効率的</B>ということです </small> --- class: compact, col-2 # pstreeの出力結果のsshdのところは、どう読むの? <div class=footnote> <small> <small> (脚注) 20世紀末からsshといえばOpenBSDプロジェクトが開発しているopensshのことです。 もともとsshというソフトウエアがあったのですが、 ある時ライセンスが変更されてしまいました。 そこで、 ライセンス変更前の古いバージョンをベースにOpenBSDの人たちがopensshを開発し、 その後もずっと保守してくれています。 本家のほうは... うちらは使いませんが、 OSSを信じない大企業がお金出して使ってるんではないでしょうか? しらんけど... </small> </small> </div> ``` |-sshd -D | `-sshd | `-sshd | `-tcsh -c pstree -a | `-pstree -a ``` <small> - sshd (ssh daemon;openssh のサーバプロセス) - 階層構造がnginxと違い深いですが、 それはopensshのセキュリティ対策のため(詳細略) - `tcsh -c pstree -a`の行が<B>シェル</B>です。 sshが成功すると現れる`$ `などのプロンプトは、このシェルが出しています。 - 一番下の`pstree -a`行が、シェルの上で実行したpstreeコマンド(この出力の元)です - この例はユーザ1人ですが、複数ユーザならsshdの子プロセスがユーザの数だけ起動しています </small> --- class: compact,img-right # 図解: 階層化もしくは木構造 ![](../../images/unix-dirhier.png) <small> - ホームページのHTMLファイル(`/home/admin/htdocs/index.html`)を階層化された箱の絵を描くと右図のような感じですかね - プロセスも同じように階層化されています - 木構造ともいいます ``` systemd --system --deserialize 36 ... 省略 ... |-sshd -D | `-sshd | `-sshd | `-tcsh -c pstree -a | `-pstree -a ... 省略 ... ``` </small>