700 개의 인스턴스가 모두 동시에 실행될 수 있습니까?
그것은 당신이 동시에 의미하는 바에 달려 있습니다. 우리가 까다 롭다면 시스템에서 700 개의 스레드 스레드를 사용하지 않으면 사용할 수 없습니다 (아마도 아닙니다). 실제로 시스템에 충분한 RAM 및 / 또는 스왑 공간이 있다면 가능할 것입니다. 유닉스와 다양한 어린이들이 엄청난 수준의 동시성을 관리하는 데 매우 뛰어나므로 대규모 HPC 사용에 인기가있는 이유 중 하나입니다.
서버가 한계에 도달 할 때까지 얼마나 걸립니까?
더 많은 정보가 없으면 구체적으로 대답 할 수 없습니다. 대부분의 경우 충족 할 메모리가 충분해야합니다.
- 한 작업의 전체 런타임 메모리 요구 사항에 700을 곱한 값입니다.
- 많은 작업을 관리하기 위해 bash의 메모리 요구 사항 (bash는 이것에 대해 끔찍하지는 않지만 작업 제어는 메모리 효율적이지 않습니다).
- 시스템의 기타 메모리 요구 사항
당신이 그것을 충족한다고 가정하면 (다시 50GB의 RAM 만 있으면 여전히 다른 문제를 처리해야합니다.
- 작업 제어에서 bash가 얼마나 많은 CPU 시간을 낭비합니까? 그다지 많지는 않지만 수백 개의 일자리가 있으면 의미가있을 수 있습니다.
- 필요한 네트워크 대역폭은 얼마입니까? 이러한 연결을 모두 열면 대역폭과 대기 시간에 따라 몇 분 동안 네트워크가 손상 될 수 있습니다.
- 내가 생각하지 못한 많은 다른 것들.
그 한계에 도달하면 foo에서 다음 반복이 시작되기를 기다리거나 상자가 충돌합니까?
어떤 한계에 도달했는지에 따라 다릅니다. 메모리 인 경우 시스템에서 무언가가 죽거나 (특히 메모리를 확보하기 위해 커널에 의해 종료 됨) 시스템 자체가 충돌 할 수 있습니다 (메모리가 부족할 때 시스템이 의도적으로 충돌하도록 구성하는 것은 드문 일이 아닙니다). CPU 시간이면 문제없이 계속 진행되며 시스템에서 다른 많은 작업을 수행하는 것은 불가능합니다. 네트워크 인 경우 다른 시스템이나 서비스 가 중단 될 수 있습니다.
여기서 실제로 필요한 것은 모든 작업을 동시에 실행하지 않는 것입니다. 대신 배치로 분할하고 배치 내에서 모든 작업을 동시에 실행하고 완료 한 후 다음 배치를 시작하십시오. GNU Parallel ( https://www.gnu.org/software/parallel/ )을 사용할 수 있지만 프로덕션 환경에서 그 규모로는 이상적이지 않습니다 (당신이 그것을 사용한다면 너무 공격적이지 마십시오. 내가 말했듯이, 당신은 네트워크를 늪에 빠뜨리고 그렇지 않으면 만지지 않을 시스템에 영향을 줄 수 있습니다). Ansible ( https://www.ansible.com/ 과 같은 적절한 네트워크 오케스트레이션 도구를 살펴 보는 것이 좋습니다.)를 통해 동시성 문제를 해결할 수있을뿐만 아니라 (위에서 언급 한 것과 같이 일괄 처리가 자동으로 수행됩니다) 작업을 수행하는 데 유용한 다른 많은 기능 (등분 한 작업 실행, 상태 보고서 및 기본 통합과 같은)을 제공합니다. 다른 많은 도구들).
parallel
약 50 개의 동시 작업을 사용하여 행운을 빕니다 . 1과 700의 병렬 처리 사이의 훌륭한 매체입니다. 또 다른 좋은 점은 배치가 없다는 것입니다. 중단 된 단일 연결은 다른 연결 중 하나만 중단됩니다. 주요 단점은 오류 관리입니다. 이러한 쉘 기반 접근 방식 중 어느 것도 오류를 정상적으로 처리하지 못합니다. 성공 여부를 직접 확인하고 직접 재 시도해야합니다.