5

Mamy straszne doświadczenie z gae go. Gdy nasza aplikacja była bezpłatna, nigdy nie mieliśmy problemu z Przekroczonym limitem pamięci prywatnej. Udało nam się przekroczyć kwotę, dlatego postanowiliśmy zapłacić. Nasz budżet dzienny wynosi 3 USD. Po aktywacji płatnej usługi mogliśmy ponownie korzystać z witryny, a przekroczony limit nie istniał. Kilka godzin później dostaliśmy ten Przekroczony limit pamięci prywatnej i nie można już zobaczyć niczego poza tym. Próbowałem usunąć kilka dużych danych w magazynie danych, wyłączyć wbudowane moduły i wciąż nie ma szczęścia.Przekroczono limit miękkiej pamięci prywatnej

Zrobiłem test w kodzie, skąd pochodzi usterka. Usunięcie kodu dostępu do bazy danych spowodowało ponowne utworzenie witryny. Więc mój wniosek jest uzyskanie dostępu do magazynu danych nawet po to, aby pobrać bardzo niewiele podmiotów spowodowałoby błąd podobny do tego. Jesteśmy trochę beznadziejni. Zdecydowaliśmy się wykorzystać appspot do wykorzystania technologii, ale otrzymujemy to, czego nie możemy przejść do rozwoju.

Poniżej znajduje się tylko kod, który wywołuje tego rodzaju błąd.

q := datastore.NewQuery("Course") 
    courses := make([]courseData, 0) 
    if keys, err := q.GetAll(c, &courses); err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } else { 
     for i := range courses {     
      courses[i].Key = keys[i] 
     }       
    } 

Każda pomoc, jakiej moglibyśmy udzielić, byłaby bardzo ceniona. Z góry dziękuję.

+3

zrzeczenie się, nie używaj gae. Ale powyższe rodzi pytanie, ile jest kursów? Ile danych jest w każdym kursie? – dskinner

+2

Czy profilowałeś swoją aplikację, aby zobaczyć, gdzie jest zużywana pamięć? Wszystkie instancje mają skończoną ilość pamięci (F1 - 128MB), jeśli przejdziesz i pobierzesz ogromną ilość danych, oczywiście, że zdmuchniesz limity pamięci. –

+0

Jeśli nie potrzebujesz wszystkich kursów naraz, może spróbuj wykonać iterację wyników zapytania, zamiast korzystać z funkcji GetAll()? –

Odpowiedz

3

Z mojego doświadczenia wynika, że ​​ten komunikat zwykle oznacza, że ​​twoje wystąpienia wykorzystują więcej pamięci niż obsługuje twoja klasa instancji. Jeśli zaczniesz otrzymywać ten komunikat, uaktualnij go do klasy następnej instancji (F2 itd.) I zobacz, czy zniknie. Jest to zmiana, którą wykonujesz w pliku konfiguracyjnym modułu (używanym w konsoli zarządzania w sekcji Ustawienia aplikacji). Najprawdopodobniej problem zniknie, chyba że zużyjesz więcej pamięci niż ta, którą może obsługiwać następna klasa.

W przeciwieństwie do innych zasobów, które automatycznie dostosowują się do limitów budżetu, RAM nie jest; jeśli żądanie powoduje przekroczenie przez instancję limitu RAM swojej klasy instancji, instancja jest kończona na końcu żądania i ten komunikat jest rejestrowany.