2011-02-03 2 views
5

이진 프로그램의 입력 파일을 준비하고 SGE 큐 시스템 버전 6.2u2에 이진 프로그램의 실행을 제출하는 펄 스크립트가 있습니다.SGE-QSUB가 -sync 모드로 작업을 제출하지 못했습니다.

작업은 부모 펄 스크립트가 waitpid 기능으로 제출 된 작업의 상태를 모니터 할 수 있도록 허용하기 위해 -sync y 옵션과 함께 제출됩니다.

이것은 부모 펄 스크립트에 SIGTERM을 보내면이 신호를 각 하위 사용자에게 전파하고이 신호를 qsub에 전달하여 관련 제출 된 모든 작업을 정상적으로 종료하므로 매우 유용합니다.

따라서이 -sync y 옵션을 사용하여 작업을 제출할 수 있다는 것은 매우 중요합니다.

불행하게도, 나는 다음과 같은 오류가 계속 :

Unable to initialize environment because of error: range_list containes no elements

주의 '는 containes'의 잘못된 철자를. 즉 이 아니며은 오타입니다. 코드/오류 메시지의이 영역을 얼마나 잘 유지 관리해야 하는지를 보여줍니다.

이 오류를 생성하는 시도가 제출되면 STDOUT 및 STDERR 파일 *.e{JOBID}*.o{JOBID}도 생성되지 않습니다. 제출이 완전히 실패합니다.

Google에서이 오류 메시지를 검색하면 애매한 메시지 게시판에서만 해결되지 않은 게시물이 표시됩니다.

이 오류는 안정적으로 발생하지 않습니다. 스크립트를 재실행 할 수 있으며 같은 작업이 반드시 오류를 생성하지는 않습니다. 또한 어떤 노드에서 작업을 제출하려고 시도하는 것이 중요하지 않은 것 같습니다.

내 희망은 여기 누군가가 이것을 알아낼 수 있다는 것입니다.

  1. 이 오류가 SGE의 최신 버전으로 유지 하는가 :이 질문의에

    답변하여 내 문제를 해결할 것인가?

  2. qsub에 대한 명령 줄 옵션을 변경하여이를 방지 할 수 있습니까?
  3. 이 오류 메시지는 무슨 의미입니까?

답변

9

저희 사이트는 SGE 6.2u5에서이 문제를 해결했습니다. 메일 링리스트에 몇 가지 질문을 올렸지 만 해결 방법이 없습니다. 지금까지.

오류 메시지가 가짜 인 것으로 나타났습니다. 나는 Univa github "open-core"repo의 변경 로그를 읽음으로써 이것을 발견했습니다. 나중에 Gridengine v8.0.0c 릴리스 노트에 언급 된 문제를 보았습니다.

말을해야 오류 메시지가이 한도에 도달 한 것을 의미 : 여기

는 github에의 환매 특약의 관련 커밋이다 시스템에 qsub sync -y 취업을 제안합니다. 이 매개 변수는 MAX_DYN_EC입니다. 우리 버전의 기본값은 99이고, 증가 위의 변화는 기본적으로 1000

합니다 (은 sge_conf (5) 매뉴얼 페이지에서) MAX_DYN_EC의 정의는 것을 :

Sets the max number of dynamic event clients (as used by qsub -sync y and by Grid Engine DRMAA API library sessions). The default is set to 99. The number of dynamic event clients should not be bigger than half of the number of file descriptors the system has. The number of file descriptors are shared among the connections to all exec hosts, all event clients, and file handles that the qmaster needs.

당신은 얼마나 많은을 확인하실 수 있습니다 우리는 qconf -mconf를 통해 qmaster_paramsMAX_DYN_EC=1000을 추가 한

$ qconf -secl | grep qsub | wc -l 

: 동적 이벤트 클라이언트 다음 명령을 사용하여. 수백 개의 qsub -sync y 개의 작업을 제출했는데 더 이상 range_list 오류가 발생하지 않았습니다. MAX_DYN_EC 변경 전에 오류가 발생하면 신뢰할 수 있습니다.

0

이 문제에 대한 해결책을 찾았습니다.

내 목표는 개별 인스턴스 qsub을 제출 한 작업이 대기열에 있거나 실행 중일 때 포 그라운드에 유지되도록하는 것이 었습니다. 이것은 -sync 옵션으로 달성되었지만, 내 질문에 설명하는 끔찍한 예측할 수없는 버그가 발생했습니다.

qrsh 명령을 now -n 옵션과 함께 사용하여이 문제를 해결했습니다. 이로 인해 작업은 qsub -sync과 유사하게 동작하므로 내 스크립트는 qrsh 인스턴스에서 waitpid을 사용하여 제출 된 작업이 실행 중인지 여부를 내재적으로 모니터 할 수 있습니다.

이 솔루션의 유일한주의 사항은 대화 형 노드 (qrsh)와 비대화 형 노드 (qsub)가 서로 구분되지 않아야한다는 것입니다. 구별이 존재한다면 (비대화 형 대화 형 노드보다 대화 형 노드가 적을 가능성이 있음)이 해결 방법이 도움이되지 않을 수 있습니다.

그러나 이처럼 기능적으로 문제가있는 qsub -sync 문제에 대한 해결책을 찾지 못했지만이 게시물을 내 유사한 상황에서 잡힌 어떤 방법없는 사람의 영혼과도 혼재시킬 수 있습니다.

+0

qsub와 qrsh의 차이점은 무엇입니까? –

관련 문제