การใช้ Memcache จะลดหน่วยความจำอินสแตนซ์ของฉันหรือไม่

ขณะนี้ฉันพบข้อผิดพลาดของหน่วยความจำแบบ soft ในแอป Google App Engine ของฉันเนื่องจากมีการใช้หน่วยความจำสูง วัตถุขนาดใหญ่จำนวนหนึ่งกำลังขับเคลื่อนการใช้หน่วยความจำให้สูงขึ้น

ฉันคิดว่าบางทีถ้าฉันตั้งค่าและเรียกคืนจาก memcache บางทีนั่นอาจลดการใช้หน่วยความจำโดยรวม การอ่านเอกสารต่างๆ ดูเหมือนจะไม่เป็นเช่นนั้น และประโยชน์ของ memcache คือการลดการค้นหา HRD

Memcache ส่งผลกระทบต่อหน่วยความจำโดยรวมเชิงบวกหรือเชิงลบหรือไม่?

แก้ไข: ฉันรู้ว่าฉันสามารถอัพเกรดคลาสอินสแตนซ์เป็น F2 ได้ แต่ฉันกำลังพยายามดูว่าฉันสามารถคงราคาที่ถูกที่สุดในขณะที่ลดหน่วยความจำได้หรือไม่


person user1961    schedule 22.04.2015    source แหล่งที่มา


คำตอบ (1)


การย้ายวัตถุเข้าและออกจาก Memcache จะไม่ส่งผลกระทบต่อหน่วยความจำของคุณ เว้นแต่คุณจะทำลายวัตถุเหล่านี้ในโค้ด Java หรือคอลเลกชันเปล่า

ปัญหาที่ใหญ่กว่าคือเอนทิตี Memcache ถูกจำกัดไว้ที่ 1MB และไม่รับประกัน Memcache ข้อจำกัดข้อแรกหมายความว่าคุณไม่สามารถผลักวัตถุที่มีขนาดใหญ่มากเข้าไปใน Memcache ได้

ข้อจำกัดประการที่สองหมายความว่าคุณไม่สามารถแทนที่ HashMap ด้วย memcache ได้อย่างง่ายดาย ซึ่งเป็นไปไม่ได้ที่จะบอกได้ว่า getValue() ส่งคืนค่า null เนื่องจากไม่มีวัตถุอยู่หรือเนื่องจากถูกชนออกจาก memcache ดังนั้นคุณจะต้องโทรเพิ่มเติมทุกครั้งไปยังพื้นที่เก็บข้อมูลเพื่อดูว่าไม่มีออบเจ็กต์อยู่จริงๆ หรือไม่

person Andrei Volgin    schedule 22.04.2015
comment
นี่เป็นเรื่องจริงโดยทั่วไปฉันเห็นกรณีที่ memcache สามารถช่วยได้ หากโค้ดใช้หน่วยความจำจำนวนมากในการคำนวณผลลัพธ์เล็กน้อย ผลลัพธ์อาจถูกแคชไว้ ซึ่งช่วยลดความจำเป็นในการคำนวณและลดการใช้หน่วยความจำ หากคำถามมีความคลุมเครือน้อยลงเกี่ยวกับสถานการณ์ดังกล่าว การเสนอทางเลือกอื่นก็จะง่ายกว่า - person Zig Mandel; 22.04.2015
comment
ฉันไม่แน่ใจว่าการแคชวัตถุขนาดเล็ก (ผลลัพธ์) จะลดการใช้หน่วยความจำได้อย่างไร โดยปกติแล้ว คุณจำเป็นต้องมีหน่วยความจำจำนวนมากเมื่อต้องอ่านข้อมูลจำนวนมากลงในหน่วยความจำ และคุณไม่สามารถทิ้งได้จนกว่าจะถึงจุดสิ้นสุด ฉันยอมรับว่ามีหลายวิธีในการลดการใช้หน่วยความจำ โดยเฉพาะอย่างยิ่งหากเกี่ยวข้องกับลูปและคอลเลกชัน - person Andrei Volgin; 22.04.2015
comment
ขอบคุณทั้งสอง สถานการณ์ของฉันคือ ฉันมีคำขอมากมายให้อ่าน Blob เดียวกันโดยไม่ต้องแก้ไข การโหลดซ้ำไปซ้ำมาในหลาย ๆ คำขอดูเหมือนจะทำให้การใช้หน่วยความจำเกิน 128mb - person user1961; 23.04.2015
comment
Re andrei เนื่องจากคุณบันทึกการคำนวณค่าใหม่จากแหล่งที่อาจต้องใช้หน่วยความจำมาก OP ควรพิจารณาเก็บวัตถุไว้ในหน่วยความจำส่วนกลางแทน (ด้วยการพิจารณาที่เหมาะสมสำหรับคำขอแบบขนานไปยังอินสแตนซ์เดียวกัน) หากคุณมีคำขอพร้อมกันจำนวนมากและกำลังสร้างสำเนาของคำขอดังกล่าว - person Zig Mandel; 23.04.2015
comment
ดูเหมือนว่ามีหน่วยความจำรั่วในการใช้งานของคุณ การโหลด Blob เดียวกันหลายครั้งไม่ควรมีผลกระทบต่อหน่วยความจำของคุณเกินกว่าจำนวนคำขอแบบขนานสูงสุด และการใช้ Memcache น่าจะช่วยในสถานการณ์ของคุณได้มากที่สุด ไม่ใช่กับหน่วยความจำ แต่เพื่อเพิ่มเวลาตอบสนองให้เร็วขึ้น ตรวจสอบว่าคุณปิดตัวอ่านเมื่อคุณอ่าน Blob และพิจารณาใช้ตัวแปรคงที่ส่วนกลางเพื่อให้แน่ใจว่าคุณมีสำเนาเดียวในหน่วยความจำอินสแตนซ์ - person Andrei Volgin; 23.04.2015
comment
ขอบคุณพวกคุณ - ตอนนี้ฉันอยู่ภายใต้สมมติฐานการทำงานของหน่วยความจำรั่ว ฉันจะเริ่มค้นหาโซลูชันการทำโปรไฟล์หน่วยความจำใน Google ฉันจะลองใส่มันลงใน memcache โดยไม่คำนึงถึง - person user1961; 23.04.2015
comment
ต้องมีหน่วยความจำรั่ว - ฉันได้โหลดหน้าที่เพิ่งพิมพ์ 'runtime.memory_usage().current()' และทุกครั้งที่รีเฟรชค่านี้จะเพิ่มขึ้น - person user1961; 23.04.2015
comment
@ user1961 re: อ่านหยดเดียวจาก memcache ขึ้นอยู่กับขนาดคีย์และอัตราที่คุณวางแผนจะดึงข้อมูล แต่ฉันคิดว่าต้องมีคนพูดถึงคีย์ก่อนที่คุณจะพบปัญหาในการปรับขนาด: กระจายโหลดไปยังคีย์สเปซ Memcache ของคุณ ตรวจสอบสิ่งนี้เพื่อดูรายละเอียดเพิ่มเติม: cloud.google.com/ นักพัฒนา/บทความ/ - person PrecariousJimi; 23.04.2015