2010-09-27 49 views
0

我正在大學服務器上運行一個shell腳本。在這個shell腳本中,我將執行java,c,C++,python和perl程序。因爲每個程序都會被執行很多次(我是一名教學助理,並且會用很多不同的輸入來測試學生的程序)。服務器總是給我一個錯誤:「用完系統資源」。我想這是由於我不釋放資源。用完系統資源(在shell腳本中執行許多程序)

我聽說一次在shell腳本中運行程序會激活一個進程。所以我想也許有這麼多的系統追索權分配給我的流程已經用完了。

有什麼辦法可以解決這個問題嗎?

我提出我的殼部分代碼如下:

# maxconnect4 is the compiled c code 
for ((i = 1; i <= 21; i++)) 
do 
    maxconnect4 input1.txt 
done 

感謝

+0

如果你只是在shell上執行$ maxconnect4 input1.txt,你會得到相同的錯誤,如果是,那麼系統負載很重。嘗試運行頂部,看看發生了什麼! – 2010-09-27 06:38:57

+0

是什麼讓你認爲'java'和'python'和'C++'與你的問題有關?您向我們展示的是一個調用C程序的shell腳本。 – 2010-09-27 07:13:09

回答

1

由於您正在自動運行學生程序,因此可能是他們的程序編寫得不好,並且使用比由更熟練的程序員編寫的類似程序所需的更多的RAM。即使是Java和Python程序也可能會以泄漏內存的方式編寫(想想一個從未得到任何東西的堆棧,只有更多東西被推送)。

你應該測試你的設置,並且已經完成了你將要評定爲完整性檢查的任務。

你還應該看看學生作品的源代碼。特別是如果你的任務發生錯誤。

您也可能只是有一個重載系統,可能需要在另一臺機器上運行這些測試。使用沒有其他用戶的機器對於這類事情來說是個好主意,因爲你和你正在測試的程序之外的東西不太可能混淆你的測試。

當您運行測試來監控資源使用情況時,您可能還希望在另一個終端上保持該計算機的頂級運行狀態。

+0

要分類: 非常感謝您的建議。我已經測試了我的主管和我自己的實施,他們工作得很好。 所以我想我需要檢查學生的程序。再次感謝。 – Fihop 2010-09-27 16:42:28

1

你似乎運行maxconnect4,然後waitng爲它啓動下一個運行之前完成,所以我不認爲你的shell腳本本身就是正確的。最大的問題是maxconnect4正在做什麼。它可能非常渴望資源,或者它本身可以啓動子進程並返回到腳本。

我會嘗試一些實驗,如手動啓動maxconnect4幾次,你會發現資源錯誤?

我也會使用系統工具進行調查。例如使用ps來查看是否有很多進程正在運行。使用vmstat查看CPU和內存使用情況。

+0

非常感謝。我會嘗試你的建議。是的,我們正在玩最大連接四場比賽。每個學生都寫一個AI。我必須決定哪一個最好。 – Fihop 2010-09-27 07:23:38

+0

由於我們的遊戲板是6 * 7,兩位參與者將分別有21步。代碼如下: – Fihop 2010-09-27 07:25:27

+0

((i = 1; i <= 21; ++ i))做 – Fihop 2010-09-27 07:25:50