タイトルを迷って非常に抽象的にしてしまいましたが、CLIが固まってしまってデバッグしてた時の調べものです。
カーネルスレッド
[hogehoge/0]のように[]で囲われたプロセスはカーネルスレッドと呼ばれます。
カーネルスレッドとは - Linuxの備忘録とか・・・(目次へ)
カーネルスレッドの役割はワークキュー、メモリの回収、ソフト割込みなどで、カーネルの動作を補助するものになっています。ここでカーネル起動時にinit (process ID 1)が生成されると、それを親にして子プロセスが生成される。。。という話あたりもしたかったのですが、こちらに詳細があります。気が向いたら追記します。
カーネルスレッド生成&ユーザーモードプロセス生成 - Qiita
で、カーネルスレッドとユーザプロセス、psコマンドで両方見ることができるのはなぜかというと、スケジューリングの観点から見たときカーネルスレッドもプロセスも同じ手順(do_fork関数)で生成されるからなんですね。
ただ違いももちろんあって、一般的なプロセスは生成されるときに一定のメモリ量を割り当てられるので、メモリの限界が来ない限り同時にたくさんのプロセスを抱えることができます。それに対しカーネルスレッドも同時にたくさん動作することは可能なのですが、その上限はハードウェアのメモリ量ではありません。「カーネルスレッドを動かすプロセスに割り当てられたメモリ量」です。
なので、リソース確認用コマンドで確認してもメモリがいっぱいになっていないのに動作が重くなる、あるいはロードアベレージが高くなる場合はカーネルスレッドが乱立しているかもしれません。その場合のデバッグはケースバイケースなんでしょうけど、自分が躓いたときは一緒に動いている他のサーバがトリガーになってました。nfsの挙動がおかしくなっているのをdmesgコマンドで見つけた感じです。
なかみ
まだ整合性に欠ける表現があります。
- [events]
非同期実行の必要がある低レベルの要求を処理するメカニズム
- [kintegrityd]
ワークキュー?ブロックデバイスに誤りがないかチェック
- [kblockd]
カーネルのブロックI/Oタスク
- [watchdog]
時間ごとに監視するやつ、途切れたらアラートを上げる
- [stopper]
- [ksoftirqd]
ソフトウェア割込みが高いと実行される
- [xfsなんとかd]
"xfsファイルシステムは処理効率のための動作タイミングを正確に制御する必要があるカーネル機能の一つである" とりあえずxfsはファイルシステム
- [rpciod]
NFSと関係があるらしい