0
我一直在研究Storm拓撲,我從「Execute(tuple)」方法中的文件中讀取並且java拋出「Java .lang.OutOfMemoryError:超出GC開銷限制「。 該程序工作正常,直到它拋出該錯誤,因爲太多的GarbageCollector(我認爲)的使用。使用過的相同代碼完美無瑕,問題在於Storm實現的極端併發。 我認爲那是因爲程序在垃圾收集器上花費了太多時間,並且我編寫它的方式,我認爲它每次執行元組時都會爲同一個文件和Bolt創建很多讀者。我想知道是否可以在「Prepare()」方法中讀取文件,將它保存在一個String數組中,如果是這樣,我會問:它是否只爲一個Bolt實例創建一個reader和String數組?風暴閱讀文件拋出「Java.lang.OutOfMemoryError:超過GC開銷限制」
這裏是我的博爾特的樣本:
public static class FilterSomeBolt extends BaseRichBolt {
OutputCollector _collector;
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
}
public void execute(Tuple tuple) {
String entr = tuple.getString(1);
boolean flagRet=false;
try {
String fileName2 = (String)"file.csv";
BufferedReader reader2 = new BufferedReader(new FileReader(fileName2));
// read and ignore the header if one exists
String line2 =reader2.readLine();
while(line2!= null){
if(line2.toLowerCase().contains("something")&&line2.toLowerCase().contains(entr.substring(1, 8).toLowerCase())){
flagRet=true;
}//end if
line2 =reader2.readLine();
}//end while
}..........................
............................//tuple sent
我試圖瞭解這些方法,並希望得到幫助。 在此先感謝!
對不起,我沒有把line2的更新,但它是在那裏,我會編輯的問題,該bucle完成恰到好處,錯誤不存在,謝謝! – Amnor
現在,雖然就像我有一個,我正在削減一些代碼,我現在不會造成這個問題,我錯過了「line2」變量更新,謝謝你的頭! – Amnor
幫助,因爲我錯過了發佈「line2」更新的問題,但它不是解決方案,因此我的代碼實際上已更新其中的行。我很感激幫助,但問題仍然存在,所以我提出了你的答案,但我不能接受它是正確的,因爲你幫助發佈問題,但不是在編程問題上接受問題,它必須解決問題編程問題。 感謝您的幫助,意識到我忘了帖子上的line2更新,無論如何:) – Amnor