システムの操作と制限

システムの操作と制限

まず、この質問にスタックオーバーフローというタグを付けないでください。 (はい、Pythonはコンテキストの主要部分ですが、私の質問は最終的にSystemdに関するものです。)

私は現在サーバーに座って、Systemdを介して制御されるPythonプログラムを作成しています(アクティブになると、サーバーがダウンすると再起動されます)。私の興味は、「作業」セクションがsystemctl status増え続けていることです。

...
Active: active (running) since Wed 2020-08-26 18:31:12 UTC; 14min ago
Main PID: 1657 (python3)
Tasks: 178 (limit: 637)  <--
...

この情報に基づいて推定すると、制限に達するまで(サービス開始から)50分余りがかかります。私の質問は、「私のコードがなぜ破損しているのか」、「この制限をどのように増やすことができるのか」などではありません.代わりに、私の質問は、Systemdがどのようなことを考慮して制限に達するとどうなりますか(サービスを終了するように指示するかどうかなど)。

この情報に基づいて、Pythonスクリプトがジョブ数が直線的に増加する理由を理解し、問題を解決することを願っています.

ベストアンサー1

systemd.resourcecontrol(5)私たちにヒントを与えました:

   TasksMax=N
      Specify the maximum number of tasks that may be created in the unit. This 
      ensures that the number of tasks accounted for the unit (see above) stays
      below a specific limit. This either takes an absolute number of tasks or a
      percentage value that is taken relative to the configured maximum number of 
      tasks on the system. If assigned the special value "infinity", no tasks 
      limit is applied. This controls the "pids.max" control group attribute. For
      details about this control group attribute, see Process Number Controller[7].

      The system default for this setting may be controlled with DefaultTasksMax= 
      in systemd-system.conf(5).

したがって、この制限は "pids.max"に基づいています。プロセスが呼び出されるたびにPIDが生成されます。fork()またはclone()。 Pythonの文脈ではos.fork()同じ名前のシステムコールを呼び出すことができます。これらのシステムコールが他のどのような状況で行われるかはわかりませんが、python何百ものプロセスを生成しない場合は、生成されたスレッドの数に関連すると予想されます。

マニュアルページにはいくつかの良い文献が引用されています。[7]プロセス番号コントローラ

おすすめ記事