今更htopを使って気づいたのですが…
htopでH2Oのプロセスを見るとこんなにあったっけ???実際にtopコマンド、psコマンドだと…
1 2 3 4 5 6 7 8 9 |
$ ps aux |grep h2o root 1721 0.0 0.3 41312 3520 ? Ss May11 0:00 perl -x /usr/share/h2o/start_server --pid-file=/var/run/h2o/h2o.pid --log-file=/var/log/h2o/all-virtual.error.log --port=0.0.0.0:80 --port=0.0.0.0:443 -- /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20571 0.0 1.2 412448 12504 ? Sl 06:25 0:15 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20595 0.0 0.3 189264 3152 ? Sl 06:25 0:06 /usr/sbin/h2o -c /etc/h2o/h2o.conf root 20619 0.0 0.4 19132 4268 ? S 06:25 0:00 perl -x /usr/share/h2o/annotate-backtrace-symbols $ pgrep h2o 20571 20595 |
2個しかない。今回SREチームでこれなんなのと言及しまくったので、LinuxのKernelの部分でもあるプロセスとスレッドの違いについてと、htop,topコマンドについてブログします。
■Prosess and Threads
https://qiita.com/ftakao2007/items/d0fbecd3873054f603f5
・プロセス
CPU上で実行されるもので、タスクを完了するためにLinuxのカーネルが制御するあらゆるリソースを使うことが可能。スレッドが無い時はプロセスが実行単位となります。
・スレッド
「1つのプロセスの中で複数の実行単位を持てるように機能拡張したもの」(SoftwareDesign2014年8月号)
1つのプロセスから生成される実行単位で同じプロセスから並行でスレッドを起動させることができます。スレッドはメモリや、オープン中のファイルなどのリソースを共有することができて、同じアプリケーションデータにアクセスが可能です。もちろんスレッドは同じタイミングで共有しているリソースに変更をかけるべきではないことも言えます。なので、ロックをかけたりシリアルに動かしたりという制御などはアプリケーションとなります。
・2つの違いは?
プロセスはリソースを共有することができません。プロセスを起動させるにはリソースをコピーすることが必要になります。その分性能の観点からはスレッドを起動するほうが効率的です。一方、プロセスとスレッドはスケジューリングの観点からは同じような特徴を持っているのでカーネルからは同じように扱われます。
■ps command
psコマンドでスレッドを表示させたい場合はオプションで「H」をつければ出てきます。
1 2 3 4 5 6 7 8 9 10 11 |
$ ps auxH |grep h2o root 1721 0.0 0.3 41312 3520 ? Ss May11 0:00 perl -x /usr/share/h2o/start_server --pid-file=/var/run/h2o/h2o.pid --log-file=/var/log/h2o/all-virtual.error.log --port=0.0.0.0:80 --port=0.0.0.0:443 -- /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20571 0.0 1.2 412448 12504 ? Sl 06:25 0:08 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20571 0.0 1.2 412448 12504 ? Sl 06:25 0:00 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20571 0.0 1.2 412448 12504 ? Sl 06:25 0:00 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20571 0.0 1.2 412448 12504 ? Sl 06:25 0:07 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20595 0.0 0.3 189264 3152 ? Sl 06:25 0:00 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20595 0.0 0.3 189264 3152 ? Sl 06:25 0:00 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20595 0.0 0.3 189264 3152 ? Sl 06:25 0:02 /usr/sbin/h2o -c /etc/h2o/h2o.conf www-data 20595 0.0 0.3 189264 3152 ? Sl 06:25 0:03 /usr/sbin/h2o -c /etc/h2o/h2o.conf root 20619 0.0 0.4 19132 4268 ? S 06:25 0:00 perl -x /usr/share/h2o/annotate-backtrace-symbols |
■htop,top command
・htop
1 2 3 4 5 |
$ man htop |grep threads K Hide kernel threads: prevent the threads belonging the kernel to be displayed in the process list. (This is a toggle H Hide user threads: on systems that represent them differently than ordinary processes (such as recent NPTL-based sys‐ tems), this can hide threads from userspace processes in the process list. (This is a toggle key.) NLWP The number of threads in the process. |
(訳)
ユーザスレッドを非表示:通常のプロセスとは異なる表現をするシステム(最近のNPTLベースのsys-これにより、スレッドをプロセスリストのユーザー空間プロセスから隠すことができます。
manでみると確かにデフォルトでスレッドが出るようになってますな。「H」押すと2個になってた。ちなみにhtopコマンドの使い方は下記。
・top
1 2 3 4 5 6 7 8 9 |
$ man top |grep Threads * H - Threads mode Off (summarize as tasks) -H :Threads-mode operation Line 1 shows total tasks or threads, depending on the state of the Threads-mode toggle. That total is further classified as: In a true SMP environment, if a process is multi-threaded and top is not operating in Threads mode, amounts greater than 100% may be reported. You toggle Threads mode with the `H' interactive command. 41. nTH -- Number of Threads H :Threads-mode toggle label which shows either Tasks or Threads. |
(訳)
:スレッドモード操作
スレッドモードトグルの状態に応じて、タスクまたはスレッドの総数を表示します。プロセスがマルチスレッドでtopがスレッドモードで動作していない場合 、`H ‘コマンドでスレッドモードを切り替えます。
どうやらtopコマンドでも「H」でスレッドが表示されるみたいですな。
■まとめ
そんなわけでhtopはデフォルトでスレッドが表示されるということです。zsh,bashで色分けすると判断できやすいかと。これからはhtopでサーバの状況を確認しましょう!
0件のコメント