호스트에서 실행되는 동시 scp 프로세스의 최대 수를 제한합니다.

호스트에서 실행되는 동시 scp 프로세스의 최대 수를 제한합니다.

제가 직면하고 있는 한 가지 문제는 많은 양의 데이터를 포함하는 서버 세트가 있다는 것입니다. 각 호스트는 처리해야 하는 데이터를 얻기 위해 다른 호스트에 대한 여러 scp 연결을 병렬로 설정하는 특정 프로세스 p1의 여러 인스턴스를 실행합니다. 이로 인해 해당 호스트에 많은 로드가 발생하고 여러 번 다운됩니다.

단일 호스트에서 실행할 수 있는 동시 scp 프로세스 수를 제한하는 방법을 찾고 있습니다.

대부분의 링크는 /etc/ssh/sshd_config의 MaxStartup 및 MaxSessions 설정을 가리키며, 이는 특정 지점에서 생성/시작할 수 있는 SSH 세션 수를 제한하는 것과 더 관련이 있습니다.

여기서 사용할 수 있는 특정 scp 구성 파일이 있습니까? 아니면 동시에 실행될 수 있는 특정 프로세스/명령의 인스턴스 수를 제한하는 시스템 수준 방법이 있습니까?

답변1

scp그런 기능 자체는 없습니다. GNU와 함께parallelsem다음 명령을 사용할 수 있습니다 (신호) 동시 프로세스를 임의로 제한합니다.

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

--id이는 동일한 . 51번째 프로세스를 시작하려고 시도하면 다른 프로세스 중 하나가 종료될 때까지 무기한 대기하게 됩니다. 프로세스를 포그라운드에 유지하려면 추가합니다 --fg(기본값은 백그라운드에서 실행하는 것이지만 이는 쉘 백그라운드 프로세스와 동일하게 동작하지 않습니다).

상태는 에 저장되므로 ${HOME}/.parallel/여러 사용자가 이를 사용하는 경우 원하는 대로 작동하지 않으며 scp사용자당 하한을 설정해야 할 수도 있습니다. (호출할 때 HOME환경 변수를 재정의하고 sem, 그룹이 쓰기를 허용하는지 확인 하고, 상태를 공유하도록 권한을 수정하는 것도 가능해야 합니다 umask. 하지만 아직 YMMV를 많이 테스트하지는 않았습니다.)

parallelperl몇 가지 표준 모듈 만 필요합니다.

N이 kBps 단위의 전송 제한인 곳을 사용하거나 scp -l N, 특정 암호를 선택하거나(필요한 보안 수준에 따라 속도를 위해), 압축을 비활성화하거나(특히 데이터가 이미 압축된 경우) CPU에 대한 영향을 더욱 줄이는 것을 고려할 수도 있습니다.

의 경우 scpssh는 실제로 파이프이고 scp각 끝에서 하나의 인스턴스가 실행됩니다(수신 끝은 문서화되지 않은 -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 세션에서도 작동합니다. 이 문제를 해결하는 한 가지 방법은 sshd바이너리를 복사하거나 심볼릭 링크한 다음 호출하는 것입니다. sshd-scp그런 다음 별도의 PAM 구성 파일을 사용할 수 있습니다. 즉 /etc/pam.d/sshd-scp, pam_start()OpenSSH 호출의 "서비스 이름"은 바이너리 이름으로 설정됩니다. )에서 전화를 받았습니다. 별도의 포트(또는 IP)에서 실행해야 하며, 별도의 포트를 사용하는 것도 sshd_config좋은 방법이 될 것 같습니다. 이를 구현하면 scp한도에 도달하면 실패(종료 코드 254)하므로 전송 중에 이를 처리해야 합니다.

(다른 옵션에는 다음이 포함됩니다.ionice그리고cpulimit, 이로 인해 scp세션 시간이 초과되거나 오랫동안 중단되어 더 많은 문제가 발생할 수 있습니다. )

유사한 작업을 수행하는 구식 방법은 atdand 를 사용하는 batch것이지만 이는 동시성 조정을 제공하지 않으며 로드가 특정 임계값 아래로 떨어지면 프로세스를 대기열에 추가하고 시작합니다. 새로운 변종은작업 스풀러보다 구성 가능한 순차/병렬 방식으로 작업 대기열 및 실행을 지원하고 런타임 재구성(예: 대기열 작업 및 동시성 설정 변경)을 지원합니다. 단, 로드 또는 CPU 관련 제어 자체를 제공하지는 않습니다.

관련 정보