2012-01-06 11 views
16

Tôi đang sử dụng SBT 0.7.7. Khi tôi thực hiện thay đổi đối với dự án Lift tôi và tái biên dịch qua:Lỗi Bộ nhớ Sử dụng SBT Khi Thực hiện Dự án Nâng

  1. jetty-stop
  2. compile
  3. jetty-run

tôi nhận được lỗi sau:

Error during sbt execution: java.lang.OutOfMemoryError: PermGen space

tôi được xác định bên trong /opt/local/bin/sbt-0.7:

# Is the location of the SBT launcher JAR file. 
LAUNCHJAR="/opt/local/share/sbt-0.7/sbt-launch-0.7.7.jar" 

# Ensure enough heap space is created for SBT. 
if [ -z "$JAVA_OPTS" ]; then 
JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M" 
fi 

# Assume java is already in the shell path. 
exec java $JAVA_OPTS -jar "$LAUNCHJAR" "[email protected]" 
+0

Có thể trùng lặp: [câu hỏi này] (http://stackoverflow.com/questions/1451648/permgen-problems-with-lift-and-jetty). – Philippe

+0

Cảm ơn Philippe. Tôi đã thử thêm các tùy chọn này vào sbt-0.7 nhưng tôi vẫn gặp phải những lỗi đó. – Hahnemann

Trả lời

5

Bạn cần cho phép java phân bổ nhiều bộ nhớ hơn.

# You may need more or less depending on your project. 
export SBT_OPTS=-Xmx1024M 

Bạn cũng có thể truy cập lại một số cài đặt bộ nhớ khác. Tôi đang chạy SBT 0.11.2, và tôi không có gì ngoài Xmx quy định.

Là một sang một bên, tôi sẽ ngạc nhiên nếu bạn thực sự có bất kỳ vấn đề GC nào trong khi biên dịch. Thay đổi chiến lược thu thập GC phù hợp hơn cho các quy trình chạy dài hơn.

+2

"Tôi sẽ ngạc nhiên". Sau đó, tôi giả sử bạn là, vì điều này xảy ra tất cả thời gian với tôi khi biên soạn dự án lớn. "phù hợp hơn cho các quy trình chạy dài hơn" .... bạn đã bao giờ biên soạn Scala chưa? –

38

PermGen chỉ là một trong nhiều không gian tạo nên Heap. Bạn có thể tăng toàn bộ vùng heap cho đến khi phần được phân bổ đủ lớn cho nhu cầu của bạn hoặc bạn chỉ đơn giản là có thể tăng phân bổ về phía không gian PermGen. Để làm được sau đó, sử dụng

Đối với SBT 0.12.0

export SBT_OPTS=-XX:MaxPermSize=256m

Nó sẽ là tốt nhất để đặt điều này trong .bash_profile của bạn (giả sử bạn đang sử dụng bash)

Đối sbt 0.7

Trong trường hợp của bạn, hãy tăng -XX: MaxPermSize thành thứ gì đó hơn 256m. Lưu ý rằng cần nhiều hơn 256m cho thấy có thể có các vấn đề khác.

+0

'SBT_OPTS = -XX: MaxPermSize = 256m' không hoạt động đối với sbt' 0.13.9'. 'SBT_OPTS = -Xmx1024M' đã làm. – robert