2012-05-13 42 views
10

Tôi có 7 trình tiện ích java khác nhau mà tôi chạy (tất cả 7) trên 3 máy chủ khác nhau. Dòng lệnh java có -Xmx2048m và -Xss1024k. Trên 3 máy chủ này, tất cả 21 quy trình chỉ hiển thị dưới 2,5 GB cho kích thước VIRT ở trên cùng và trên đỉnh. RES kích thước khác nhau từ 300 đến 1,9 GB theo đó daemon nó được.Điều gì sẽ gây ra quá trình java vượt quá giới hạn Xmx hoặc Xss?

Đó là tất cả như mong muốn.

Nhập máy chủ mới. CPU nhanh hơn, RAM nhiều hơn (16 GB thay vì 8 GB), hơi mới hơn java (1.6.0_10-b33 trên các máy chủ cũ, 1.6.0_31-b04 trên máy chủ mới). Cả hai hệ thống (và JVM) đều là 64bit.

Đã chuyển 2 daemon sang máy chủ mới. Trên máy chủ mới, được đưa ra cùng một nhiệm vụ, các trình tiện ích đều tiêu thụ nhiều CPU hơn (về giá trị cốt lõi) và ít được thực hiện hơn. (Đã chuyển từ 5110 bộ vi xử lý trên các hệ thống cũ sang 5620 trên hệ thống mới).

Khá nhiều lõi đầy đủ của việc sử dụng CPU (GC thread ??) và báo cáo 5 GB VIRT và 2 GB RES cho một daemon và 10.5 GB VIRT và 2 GB RES cho daemon khác.

Bất kỳ ý tưởng nào sẽ khiến java bỏ qua (hoặc dường như bỏ qua nếu đúng như vậy) giới hạn bộ nhớ?

+0

VIRT là bộ nhớ ảo, không có mối quan hệ trực tiếp với không gian heap. Tôi khuyên bạn nên đọc câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/4893192/process-memory-vs-heap-jvm –

+0

Bạn đã thử dùng cùng một phiên bản Java trên máy mới chưa? Cả hai đều giống nhau không? –

+0

'Xmx' không chỉ định mức sử dụng bộ nhớ của JVM; nó chỉ định kích thước tối đa của nhóm phân bổ heap, đó chỉ là một trong các vùng nhớ được JVM sử dụng. – skaffman

Trả lời

8

Hóa ra đây là vấn đề glibc.

Câu trả lời ngắn đối với tôi là:

xuất khẩu MALLOC_ARENA_MAX = 1

này giảm quá trình dấu chân (VIRT ở trên cùng) bởi càng nhiều càng 5x. Quay lại mức nhìn thấy trong CentOS 5.

các phiên bản gần đây của glibc có một tính năng mới "hồ bộ nhớ cho mỗi chủ đề":

http://www.centos.org/docs/5/html/5.4/Technical_Notes/glibc.html

Mục cuối cùng trong phần 1.71.1 log thảo luận về nó (và đề cập đến một lỗi không công khai ....)

+2

Bạn có thể muốn đặt MALLOC_ARENA_MAX thành 4 thay vì 1, để nhận được một số lợi ích bộ nhớ đa luồng mà thay đổi được dự định để giải quyết. Xem phần này: issues.apache.org/jira/browse/HADOOP-7154 – michael

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