Chúng tôi đang sử dụng SBT 0.13 và Java 8 JVM trên CircleCI để xây dựng ứng dụng Play với một số tiểu dự án. Đôi khi chúng tôi gặp phải vấn đề về bộ nhớ trên CircleCI, nơi nó hủy bỏ bản dựng của chúng tôi vì nó vượt quá 4 GB dung lượng bộ nhớ.SBT hết bộ nhớ với các tiểu dự án
Hôm qua, tôi đã thêm một tiểu dự án mới vào bản dựng của chúng tôi và hầu như tất cả các bản dựng đều không thành công trong vấn đề bộ nhớ. Dường như việc thêm các dự án con cũng tăng thêm lượng bộ nhớ được sử dụng cho bản dựng của chúng tôi.
Tôi đã thử một vài điều để giảm tải bộ nhớ của chúng tôi:
- Thêm
_JAVA_OPTIONS: "-Xms512m -Xmx2048"
-circle.yml
như mô tả trên CircleCI's documentation pages. (Tôi nhận thấy từ nhật ký mà JVM thực hiện trên thiết lập này.) - Thêm tham số
-mem
vào cuộc gọi SBT. - Thêm
concurrentRestrictions in Global += Tags.limit(Tags.Test, 1)
vào đầu tệp SBT, để đảm bảo rằng ít nhất bộ nhớ không được sử dụng cùng một lúc.
Tất cả các biện pháp này dường như đã giúp, nhưng tôi chưa tìm ra giải pháp dứt khoát cho vấn đề này.
Tôi còn có thể làm gì khác để kiểm soát mức sử dụng bộ nhớ của SBT?
EDIT: Dự án của chúng tôi có 5 tiểu dự án, với khoảng 14000 dòng mã Scala (và cũng có, 21.000 dòng mã Java mà chúng tôi 'kế thừa'). Bộ nhớ ngoài thường (nhưng không phải luôn luôn) xảy ra khi thực hiện phân tích tĩnh bằng FindBugs: chúng tôi sử dụng kết hợp với plugin FindSecurityBugs để tìm các vấn đề bảo mật.
Dự án của bạn lớn đến mức nào? bạn có bao nhiêu dòng mã?khi nào bạn nhận được OOM về biên dịch? bao bì? giai đoạn thử nghiệm? – Rumoku
@rumoku Câu hỏi hay; Tôi đã chỉnh sửa câu hỏi của mình để trả lời chúng. – jqno
Bạn đang gặp sự cố trong một giai đoạn khác với câu hỏi khác này, nhưng nó có thể giúp bạn: http://stackoverflow.com/questions/16640823/sbt-runs-out-of-memory?rq=1 – 2rs2ts