java -Xms , java -Xmx กำหมด memory ให้ JVM เพื่อป้องกันปัญหา Out of Memory
บทความเกี่ยวกับ : java -Xms , java -Xmx กำหมด memory ให้ JVM เพื่อป้องกันปัญหา Out of Memory
หลายคนคงจะเจอปัญหา out of memory เนื่องจากแรมไม่พอให้ JVM ใช้งาน
เหตุการแบบนี้อาจะเกิดจากความผิดพลาดในการคืน resource ของ Programmer เอง
แต่บางครั้ง Program ที่เขียนก็มีความต้องการใช้ Memory จำนวนมากจริงๆ เกินกว่าค่า default ที่กำหนดไว้ ซึ่งหากเราต้องการปรับแก้ให้ใช้คำสั่ง
-java -Xms init ค่า heap size
โดย Xms นั้นจะเป็นการกำหนดค่า ตั้งต้นของ Memory ไว้เป็นขั้นต่ำจากนั้นจะค่อยๆ เพิ่ม
ถ้าหากมีความจำเป็นต้องการใช้ Memory ในบางช่วง Peak โดยมากสุดจะไม่เกิน Xmx
ค่าตั้งต้นควรกำหนดให้เหมาะสม ถ้าน้อยเกินไปก็จะทำให้ต้องเสียเวลานในการขยาย
แต่ถ้ามากเกินไปก็จะเป็นการจอง Memory ไว้จนเกินความจำเป็น
-java -Xmx max heap size
ค่านี้เป็นค่าสูงสุดที่ Java จะทำการขยาย Memory เพื่อให้รองรับ load งานต่างๆ ของเราได้
การกำหนด Value ตรงนี้น้อยไปอาจมีผลเสีย กรณีที่ระบบเรา Peak ขึ้นมาในบางช่วง
ในทางตรงกันข้ามหากกำหนดไว้มากเกินไปจะมีผลให้ Memory ถูกจองมาใช้เยอะเกินไป
หากเกิดปัญหาจากการที่ Programmer เขียนโปรแกรมไม่ดี ไม่ยอมคืน Resource จะทำให้
ใช้ Memory ส่วนนี้เยอะจน Ram ไม่พอทำให้ล่มไปทั้ง Server เลยก็เป็นได้นะ
ตัวอย่างการกำหนดค่า Xms , Xmx เช่น
ลองเอาไปปรับให้เหมาะสมกับโปรแกรมเราครับ
รับรองว่าปัญหา Out of Memory จะไม่เกิดขึ้น
แต่ทั้งนี้เราก็ต้องจัดการ Resource ให้ดีด้วยนะครับ ไม่เช่นนั้นไม่ว่าจะเพิ่มมากแค่ใหน
ก็ไม่รอดเพียงแต่จะขยายเวลา Out of Memory ออกไปแค่นั้นเอง
นอกจากนี้แล้วยังมี Parameter บางส่วนเกี่ยวกับเรื่องการจัดการ Memory เดี๋ยวจะเล่าให้ฟังอีกทีนะครับ
เช่นพวก -Xmn -Xss เป็นต้น
นอกจากนี้แล้ว Memory ใน JVM ยังมีอีกส่วนที่ไม่ใช่ส่วนของ Heap Memory แต่เป็น Non Heap Memory หรือ PermGen เราสามารถเพิ่มได้ด้วยคำสั่ง
MaxPermSize=512m เป็นต้น
หลายคนคงจะเจอปัญหา out of memory เนื่องจากแรมไม่พอให้ JVM ใช้งาน
เหตุการแบบนี้อาจะเกิดจากความผิดพลาดในการคืน resource ของ Programmer เอง
แต่บางครั้ง Program ที่เขียนก็มีความต้องการใช้ Memory จำนวนมากจริงๆ เกินกว่าค่า default ที่กำหนดไว้ ซึ่งหากเราต้องการปรับแก้ให้ใช้คำสั่ง
-java -Xms init ค่า heap size
โดย Xms นั้นจะเป็นการกำหนดค่า ตั้งต้นของ Memory ไว้เป็นขั้นต่ำจากนั้นจะค่อยๆ เพิ่ม
ถ้าหากมีความจำเป็นต้องการใช้ Memory ในบางช่วง Peak โดยมากสุดจะไม่เกิน Xmx
ค่าตั้งต้นควรกำหนดให้เหมาะสม ถ้าน้อยเกินไปก็จะทำให้ต้องเสียเวลานในการขยาย
แต่ถ้ามากเกินไปก็จะเป็นการจอง Memory ไว้จนเกินความจำเป็น
-java -Xmx max heap size
ค่านี้เป็นค่าสูงสุดที่ Java จะทำการขยาย Memory เพื่อให้รองรับ load งานต่างๆ ของเราได้
การกำหนด Value ตรงนี้น้อยไปอาจมีผลเสีย กรณีที่ระบบเรา Peak ขึ้นมาในบางช่วง
ในทางตรงกันข้ามหากกำหนดไว้มากเกินไปจะมีผลให้ Memory ถูกจองมาใช้เยอะเกินไป
หากเกิดปัญหาจากการที่ Programmer เขียนโปรแกรมไม่ดี ไม่ยอมคืน Resource จะทำให้
ใช้ Memory ส่วนนี้เยอะจน Ram ไม่พอทำให้ล่มไปทั้ง Server เลยก็เป็นได้นะ
ตัวอย่างการกำหนดค่า Xms , Xmx เช่น
-java -Xms256m
-java -Xmx512mลองเอาไปปรับให้เหมาะสมกับโปรแกรมเราครับ
รับรองว่าปัญหา Out of Memory จะไม่เกิดขึ้น
แต่ทั้งนี้เราก็ต้องจัดการ Resource ให้ดีด้วยนะครับ ไม่เช่นนั้นไม่ว่าจะเพิ่มมากแค่ใหน
ก็ไม่รอดเพียงแต่จะขยายเวลา Out of Memory ออกไปแค่นั้นเอง
นอกจากนี้แล้วยังมี Parameter บางส่วนเกี่ยวกับเรื่องการจัดการ Memory เดี๋ยวจะเล่าให้ฟังอีกทีนะครับ
เช่นพวก -Xmn -Xss เป็นต้น
นอกจากนี้แล้ว Memory ใน JVM ยังมีอีกส่วนที่ไม่ใช่ส่วนของ Heap Memory แต่เป็น Non Heap Memory หรือ PermGen เราสามารถเพิ่มได้ด้วยคำสั่ง
MaxPermSize=512m เป็นต้น
จะรู้ได้อย่างไรว่าจะ ต้องกำหนด xmx xms xmx เท่าไร
ตอบลบรวมถึงพวก permgen ด้วยครับ
ความคิดเห็นนี้ถูกลบโดยผู้ดูแลระบบของบล็อก
ตอบลบความคิดเห็นนี้ถูกลบโดยผู้ดูแลระบบของบล็อก
ตอบลบ