มันปลอดภัยแค่ไหนที่จะเพิ่ม tmpfs ให้มากกว่าหน่วยความจำกายภาพ?


11

เซิร์ฟเวอร์ของฉันมี 2GB RAM และ 120GB SSD รวมทั้งอาร์เรย์ RAID บางส่วนสำหรับจัดเก็บข้อมูล ระบบปฏิบัติการคือ Debian 8 (Linux 3.16)

ฉันมีแอพพลิเคชั่นที่ใช้ MySQL ที่มีtmpdir= /run/mysqldซึ่งtmpfsกำหนดค่าโดย Debian ผ่าน/etc/default/tmpfs:

# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM

สิ่งนี้เคย20%VMเป็นประมาณ 384M ฉันวิ่งแข่งหลายครั้งno space left on deviceดังนั้นฉันจึงเพิ่มมันเป็นถึง40%VMแม้จะมีขนาดประมาณ 763M ก็ยังเล็กเกินไป

ตอนนี้ฉันตอนนี้ฉันควรเพิ่ม RAM เพิ่มเติม แต่จากความอยากรู้อยากเห็นฉันต้องการทราบขีด จำกัด ที่นี่

  • /dev/sdd1ติดตั้งบน/มีฟรีประมาณ 50GB และค่อนข้างเร็ว (Samsung 850 EVO SSD)
  • /dev/sdd5 เป็นพาร์ติชั่นสว็อปของฉันคือ 3.7G (ID ประเภท fdisk คือ 82)
  • TMPFS_SIZEถูกตั้งค่าเป็น40%VMความหมาย/runคือ 763M

ตอนนี้ฉันรู้แล้วว่า tmpfs สามารถแลกเปลี่ยนซึ่งใช้ได้กับฉัน ฉันต้องการให้ MySQL เขียนไปที่ RAM ทุกครั้งที่ทำได้ แต่ถ้าต้องการหน่วยความจำมากกว่านี้ฉันสามารถอนุญาตให้ระบบทำการสลับบน SSD

ดังนั้นด้วยการตั้งค่าของฉันฉันสามารถผลักดัน/runให้เป็น:

  • ใหญ่ 300 ล้านใช่ไหม ใช่. นั่นคือค่าเริ่มต้น
  • ใหญ่ 1.5GB? ใช่แล้วพยายามใช้ MySQL สูงถึง 1.3GB และระบบทำงานได้อย่างมีเสน่ห์ แต่นั่นยังน้อยกว่าครึ่งหน่วยความจำกายภาพ + พาร์ทิชันสลับ
  • ใหญ่ 2.5GB? นี่เป็นมากกว่าหน่วยความจำกายภาพ แต่น้อยกว่าครึ่งหนึ่งของหน่วยความจำกายภาพ + พาร์ทิชัน swap ของฉัน
  • 4GB ใหญ่หรือไม่ สิ่งนี้จะพอดีกับการแลกเปลี่ยนทางกายภาพครึ่งหนึ่ง
  • มากกว่า? เช่น 10GB มันสามารถใช้พื้นที่ว่างใน/การแลกเปลี่ยนเพิ่มเติมหรือไม่

ฉันเดาว่ากฎความปลอดภัยต้องมีTMPFS_SIZEขนาดไม่ใหญ่กว่า swap + หน่วยความจำกายภาพครึ่งหนึ่ง ฉันจะไปให้ไกลกว่านี้ได้หรือไม่โดยไม่เพิ่มพาร์ทิชัน swap

นอกจากนี้ยังเป็นไปได้ที่จะใส่200%VMใน/etc/default/tmpfs? ฉันได้อ่านtmpfs(5)โดยไม่ทราบว่าสามารถใส่มากกว่านี้ได้ไหม> 100%

สุดท้ายฉันควรทำมัน/etc/fstabแทนและอย่าแตะต้อง/etc/default/tmpfs?

(รู้ว่าฉันได้ทำไปแล้วเท่านั้นmount -o remountฉันยังไม่ได้รีบูตเซิร์ฟเวอร์)

แก้ไข: สำหรับคำถามสุดท้ายฉันรู้ว่าสามารถ / อาจแก้ไขได้/etc/fstab(ดูข้อความด้านล่างจากหน้า man) แต่ฉันต้องการทราบวิธีปฏิบัติที่ดีที่สุดเพราะฉันไม่เคยสัมผัสอะไร/etc/defaultเลย

ตัวเลือกการเมาท์ที่ซับซ้อนมากขึ้นอาจถูกใช้โดยการสร้างรายการที่เหมาะสมใน / etc / fstab


คำถามที่น่าสนใจ ฉันเดาว่านี่อาจเกี่ยวข้องกับการตั้งค่า overcommit หน่วยความจำมาก
phk

ดูเหมือนว่าขนาด tmpfs สูงสุดจะเป็นทางกายภาพ + swap ฉันได้เห็นนี้ในเอกสารเคอร์เนล
เบอนัวต์ดัฟเชซ

คำตอบ:


8

ฉันคิดว่าฉันสามารถทดสอบได้ดังนั้นฉันจึงวิ่ง:

sudo mount -o remount,size=2800M /run

ทำงานเหมือนมีเสน่ห์:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

ดังนั้นฉันเติมให้เต็ม:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

ผลลัพธ์:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

ระบบยังคงเปิดใช้งานอยู่ ความพร้อมในการแลกเปลี่ยนลดลงซึ่งพิสูจน์ว่าใช้แล้ว:

การวางแลกเปลี่ยนความพร้อมใช้งาน

  • 17:10: สร้างไฟล์ 2.5 GB ใน /run
  • 17:20: ลบไฟล์ 500M

/runแลกเปลี่ยนรวมจะลดลงตามจำนวนเงินที่ดำเนินการโดย

ฉันจะทดสอบ 10GB บน VM เพราะฉันไม่รู้ว่าเคอร์เนลจะปฏิเสธการนับใหม่หรือมีพฤติกรรมที่ไม่คาดคิด

ฉันยังคงมองหาคำตอบที่แท้จริง แต่วิธีปฏิบัติแสดงให้เห็นว่ามันใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.