質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

634閲覧

Linuxでロードアベレージを確認する際のプロセスとスレッドの関係について

curl

総合スコア19

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/12/31 14:51

お世話になります。

ps コマンドでLoad Averageを確認する方法について質問があります。

あるプロセスの中に複数スレッドがある場合に、スレッドの一つでもステータスがR(Running Queue)になっていれば
プロセスとしてRになるとは限らないのでしょうか。実際にps aux -Lで確認した際にRになっているスレッドのプロセスIDを
ps auxコマンドで確認してもステータスがRになっていなかったため質問させて頂きました。

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのスレッドは、短い無限ループのように、ただただCPUを消費するだけのスレッドでしょうか?
そうでないならば、たまたまです。

投稿2019/01/01 02:25

otn

総合スコア84551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2019/01/06 13:55

ご回答ありがとうございます。 下記のようにただCPUを消費するスレッドを作成して実行しました。 ``` #!/usr/bin/python import time import threading def func1(): while True: print("func1") def func2(): while True: print("func2") if __name__ == "__main__": thread_1 = threading.Thread(target=func1) thread_2 = threading.Thread(target=func2) thread_1.start() thread_2.start() ``` この様にCPUを消費するだけのスレッドの場合は、スレッドがRになっていてもプロセスはRにならないということでしょうか。 (kernelソースを解読する知識がまだないため、お時間がある時に回答頂けるとありがたいです)
otn

2019/01/06 13:59

printじゃ、「CPUを消費するだけ」にならないです。pass ですね。
curl

2019/01/07 14:36 編集

ご指摘ありがとうございます。 勉強になりました。
guest

0

ベストアンサー

ps aux -Lで確認した際にRになっているスレッドのプロセスIDをps auxコマンドで確認してもステータスがRになっていなかった

・・・これは同時ですか?・・・Linuxの正式な切り替え時間は知りませんが、ハードにもよると思いますが10〜20ミリ秒程度(Windowsは変わってなければ、16ミリぐらい)だと思います。・・・まず人間の反応速度(0.2秒=200ミリ秒)じゃ無理だと思いますが^^?・・・まぁ、その前にpsが2回も走ってるんだから変わってて当たり前だと思うけど・・・ 以下参照
Linuxのしくみを学ぶ - プロセス管理とスケジューリング

投稿2018/12/31 23:30

編集2018/12/31 23:46
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/01/01 00:31 編集

Load Averageって、負荷状態を調べるのに使いますが(実行待ちのプロセス数の)意味わかってますか? うちの機械は6コア12スレッドなんで、通常“load average: 0.24, 0.07, 0.06”程度、最大12.00まで行けるんですが(LLVMコンパイルしても)まずそうはならないですね。
curl

2019/01/06 13:48

ご回答ありがとうございます。 ``` #!/usr/bin/python import time import threading def func1(): while True: print("func1") def func2(): while True: print("func2") if __name__ == "__main__": thread_1 = threading.Thread(target=func1) thread_2 = threading.Thread(target=func2) thread_1.start() thread_2.start() ``` 実際に動作検証用の上記スクリプト(multiThread.py)を作成して、実行中にpsコマンドを実行してみました。 ``` $ ps axu -L | grep -v grep | grep multiThread.py SER PID LWP %CPU NLWP %MEM VSZ RSS TTY STAT START TIME COMMAND ubuntu 28804 28804 0.0 3 0.7 172316 7244 pts/0 Sl+ 13:28 0:00 python multiThread.py ubuntu 28804 28845 11.8 3 0.7 172316 7244 pts/0 Rl+ 13:28 1:44 python multiThread.py ubuntu 28804 28846 11.8 3 0.7 172316 7244 pts/0 Sl+ 13:28 1:44 python multiThread.py ``` スレッドの方が「 Rl+ 」とランニングになっているのに対してプロセスのステータスは「 Sl+」となっていました。 そのためスレッドがRになっていてもプロセスはRにならないのかと思っております。
cateye

2019/01/06 14:49 編集

確認しました。 kondo 6561 6561 0.0 3 0.0 175084 9512 pts/0 Sl+ 23:32 0:00 /home/kondo/anaconda3/bin/python3.7m t.py kondo 6561 6562 80.0 3 0.0 175084 9512 pts/0 Rl+ 23:32 0:28 /home/kondo/anaconda3/bin/python3.7m t.py kondo 6561 6563 77.6 3 0.0 175084 9512 pts/0 Rl+ 23:32 0:27 /home/kondo/anaconda3/bin/python3.7m t.py ・・・間違っていたのか^^;・・確認してみます。 追記:言ってるそばから;; http://d.hatena.ne.jp/m-bird/20090604/1244165412 の「本題」にライトウエイトプロセス・・・というのが出てきます。まだ、はっきり分からないですが、スレッドもプロセス同様(たぶんw)の扱いを受けるようです??;・・・
curl

2019/01/07 14:34

回答ありがとうございます。 リンク読まさせて頂きました。 LWPもプロセス同様に扱われる様ですね。 勉強になりました。
cateye

2019/01/08 09:21

こちらこそ勉強になりました。ありがとうv^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問