Điểm:0

Đống lớn Java trong môi trường vùng chứa

lá cờ uy

Tôi đang cố gắng chạy máy chủ web Jetty trên kubernetes, nó cần một lượng rất lớn ~ 250 GB trong môi trường sản xuất của chúng tôi, ~ 50 GB trong môi trường thử nghiệm của chúng tôi.

Tôi đang sử dụng cầu cảng:9.4-jdk11, tôi đang cố tránh cài đặt xms hoặc xmx cờ một cách rõ ràng vì giá trị khác nhau giữa các môi trường khác nhau, vì điều đó tôi nghĩ tùy thuộc vào -XX:Phần trăm RAM tối đa -XX:Phần trăm RAM ban đầu sẽ tốt hơn nhiều, nhưng dù tôi có cố gắng thế nào đi chăng nữa thì tôi cũng không thể có được Kích thước Heap tối đa để vượt qua 32178700288 ~ 30 GB.

Nút chỉ có ứng dụng Java trên đó với một vài sidcar nhỏ, có bộ nhớ 64 GB.

Dockerfile

TỪ cầu cảng:9.4-jdk11

ENV APP_WAR root.war
ENV APP_EXPLODED_WAR root/
ENV APP_DESTINATION_PATH $JETTY_BASE/ứng dụng web/
ENV APP_DESTINATION_WAR $APP_DESTINATION_PATH$APP_WAR
ENV APP_DESTINATION_EXPLODED_WAR $APP_DESTINATION_PATH$APP_EXPLODED_WAR

CỘNG . $APP_DESTINATION_EXPLODED_WAR

ENV JAVA_OPTIONS -XX:+PrintFlagsFinal -XX:MaxRAMPercentage=90 -XX:InitialRAMPercentage=90 -XX:-OmitStackTraceInFastThrow -XX:+UseStringDeduplication -Xlog:gc*,stringdedup*=debug:file=/tmp/gc.log:time

Cài đặt tài nguyên vùng chứa

tài nguyên:
  Hạn mức:
    bộ xử lý: "8"
    bộ nhớ: 60G
  yêu cầu:
    bộ xử lý: "6"
    bộ nhớ: 60G

Dựa trên những giá trị này, tôi sẽ nhận được 90% của 60 GB Kích thước Heap tối đa ~ 54 GB chứ không phải 30 GB. Bất cứ ý tưởng những gì tôi đang mất tích?

lá cờ in
Bạn đã xác nhận rằng biến môi trường `JAVA_OPTIONS` đang thực sự được áp dụng chưa (nghĩa là bạn có thấy đầu ra của `PrintFlagsFinal` đó trong nhật ký) không?
lá cờ uy
Có, tôi thấy nó và tôi có thể xác nhận rằng nó đang được áp dụng.
Điểm:0
lá cờ uy

Một đối số JVM được gọi là -XX:+Sử dụng NénOops được bật theo mặc định trên Java 11, là nguyên nhân, từ tài liệu.

-XX:-Sử dụng NénOops
    
Vô hiệu hóa việc sử dụng các con trỏ nén. Theo mặc định, tùy chọn này được bật và con trỏ nén được sử dụng khi kích thước heap Java nhỏ hơn 32 GB. Khi tùy chọn này được bật, các tham chiếu đối tượng được biểu diễn dưới dạng độ lệch 32 bit thay vì con trỏ 64 bit, thường tăng hiệu suất khi chạy ứng dụng có kích thước heap Java dưới 32 GB. Tùy chọn này chỉ hoạt động đối với các JVM 64 bit.
    
Cũng có thể sử dụng con trỏ nén khi kích thước heap Java lớn hơn 32 GB. Xem tùy chọn -XX:ObjectAlignmentInBytes.

Chỉ cần thay đổi -XX:+ đến -XX:- như hình trên sẽ vô hiệu hóa nó.

sử dụng -XX:ObjectAlignmentInBytes không được khuyến khích trong trường hợp của tôi, từ cùng tài liệu.

-XX:ObjectAlignmentInBytes=căn chỉnh

Đặt căn chỉnh bộ nhớ của các đối tượng Java (tính bằng byte). Theo mặc định, giá trị được đặt thành 8 byte. Giá trị được chỉ định phải là lũy thừa của 2 và phải nằm trong phạm vi từ 8 đến 256 (bao gồm). Tùy chọn này cho phép sử dụng các con trỏ nén với kích thước heap Java lớn.

Giới hạn kích thước heap tính bằng byte được tính như sau:

4GB * ObjectAlignmentInBytes

Ghi chú:

Khi giá trị căn chỉnh tăng lên, khoảng cách không sử dụng giữa các đối tượng cũng tăng lên. Do đó, bạn có thể không nhận ra bất kỳ lợi ích nào từ việc sử dụng con trỏ nén với kích thước vùng heap Java lớn.

Nhưng tôi đoán nó đáng để thử nghiệm.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.