Używamy SBT 0.13 i JVM Java 8 na CircleCI, aby zbudować aplikację Play z kilkoma podprojektami. Czasami wychodziliśmy z problemów z pamięcią w CircleCI, gdzie przerwano naszą kompilację, ponieważ przekraczało to 4 GB pamięci.SBT brak pamięci z podprojektami
Wczoraj dodałem nowy podprojekt do naszej kompilacji, a prawie wszystkie kompilacje zawiodły teraz w przypadku braku pamięci. Wygląda na to, że dodanie podprojektów również zwiększa ilość pamięci używanej w naszej kompilacji.
Próbowałem kilka rzeczy, aby zmniejszyć obciążenie pamięci:
- Dodaj
_JAVA_OPTIONS: "-Xms512m -Xmx2048"
docircle.yml
jak opisano na CircleCI's documentation pages. (Zauważyłem z rejestru, że maszyna JVM odbiera to ustawienie.) - Dodaj parametr
-mem
do wywołania SBT. - Dodaj
concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)
na górze pliku SBT, aby upewnić się, że przynajmniej pamięć nie jest używana jednocześnie.
Wydaje się, że wszystkie te środki pomogły, ale nie znalazłem jeszcze ostatecznego rozwiązania tego problemu.
Co jeszcze mogę zrobić, aby utrzymać wykorzystanie pamięci SBT pod kontrolą?
EDIT: Nasz projekt ma 5 podprojektów, z około 14.000 linii kodu Scala (a także, 21000 linii kodu Java, które dziedziczone). Brak pamięci zwykle (ale nie zawsze) występuje podczas wykonywania analizy statycznej za pomocą FindBugs: używamy tego w połączeniu z pluginem FindSecurityBugs, aby znaleźć problemy bezpieczeństwa.
jaki jest twój projekt? ile linii kodu masz?kiedy dostaniesz OOM podczas kompilacji? opakowanie? faza testów? – Rumoku
@rumoku Dobre pytania; Zmieniłem moje pytanie, by na nie odpowiedzieć. – jqno
Widzisz problemy w innej fazie niż w tym drugim pytaniu, ale może ci to pomóc: http://stackoverflow.com/questions/16640823/sbt-runs-out-of-memory?rq=1 – 2rs2ts