ホームページ > 記事 > システムチュートリアル > Linuxのプロセスとスレッドの重要性と実践的なスキルをマスターする
Linux システム管理者として、プロセスとスレッドの概念、および対応する実践的なスキルを理解し、習得することが非常に重要です。これにより、システム リソースの管理が改善されるだけでなく、システムの運用効率と安定性も向上します。この記事では、Linux のプロセスとスレッドを深く理解し、いくつかの実用的なヒントとツールを紹介します。
プロセスとは、特定のデータ収集に対する特定の独立した機能を備えたプログラムの実行アクティビティです。これはオペレーティング システムの動的実行の基本単位であり、従来のオペレーティング システムでは、プロセスは基本割り当て単位と基本実行単位の両方です。
######プロセス######プロセスとは、特定のデータ収集に対する特定の独立した機能を備えたプログラムの実行アクティビティです。これはオペレーティング システムの動的実行の基本単位であり、従来のオペレーティング システムでは、プロセスは基本割り当て単位と基本実行単位の両方です。プロセスの概念には 2 つの主要なポイントがあります。 まず、プロセスはエンティティです。各プロセスには独自のアドレス空間があり、通常、テキスト領域、データ領域、スタック領域が含まれます。テキスト領域にはプロセッサによって実行されるコードが格納され、データ領域にはプロセス実行中に使用される変数と動的に割り当てられたメモリが格納され、スタック領域にはアクティブなプロシージャ呼び出しの命令とローカル変数が格納されます。 2 番目に、プロセスは「実行中のプログラム」です。プログラムは無生物です。プロセッサが (オペレーティング システムによって実行される) プログラムに生命を与えた場合にのみ、プログラムはアクティブな実体になることができます。これをプロセスと呼びます。 ######糸###### スレッドは、オペレーティング システムが操作のスケジューリングを実行できる最小単位です。これはプロセスに含まれており、プロセス内の実際の操作単位となります。スレッドとは、プロセス内の単一の順次制御フローを指します。プロセス内で複数のスレッドを同時に実行でき、各スレッドは異なるタスクを並行して実行します。 Unix System V や SunOS では軽量プロセスとも呼ばれますが、軽量プロセスはカーネル スレッドを指し、ユーザー スレッドはスレッドと呼ばれます。プロセスとスレッドの関係 同じプロセス内の複数のスレッドは、仮想アドレス空間、ファイル記述子、信号処理など、プロセス内のすべてのシステム リソースを共有します。ただし、同じプロセス内の複数のスレッドには、独自のコール スタック、独自のレジスタ コンテキスト、および独自のスレッド ローカル ストレージがあります。
Linux のスレッドとプロセスLinux カーネルでは、プロセスとスレッドは両方ともタスクですが、区別する必要があります。ここで、pid はプロセス ID、tgid はスレッド グループ ID です。どのプロセスでも、メイン スレッドのみが存在する場合、pid はそれ自体であり、tgid もそれ自体であり、group_leader は依然としてそれ自体を指します。ただし、プロセスが他のスレッドを作成すると、状況は変わります。スレッドには独自の pid があり、tgid はプロセスのメイン スレッドの pid で、group_leader はプロセスのメイン スレッドを指します。したがって、tgid を使用すると、taste_struct がプロセスを表すかスレッドを表すかがわかります。関係は次のとおりです:
スレッドとプロセスのカーネルパラメータについて
ulimit 制限。Linux で ulimit -a を実行すると、さまざまなリソースの ulimit 制限が表示されます。「最大ユーザー プロセス」は、プロセスが作成できるスレッドの最大数です。このパラメータは変更できます:
リーリー 2. パラメータ sys.kernel.threads-max 制限。このパラメータは、オペレーティング システム内のスレッド数をグローバルに制限します。次のコマンドを使用してその値を表示できます。スレッド最大数の表示方法: リーリー
この値を変更する方法:リーリー
3. パラメータ sys.kernel.pid_max の制限。このパラメータは、オペレーティング システム内のスレッド数をグローバルに制限します。次のコマンドを使用してその値を表示できます。 32 ビット オペレーティング システムについて説明します。最大値は 32768 で変更できません。64 ビット システムの pid_max の最大値は 2^22 です。 Linux カーネルはシステムを初期化するときに、マシン内の CPU の数に応じて pid_max 値を設定します。たとえば、マシンの CPU 数が 32 以下の場合、pid_max は 32768 (32K) に設定され、マシンの CPU 数が 32 を超える場合、pid_max は N に設定されます。 *1024 (N は CPU の数)。 pid_max の確認方法: リーリーこの値を変更する方法:
リーリー注: 多数のスレッドも pid を占有するため、threads-max は pid_max 以下である必要があります。
コンテナスレッド数の制限Linux システムの場合、コンテナはプロセスの集合です。コンテナ内のアプリケーションが作成するプロセスが多すぎる場合、またはバグがある場合、フォークボムと同様の動作が発生します。このようにすると、同じノード上の他のコンテナが動作できなくなるだけでなく、ホスト自体も動作できなくなります。したがって、コンテナごとにプロセスの最大数を制限する必要があり、この機能は pids Cgroup サブシステムによって実行されます。 Java アプリケーションは多くのスケジュールされたタスクを処理する必要があるため、スケジュールされたタスクがスレッドをプルアップするという問題に以前遭遇したことがあります。しかし、コードのバグにより、スレッドが時間内にリサイクルされず、コンテナがスレッドを生成し続けたため、ホストのプロセス テーブル スペースが使い果たされ、最終的に Linux サービス全体でエラー「java.lang.OutOfMemoryError」が報告されました。 : ネイティブ スレッドを作成できません」というメッセージが表示され、他のサービスに影響を与えます。作成中に「リソースが一時的に利用できません」というエラーメッセージが表示されます。この種の問題では、開発者がバグを修正できるようにするだけでなく、システム レベルでスレッドの数を制限する必要もあります。
cグループ
Pid は cgroup で分離されています。docker/kubelet 構成を変更することで、pid の合計数を制限して、スレッドの合計数を制限できます。
docker、コンテナーの起動時に –pids-limit パラメーターを設定して、コンテナー レベルの PID の総数を制限します
kubelet、SupportPodPidsLimit 機能を有効にし、-pod-max-pids パラメーターを設定して、ノードの各ポッドの PID の合計数を制限します
原則は次のとおりです: コンテナーが作成された後、コンテナーを作成するサービスは、コントロール グループである /sys/fs/cgroup/pids の下にサブディレクトリを作成します。コントロール グループ内の最も重要なファイルは次のとおりです。 pid.max Kubelet または docker はこのファイルに値を書き込みます。この値は、このコンテナーで許可されるプロセスの最大数です。 Kubernetes の各ノードは、Kubelet と呼ばれるサービスを実行します。このサービスは、コンテナーの作成や削除など、ノード上のコンテナーのステータスとライフサイクルを管理します。 Kubernetes の公式ドキュメント「プロセス ID の制限と予約」によると、Kubelet サービスの –pod-max-pids 構成オプションを設定すると、ノード上に作成されたコンテナーは最終的に Cgroups pid コントローラーを使用して数を制限します。コンテナ内のプロセスの数。
要約
この記事の導入と分析を通じて、概念、違い、状態遷移、および Linux プロセスとスレッドのシステム リソースへの影響を理解しました。同時に、プロセスチューニング、検出ツール、管理ツールなどの実践的なヒントやツールも共有しました。これらのツールとテクニックは、システム リソースの管理を改善し、システムの運用効率と安定性を向上させるだけでなく、作業効率と競争力も向上させるのに役立ちます。したがって、Linux のプロセスとスレッドの重要性と実践的なスキルを習得することが非常に必要です。
以上がLinuxのプロセスとスレッドの重要性と実践的なスキルをマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。