เมื่อเร็วๆ นี้เรามีโปรเจ็กต์การย้ายเซิร์ฟเวอร์สองโปรเจ็กต์จาก 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
pmap -x java_pid
บนระบบปฏิบัติการทั้งสอง? - person jlliagre   schedule 11.12.2013