Score:0

Java hehep ขนาดใหญ่ในสภาพแวดล้อมคอนเทนเนอร์

ธง uy

ฉันกำลังพยายามเรียกใช้เว็บเซิร์ฟเวอร์ Jetty บน kubernetes ซึ่งต้องการฮีปจำนวนมาก ~ 250 GB ในสภาพแวดล้อมการผลิตของเรา ~ 50 GB ในสภาพแวดล้อมการทดสอบของเรา

ฉันกำลังใช้ ท่าเทียบเรือ:9.4-jdk11ฉันพยายามหลีกเลี่ยงการตั้งค่า Xms หรือ Xmx ตั้งค่าสถานะอย่างชัดเจนเนื่องจากค่าแตกต่างกันระหว่างสภาพแวดล้อมที่แตกต่างกัน ซึ่งฉันคิดว่าขึ้นอยู่กับ -XX:MaxRAMPercentage -XX:Initial RAMPercentage จะดีกว่ามาก แต่ไม่ว่าฉันพยายามอย่างไรก็ไม่สามารถรับได้ MaxHeapSize เพื่อให้ได้เกิน 32178700288 ~ 30 GB

โหนดที่มีเฉพาะแอป Java ที่มีซิดคาร์เล็กๆ สองสามตัว มีหน่วยความจำ 64 GB

ไฟล์นักเทียบท่า

จากท่าเทียบเรือ:9.4-jdk11

ENV APP_WAR root.war
ENV APP_EXPLODED_WAR รูท/
ENV APP_DESTINATION_PATH $JETTY_BASE/webapps/
ENV APP_DESTINATION_WAR $APP_DESTINATION_PATH$APP_WAR
ENV APP_DESTINATION_EXPLODED_WAR $APP_DESTINATION_PATH$APP_EXPLODED_WAR

เพิ่ม . $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

การตั้งค่าทรัพยากรคอนเทนเนอร์

ทรัพยากร:
  ขีด จำกัด :
    ซีพียู: "8"
    หน่วยความจำ: 60G
  คำขอ:
    ซีพียู: "6"
    หน่วยความจำ: 60G

จากค่าเหล่านี้ ฉันควรได้รับ 90% ของ 60 GB MaxHeapSize ~ 54GB ไม่ใช่ 30GB มีความคิดอะไรที่ฉันขาดหายไป?

in flag
คุณยืนยันหรือไม่ว่ามีการใช้ตัวแปรสภาพแวดล้อม `JAVA_OPTIONS` จริง (นั่นคือ คุณเห็นผลลัพธ์ของ `PrintFlagsFinal` ในบันทึกหรือไม่)
uy flag
ใช่ ฉันเห็นและยืนยันได้ว่ากำลังใช้อยู่
Score:0
ธง uy

อาร์กิวเมนต์ JVM ที่เรียกว่า -XX:+UseCompressedOops ซึ่งเปิดใช้งานโดยค่าเริ่มต้นบน Java 11 เป็นสาเหตุมาจาก เอกสาร.

-XX:-UseCompressedOops
    
ปิดใช้งานตัวชี้ที่บีบอัด ตามค่าเริ่มต้น ตัวเลือกนี้จะเปิดใช้งาน และตัวชี้ที่บีบอัดจะถูกใช้เมื่อขนาดฮีปของ Java น้อยกว่า 32 GB เมื่อเปิดใช้งานตัวเลือกนี้ การอ้างอิงวัตถุจะแสดงเป็นออฟเซ็ต 32 บิตแทนพอยน์เตอร์ 64 บิต ซึ่งโดยทั่วไปจะเพิ่มประสิทธิภาพเมื่อเรียกใช้แอปพลิเคชันที่มีขนาดฮีป Java น้อยกว่า 32 GB ตัวเลือกนี้ใช้ได้กับ JVM 64 บิตเท่านั้น
    
นอกจากนี้ยังสามารถใช้ตัวชี้ที่บีบอัดได้เมื่อขนาดฮีปของ Java มากกว่า 32 GB ดูตัวเลือก -XX:ObjectAlignmentInBytes

แค่เปลี่ยน -XX:+ ถึง -XX:- ดังที่แสดงไว้ด้านบนจะปิดการใช้งาน

โดยใช้ -XX:ObjectAlignmentInBytes ไม่แนะนำในกรณีของฉันเช่นเดียวกัน เอกสาร.

-XX:ObjectAlignmentInBytes=การจัดตำแหน่ง

ตั้งค่าการจัดตำแหน่งหน่วยความจำของวัตถุ Java (เป็นไบต์) ตามค่าเริ่มต้น ค่านี้ถูกกำหนดเป็น 8 ไบต์ ค่าที่ระบุควรเป็นเลขยกกำลัง 2 และต้องอยู่ในช่วง 8 และ 256 (รวมอยู่ด้วย) ตัวเลือกนี้ทำให้สามารถใช้พอยน์เตอร์ที่บีบอัดกับ Java heap ขนาดใหญ่ได้

ขีดจำกัดขนาดฮีปเป็นไบต์คำนวณดังนี้:

4GB * ObjectAlignmentInBytes

บันทึก:

เมื่อค่าการจัดตำแหน่งเพิ่มขึ้น ช่องว่างที่ไม่ได้ใช้ระหว่างวัตถุก็จะเพิ่มขึ้นด้วย ด้วยเหตุนี้ คุณจึงอาจไม่เห็นประโยชน์ใดๆ จากการใช้พอยน์เตอร์ที่บีบอัดด้วยขนาดฮีป Java ขนาดใหญ่

แต่ฉันคิดว่ามันคุ้มค่าที่จะทดสอบ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา