2012-01-03 31 views
6

Gần đây chúng tôi bắt đầu sử dụng Relic mới để giám sát webapp sản xuất của chúng tôi được lưu trữ trong máy chủ tomcat 7.0.6 nhưng chúng tôi đã quan sát thấy rằng bộ nhớ của tomcat này đang tăng liên tục và trong vòng một tuần nó ăn hết tất cả máy chủ (AWS High-Memory Double Extra Large Instance) và trở nên không phản hồi, cách duy nhất để lấy lại nó là khởi động lại nó. Chúng tôi cung cấp các đối số Xms & Xmx khi khởi động tomcat nhưng trong vài giờ sử dụng bộ nhớ của quá trình tomcat vượt qua giá trị Xmx và nó tiếp tục tăng cho đến khi tất cả bộ nhớ máy chủ kết thúc. Đây là quá trình lệnh:Tại sao New Relic ăn nhiều bộ nhớ tomcat?

/usr/java/jdk1.6.0_24//bin/java 
    -Djava.util.logging.config.file=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/conf/logging.properties 
    -Xms8192m 
    -Xmx8192m 
    -javaagent:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/newrelic/newrelic.jar 
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
    -Duser.timezone=Asia/Calcutta 
    -Djava.endorsed.dirs=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/endorsed 
    -classpath /xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/bootstrap.jar:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/tomcat-juli.jar 
    -Dcatalina.base=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6 
    -Dcatalina.home=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6 
    -Djava.io.tmpdir=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/temp org.apache.catalina.startup.Bootstrap start" 

Lý tưởng nhất là tôi mong chờ quá trình này không phải để sử dụng nhiều hơn 8GB bộ nhớ nhưng trong vòng vài giờ nó đi trên 10GB và trong vòng vài ngày nó đi trên 20GB và mọi thứ khác trên máy chủ này bị do nó (tôi sử dụng 'top' để xem mức sử dụng bộ nhớ). Sao có thể như thế được?

+0

Tôi là kỹ sư làm việc trên Đại lý Java tại New Relic. Nếu bạn thích, bạn có thể mở một vé hỗ trợ cho vấn đề này tại [email protected] Bạn đang sử dụng phiên bản Java Agent nào? Ngoài ra, là sự bùng nổ bộ nhớ trong bộ nhớ hệ thống hoặc bộ nhớ heap? –

+0

Tôi dường như có vấn đề này quá, vì vậy bạn không phải một mình. Tôi đã gửi yêu cầu hỗ trợ với newrelic vào cuối tuần này. Trong trường hợp của chúng tôi, tomcat chỉ chết với một ngoại lệ OutOfMemory. – JBCP

+0

Xảy ra với tôi quá –

Trả lời

1

Tôi đang chia sẻ thêm một số thông tin về sự cố được báo cáo ở trên. rò rỉ bộ nhớ không nằm trong vùng heap Java. Ứng dụng không bao giờ đạt tới bất kỳ lỗi OUT OF MEMORY nào (8 gb là giới hạn tối đa của heap trong Java mà chúng tôi đã đặt). Tuy nhiên bộ nhớ ảo và bộ nhớ thường trú vẫn tiếp tục tăng cho đến khi RAM hết bộ nhớ. Chúng tôi đã xác nhận rằng sự rò rỉ này xảy ra khi sử dụng tác nhân relic. Phiên bản: New Relic Agent v2.1.2

1

Xin lỗi vì sự cố. Chúng tôi (Relic mới) đang điều tra vấn đề nhưng đề nghị đầu tiên là hãy thử phiên bản 2.2.1 mới nhất của tác nhân Java đã tạo ra những thay đổi đáng kể cho cách chúng ta tổ chức các lớp học.

Tôi sẽ theo dõi tại đây khi chúng tôi có thêm thông tin.

+0

có bất kỳ cập nhật nào về điều này không? –

+0

Chúng tôi đã thử 2.2.1 cũng như 2.3.1, nó vẫn đang xảy ra. – ThinkFloyd

+2

Tôi cũng gặp phải sự cố này. Và tôi vừa thử nghiệm với 2.6 – ZacharyP

4

Có vấn đề ảnh hưởng đến bất kỳ JVM Sun/Oracle nào và sẽ biểu hiện dưới dạng tăng trưởng không bị chặn trong bộ nhớ không phải là bộ nhớ (gốc). Có một giải pháp thay thế cho phiên bản New Relic Java phiên bản 2.16+ bằng cách thêm độ trễ tắt máy để chuyển đổi lớp trong tệp newrelic.yml của bạn trong phần chung.

class_transformer: 
    shutdown_delay: 3600 

Từ changelog

làm việc xung quanh cho Oracle JVM lỗi rằng trong trường hợp hiếm gặp gây ra một ký ức quê hương rò rỉ

Trong những trường hợp hiếm hoi, Oracle JVM có thể bị rò rỉ bộ nhớ hệ điều hành bản địa (không heap không gian) khi các lớp bị chặn bởi tác nhân. Cài đặt này chuyển sang số tắt việc chặn các lớp được tải sau số lượng giây nhất định. Đại lý sẽ tiếp tục theo dõi các lớp học được tải trước thời gian này .

Các vấn đề liên quan