2011-02-03 98 views
5

我有一個perl腳本,用於準備輸入二進制程序的文件並將二進制程序的執行提交給SGE排隊系統版本6.2u2。SGE - QSUB未能在-sync模式下提交作業

通過-sync y選項提交作業,以允許父級perl腳本能夠使用waitpid函數監視提交作業的狀態。

這也非常有用,因爲向父Perl腳本發送SIGTERM會將此信號傳播給每個孩子,孩子們然後將這個信號轉發到qsub上,從而正常終止所有關聯的提交作業。

因此,能夠使用此-sync y選項提交作業是相當重要的。

不幸的是,我不斷收到以下錯誤:

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

通知 'containes' 的拼寫不正確的。那是不是一個錯字。它只是告訴你這個代碼/錯誤消息的區域必須維護得不好。

產生此錯誤的提交提交未能生成STDOUT和STDERR文件*.e{JOBID}*.o{JOBID}。提交只是完全失敗。

搜索谷歌這個錯誤消息只會導致未解決的帖子在晦澀的留言板上。

這個錯誤甚至不可靠地發生。我可以重新運行我的腳本,同樣的作業不一定會產生錯誤。這似乎也不重要,我試圖提交作業的節點。

我希望這裏有人能弄明白這一點。因此

解答任何一個問題會解決我的問題:

  1. 這個錯誤在較新版本的SGE的堅持?
  2. 我可以改變我的qsub的命令行選項以避免這種情況嗎?
  3. 這個錯誤信息在說什麼?

回答

9

我們的網站在SGE 6.2u5中遇到了這個問題。我在郵件列表上發佈了一些問題,但沒有解決方案。到現在。

事實證明,該錯誤消息是假的。我通過閱讀Univa github「open-core」回購中的更改日誌來發現這一點。後來我看到了Son of Gridengine v8.0.0c發行說明中提到的問題。

這裏是在GitHub庫相關的提交:

什麼錯誤消息應該說的是,你已經打了極限上的數字qsub sync -y工作在系統中。該參數被稱爲MAX_DYN_EC。在我們的版本,默認爲99,高於增加的更改默認爲1000

MAX_DYN_EC定義(從參閱sge_conf(5)手冊頁)是:

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 -secl | grep qsub | wc -l 

我們已經通過qconf -mconf添加MAX_DYN_EC=1000qmaster_params。我測試過提交數百個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之間的區別是什麼 – 2013-06-18 20:12:44