2012-11-13 18 views
10

Đã thực hiện một số thử nghiệm kéo dài (ab) cho 1 doku của tôi và cơ sở dữ liệu dev với 20 kết nối giới hạn.rò rỉ bộ nhớ Heroku với Play2 scala

Trong các cuộc gọi (mà cơ sở dữ liệu truy cập với squeryl việc phân bổ đống đang gia tăng gây R14 (bộ nhớ hơn 512MB))

tôi dường như không thể tái tạo các vấn đề (tại thấy mức độ ít nhất là tại địa phương).

Có cách nào để lấy phân vùng heap heroku và phân tích nó để nhận được một số đầu mối không?

Có bất kỳ vấn đề nào đã biết với phát hiện rò rỉ bộ nhớ play2, scala, squeryl và heroku không?

Cập nhật

Nếu tôi làm System.gc ở phần cuối của bộ điều khiển tất cả mọi thứ có vẻ là tốt và OFC chậm ... Tôi tạo ra rất nhiều đối tượng tại cuộc gọi đó, nhưng không nên Heroku của JVM mất chăm sóc gc? Ngoài ra nếu tôi lên lịch cuộc gọi gc kỳ không giải phóng bộ nhớ

+0

Bạn có sử dụng Phát trực tuyến (khối trả lại) không? – Schleichardt

+0

Không, tôi không biết. Nếu tôi làm System.gc ở phần cuối của bộ điều khiển tất cả mọi thứ dường như là tốt đẹp và chậm hơn ofc ... Tôi tạo ra rất nhiều đối tượng tại cuộc gọi đó nhưng không nên herokus JVM chăm sóc gc? Ngoài ra nếu tôi lên lịch gc cuộc gọi định kỳ không miễn phí bộ nhớ .. – weakwire

+0

Bạn đang sử dụng mặc định 'JAVA_OPTS' trong' Procfile'? –

Trả lời

5

Có một bài viết tuyệt vời cho các vấn đề bộ nhớ xử lý sự cố trên Heroku: https://devcenter.heroku.com/articles/java-memory-issues

Trong trường hợp của bạn, bạn có thể thêm những lá cờ GC để JAVA_OPTS để xem chi tiết bộ nhớ. Tôi muốn đề nghị các cờ sau:

heroku config:add JAVA_OPTS="-Xmx384m -Xss512k -XX:+UseCompressedOops -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps"

Ngoài ra còn có một đại lý java đơn giản mà bạn có thể thêm vào quá trình của bạn nếu bạn muốn có một chút biết thêm từ JMX về bộ nhớ của bạn. Bạn cũng có thể xem xét các addons như Relic mới nếu bạn muốn đi sâu hơn, nhưng tôi nghĩ bạn nên ổn với cờ và java agent.

0

Tôi cũng gặp vấn đề này và trả lời câu hỏi here.

Tôi gặp vấn đề tương tự. Heroku đang cho bạn biết máy đang chạy hết bộ nhớ, chứ không phải máy ảo Java. Có một lỗi trong triển khai Heroku Play 2.2, tập lệnh khởi động đọc java_opts, không phải JAVA_OPTS.

tôi cố định nó bằng cách thiết lập cả hai:

heroku config:add java_opts='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 
heroku config:add JAVA_OPTS='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 

Tôi cũng đã phải thiết lập -Xms nếu không tôi đã nhận một lỗi nói rằng min và max là không tương thích. Tôi đoán Play2.2 đang sử dụng mặc định cao hơn 384m.

+0

FYI. Điều này không còn là một vấn đề. Triển khai một ứng dụng 2.3 chơi và nó đã chọn JAVA_OPTS tốt. –