약 800k 문서를 처리하는 데몬을 작성했는데 메모리 부족 문제가 있습니다.치명적인 오류가 발생했습니다.
mongodb에서 문서를 가져올 때마다 루프마다 메모리 사용량이 증가합니다.
func main() {
session, err := mgo.Dial("localhost")
if err != nil { panic(err) }
defer session.Close()
subscriptionsC = session.DB("sm").C("subscriptions")
subscriptions := []Subscription{}
for {
subscriptions = GetSubscriptions()
그리고 다른 기능은 다음과 같습니다
func GetSubscriptions()([]Subscription) {
result := []Subscription{}
err := subscriptionsC.Find(nil).Prefetch(0.0).All(&result)
if err != nil { Log("signups_err", err.Error() + "\n") }
return result
}
는 각 루프 또는 정확히 어떤 일을 가진 배열을 재 선언 않다면 모르겠어요.
도움을 주시면 감사하겠습니다.
'for' 루프는 무한 루프이며 매 반복마다 Mongo의 결과를 수집합니다. – elithrar
세션이 결과를 캐싱 할 가능성이 있습니까? 테스트를 위해 루프를 통해 실행될 때마다 subscriptionsC 객체를 닫거나 다시 만들 수 있습니다. –