JVM บน Linux จะใช้ฮีปมากกว่า Solaris หรือไม่

เมื่อเร็วๆ นี้เรามีโปรเจ็กต์การย้ายเซิร์ฟเวอร์สองโปรเจ็กต์จาก Solaris ไปยัง RedHat Enterprise บน VM ทั้งสองเป็นแอปพลิเคชัน J2EE ที่ทำงานบน OC4J 10.1.3.5

ปรากฏการณ์ที่น่าสนใจประการหนึ่งที่เราพบคืออินสแตนซ์ OC4J JVM ที่ทำงานบน Linux จริงๆ แล้วจะใช้ฮีปมากกว่าอินสแตนซ์บน Solaris ตัวอย่างเช่น หนึ่งในแอปพลิเคชันของเราจะใช้ขนาดฮีปเพียง 30 - 40MB บน Solaris เมื่อเริ่มต้นใหม่ ในขณะที่บน Linux จะใช้ขนาดฮีปเพียง 400MB เมื่อเริ่มต้นระบบ ซึ่งต่างกัน 10 เท่า กรณีที่คล้ายกันเกิดขึ้นในแอปพลิเคชันอื่น

เราได้ตรวจสอบว่าเวอร์ชัน JVM และอาร์กิวเมนต์เริ่มต้นทั้งหมดเหมือนกัน

ฉันค้นหาไปรอบ ๆ และพบคำถามที่คล้ายกันนี้: ความแตกต่างระหว่าง jvm บน linux และเครื่องโซลาริส

อย่างไรก็ตาม ฉันไม่พบบทความทางเทคนิคเกี่ยวกับปัญหานี้ อาจเนื่องมาจากปัญหาการกำหนดค่าบางอย่างบนเครื่อง Linux แทนที่จะเป็น JVM หรือไม่

เราใช้ JDK 1.6.0_38-b05 64 บิต

แก้ไข: นี่คืออาร์กิวเมนต์เริ่มต้นของ JVM: -server -Xms2560M -Xmx2560M


person am5a03    schedule 10.12.2013    source แหล่งที่มา
comment
เซิร์ฟเวอร์มีขนาดหน่วยความจำต่างกันหรือไม่ JVM จะพิจารณาสิ่งนี้และตัดสินใจเกี่ยวกับขนาดเริ่มต้นที่เหมาะสม - นอกจากนี้ โปรดบอกเราด้วยว่าจะเกิดอะไรขึ้นหากคุณจำกัด linux JVM ไว้ที่ -Xmx64m   -  person Ingo    schedule 10.12.2013
comment
ขึ้นอยู่กับการนำ JVM ไปใช้เป็นอย่างมาก คุณใช้ Oracle/Sun JVM กับทั้งคู่หรือไม่   -  person CodeChimp    schedule 10.12.2013
comment
นั่นคือขนาดชุดการทำงาน (RSS) หรือพื้นที่ที่อยู่เสมือน ฉันคิดว่าอย่างหลังจะไม่สำคัญ   -  person Raedwald    schedule 10.12.2013
comment
มันจะช่วยได้ถ้าเราเห็นพารามิเตอร์การเริ่มต้น JVM อาจตรงกันระหว่างเซิร์ฟเวอร์ แต่ตามที่ @Ingo ชี้ให้เห็น มีค่าเริ่มต้น ดังนั้น หากคุณไม่ระบุขนาดเริ่มต้น ค่าเริ่มต้นจะแตกต่างกันไปตามเซิร์ฟเวอร์ต่างๆ   -  person Brandon    schedule 10.12.2013
comment
ฉันเคยเห็นพฤติกรรมที่คล้ายกันเมื่อย้ายจากการแจกจ่าย Linux อื่น (จำไม่ได้ว่าอันไหน) ไปยัง Redhat Enterprise Linux 6 ฉันเดาว่าคุณควรถามเจ้าหน้าที่ฝ่ายสนับสนุนของ RedHat   -  person jeroen_de_schutter    schedule 10.12.2013
comment
@Ingo เราได้ตั้งค่าอาร์กิวเมนต์ -Xms และ -Xmx อย่างชัดเจนเป็น 2560M อาร์กิวเมนต์เริ่มต้นใน JVM คือ -server -Xms2560M -Xmx2560M   -  person am5a03    schedule 10.12.2013
comment
ห้องสมุดท้องถิ่นมีส่วนเกี่ยวข้องหรือไม่? คุณใช้คำสั่งอะไรในการวัดการใช้หน่วยความจำ? อะไรบอกว่า pmap -x java_pid บนระบบปฏิบัติการทั้งสอง?   -  person jlliagre    schedule 11.12.2013