ホスト上で実行される同時scpプロセスの最大数を制限します。

ホスト上で実行される同時scpプロセスの最大数を制限します。

私が直面している問題の1つは、大量のデータを含むサーバーセットがあることです。各ホストは、処理する必要があるデータを取得するために、異なるホストへの複数のscp接続を並列に確立する特定のプロセスp1の複数のインスタンスを実行します。これにより、そのホストに多くの負荷が発生し、複数回ダウンします。

単一のホストで実行できる同時scpプロセスの数を制限する方法を探しています。

ほとんどのリンクは、/etc/ssh/sshd_configのMaxStartupおよびMaxSessions設定を指し、これは特定のポイントで作成/開始できるSSHセッションの数を制限することに関連しています。

ここで使用できる特定のscp設定ファイルはありますか?それとも、同時に実行できる特定のプロセス/コマンドのインスタンス数を制限するシステムレベルの方法はありますか?

ベストアンサー1

scpそのような機能自体はありません。 GNUと共にparallelsem次のコマンドを使用できます(シグナル)同時プロセスを任意に制限します。

sem --id scp -j 50 scp ...

--idこれは同じです。 51番目のプロセスを開始しようとすると、他のプロセスの1つが終了するまで無期限に待機します。プロセスをフォアグラウンドに保持するには、追加します--fg(デフォルトはバックグラウンドで実行するものですが、これはシェルバックグラウンドプロセスと同じようには機能しません)。

ステータスはに保存されているため、${HOME}/.parallel/複数のユーザーがそれを使用している場合は、必要に応じて機能せず、scpユーザーごとに下限を設定する必要があります。 (呼び出し時にHOME環境変数をオーバーライドしsem、グループが書き込みを許可していることを確認し、ステータスを共有するように権限を変更することも可能でなければなりません。umaskしかし、まだYMMVをあまりテストしていません。)

parallelperlいくつかの標準モジュールだけが必要です。

NがkBps単位の伝送制限であるところを使用することscp -l N、特定のパスワードを選択する(必要なセキュリティレベルに応じて速度のために)、圧縮を無効にする(特にデータがすでに圧縮されている場合)、CPUへの影響をさらに減らすこと考慮することもできます。

の場合、scpsshは実際にはパイプであり、scp各端で1つのインスタンスが実行されます(受信端は文書化されていない-tオプションで実行されます)。に関してはMaxSessionsこれは役に立ちません。 「セッション」は単一のSSH接続を介して多重化されます。逆に、誤った情報が豊富であるにもかかわらず、MaxSessions限界ただ他の制限なしにTCP接続ごとのセッションを再利用します。

PAMモジュールpam_limits同時ログイン制限がサポートされているため、OpenSSHがPAMとして構築され、usePAM yes存在する場合は、sshd_configユーザー名、グループメンバーシップなどに基づいて制限を設定できます。その後、maxloginsログインに厳密な制限を設定できます/etc/security/limits.confしかし、sshこれは、justとjustを使用した新しいログインだけでなく、各ユーザーのすべてのログインを計算するため、scp専用のユーザーIDがないと問題が発生する可能性がありますscp。有効にすると、対話型SSHセッションでも機能します。この問題を解決する1つの方法は、sshdバイナリをコピーまたはシンボリックリンクしてから呼び出すことです。sshd-scpその後、別々のPAM設定ファイルを使用できます。つまり/etc/pam.d/sshd-scppam_start()OpenSSH 呼び出しの「サービス名」はバイナリ名に設定されます。 )から電話を受けました。別のポート(またはIP)で実行する必要があり、別のポートを使用するのもsshd_config良い方法です。これを実装するとscp制限に達すると失敗します(終了コード254)、転送中にこれを処理する必要があります。

(他のオプションには以下が含まれます。ioniceそしてcpulimit、これはscpセッションがタイムアウトしたり、長い間中断され、より多くの問題を引き起こす可能性があります。 )

同様の操作を実行する古い方法はatdand を使用するbatchことですが、これは並行性調整を提供せず、ロードが特定のしきい値を下回ると、プロセスをキューに追加して開始します。新しい亜種はジョブスプーラより構成可能な順次/並列方式でジョブのキューと実行をサポートし、ランタイムの再構成(キューのジョブや並行性設定の変更など)をサポートします。ただし、ロードまたはCPU関連の制御自体を提供するわけではありません。

おすすめ記事