หน่วยความจำสลับคืออะไร?


26

ฉันใช้ RAM เพื่อจัดเก็บตารางฐานข้อมูลของฉันและตารางอื่น ๆ ถูกเก็บไว้ในฮาร์ดดิสก์

วันนี้ฉันรู้ว่ากระบวนการของฉันใช้หน่วยความจำสลับ ตอนนี้ swap memory คืออะไรและฉันจะตรวจสอบได้อย่างไรว่าโพรเซสใดที่ใช้ swap memory และฉันจะหยุดมันได้อย่างไร?


ไม่มีวิธีใดที่จะทราบว่ากระบวนการใดกำลังใช้หน่วยความจำสลับ ???

ดูตัวจัดการงานของ windows (หรือเครื่องมือที่คล้ายกัน) สำหรับจำนวนของไฟล์เพจที่ใช้และข้อบกพร่องของหน้า

Swap ไม่ใช่สิ่งต่อกระบวนการ แต่เป็นสำหรับระบบปฏิบัติการทั้งหมด "vmstat" จะแสดงข้อมูลเกี่ยวกับจำนวน swap ที่คุณใช้
jrockway

ฉันทำงานบน linux ไม่ได้อยู่ใน wimdows

มีเหตุผลในการใช้ swap นี้ ..... มีคนพยายามแยกวิเคราะห์เว็บไซต์ของฉันว่าทำไม thng ทั้งหมดเกิดขึ้นโดยไม่มีสาเหตุจากด้านข้างของเราขอบคุณสำหรับคำตอบของคุณมันช่วยฉันได้มากเช่นเคย :-)

คำตอบ:


41

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

หากแอปของคุณ "กำลังใช้ swap" คุณต้องใช้หน่วยความจำน้อยลงหรือซื้อ RAM เพิ่ม

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


1
เพื่อความถูกต้อง: หน่วยความจำเสมือนหมายถึงการใช้ที่อยู่หน่วยความจำเสมือน (บางสิ่งที่เปิดใช้งานใน CPU ที่ทันสมัยเสมอไม่ว่าคุณจะมี RAM เท่าใด) และไม่เกี่ยวข้องโดยตรงกับการแลกเปลี่ยน (แม้ว่าจะใช้ร่วมกันก็ตาม แนวคิดที่แตกต่างกันโดยทั่วไป)
fortran

@fortran, ความถูกต้องคู่หน่วยความจำเสมือนเป็นคำที่ใช้ใน windows เมื่อมันหมายถึงเพจไฟล์
sleblanc

7

คอมพิวเตอร์มีหน่วยความจำกายภาพจำนวนหนึ่ง แต่ส่วนใหญ่เราต้องการมากกว่านี้ ดังนั้นเราจึงสลับหน่วยความจำบนดิสก์

ทุกครั้งที่เราต้องการหน่วยความจำนั้นจะต้องเปลี่ยนกลับเป็นหน่วยความจำ (สลับชิ้นส่วนอื่น ๆ ออก) มีอัลกอริธึมที่ชาญฉลาดอย่างมากในการลดความล่าช้า แต่บางครั้งเราก็ต้องรอ

บน windows ถ้าคุณดูตัวจัดการงานคุณสามารถแสดงข้อผิดพลาดของหน้าคอลัมน์ นี่แสดงจำนวนครั้งที่แอปพลิเคชันขอหน่วยความจำที่อยู่บนดิสก์และจำเป็นต้องสลับ ข้อบกพร่องของหน้าจำนวนมาก = แอปพลิเคชันช้า

กระบวนการนี้ใช้ในหลายระดับ สรุปจากเร็วไปช้า:

  • ในระดับ CPU มีการลงทะเบียน นี่เป็นหน่วยความจำที่เร็วที่สุด แต่มีจำนวน จำกัด
  • นอกจากนี้บน CPU ยังมีหน่วยความจำแคชขนาดเล็ก ที่นี่โปรแกรมขนาดเล็กที่ทำงานอยู่จะถูกเก็บไว้เพื่อการเข้าถึงที่รวดเร็ว ค้นหาอัลกอริทึมการทำนายสาขาหากคุณต้องการทราบข้อมูลเพิ่มเติม
  • บางครั้งมีแคชระดับ 2 ระหว่าง CPU และหน่วยความจำหลัก
  • ระดับถัดไปคือหน่วยความจำหลัก (RAM)
  • ระดับสุดท้ายและช้าที่สุดคือดิสก์บางครั้งคุณสามารถใช้ USB sticks เป็นหน่วยความจำเพิ่มเติม

3
cat /proc/pid/smaps

หากคุณไม่ต้องการใช้ swap อย่าใช้ swap partition (ใส่เครื่องหมายคอมเม้นในบรรทัด/etc/fstab) แต่จะป้องกันไม่ให้เริ่มกระบวนการใหม่และจะทำให้ malloc ล้มเหลวหากคุณใช้หน่วยความจำกายภาพหมด ไม่ใช่ความคิดที่ดีโดยทั่วไป ... ไม่ค่อยปลอดภัยและไม่มีประโยชน์มากนักเนื่องจากระบบปฏิบัติการจะเก็บหน้าร้อนไว้ในหน่วยความจำและจะเปลี่ยนเป็นดิสก์ที่ไม่ได้ใช้งานเมื่อเร็ว ๆ นี้

อีกวิธีคือการแฮ็คฐานข้อมูลของคุณดังนั้นมันจึงล็อคหน้าเว็บไว้ในหน่วยความจำ (ฉันรู้ว่าสามารถทำได้ แต่ฉันไม่สามารถบอกคุณได้ในขณะนี้ว่าอย่างไร) แต่อย่างไรก็ตามมันเหมือนกันว่าฐานข้อมูลของคุณจะใช้การแลกเปลี่ยนของตัวเอง กลไกการแคช

หากต้องการทราบว่า swap คืออะไรและหน่วยความจำเสมือนทำงานอย่างไรฉันขอแนะนำให้คุณดูการบรรยายของระบบปฏิบัติการบางที MIT MIT Courseware อาจช่วยคุณได้


เนื่องจากการกำหนดค่าเริ่มต้นบน distros linux จำนวนมากคือการ overcommit memory "ที่แย่ที่สุด" ที่จะเกิดขึ้นคือ OOM killer จะเริ่มต้นกระบวนการ sniping โดยเริ่มจาก DBMS (และด้วยตาราง "ที่เก็บไว้ใน RAM" ซึ่งอาจไม่ดี สิ่ง).
symcbean

1

ฉันพบคำตอบบางส่วนแล้ว หน่วยความจำ Swap เป็นพื้นที่ในฮาร์ดดิสก์ของคอมพิวเตอร์ของคุณที่ระบบปฏิบัติการจะใช้เพื่อใส่ข้อมูลที่อยู่บน RAM เพื่อให้ว่างสำหรับแอปพลิเคชันอื่น สิ่งนี้ควรทำเมื่อระบบต้องการหน่วยความจำสำหรับกระบวนการใหม่และไม่มีดังนั้นเราจะเห็นได้ว่าหากระบบของเรามี RAM มากมายมันอาจจะไม่ต้องการหน่วยความจำ SWAP

UPDATE

หากต้องการทราบว่าพื้นที่สวอป (หรือหน่วยความจำเสมือน) อยู่ที่ไหนคุณสามารถไปที่ Task Manger (CTRL + ALT + DEL) และเปิดจาก VIEW -> COLUMNS -> VIRTUAL MEMORY ตอนนี้เพียงแค่คำนวณความแตกต่างระหว่างการใช้หน่วยความจำและหน่วยความจำเสมือน นี่คือคำแนะนำวิธีการดูว่าคุณใช้ Vista หรือไม่: http://www.ehow.com/how_5067693_increase-swap-space.html


-1

Swap เป็นพื้นที่ว่างในฮาร์ดดิสก์ที่ใช้เป็น RAM มันคือ (พูดค่อนข้าง)ช้ามากแต่หยุดคอมพิวเตอร์จากการล้มเมื่อพวกเขาพยายามที่จะจัดการกับข้อมูลเพิ่มเติมแล้ว RAM ของพวกเขาสามารถจัดการ

หากต้องการหยุดกระบวนการไม่ให้ใช้ swap ให้ติดตั้ง RAM เพิ่มเติม


1
หากคุณไม่ต้องการการแลกเปลี่ยนใด ๆ ให้หยุดใช้ไฟล์หน้า แต่คาดว่าปัญหาอื่น ๆ

1
มันไม่ใช่. การแลกเปลี่ยนกำลังย้ายบล็อกของข้อมูลจากฮาร์ดดิสก์ไปยังหน่วยความจำกายภาพ อ่านเพียงครั้งเดียวซึ่งปกติจะเร็วพอ

@xtofl คำตอบไม่ได้พูดถึงการแลกเปลี่ยนเพียงแค่สลับพาร์ติชั่นและความคิดเห็นจาก gamecat ไม่มีส่วนเกี่ยวข้องกับสิ่งที่คุณพูด? : P
RapidWebs

-1

หากคุณไม่ต้องการให้กระบวนการของคุณใช้หน่วยความจำ swap ให้ปิดการใช้งานหน่วยความจำแบบ swap ทั้งหมด น่าเสียดายที่หากคุณมีหน่วยความจำไม่เพียงพอเคอร์เนล Linux จะฆ่ากระบวนการที่กำลังทำงานอยู่บางส่วนเพื่อเพิ่มหน่วยความจำให้ใช้งานได้

หากคุณมี RAM เพียงพอสำหรับระบบของคุณคุณสามารถไปได้โดยไม่ต้องเปลี่ยนหน่วยความจำ

ฉันมีแล็ปท็อปที่มี RAM 768Mb ซึ่งไม่ได้ใช้หน่วยความจำ swap มันดีพอสำหรับความต้องการของฉัน ฉันมีเซิร์ฟเวอร์ที่มี 256MB RAM และไม่ได้ใช้หน่วยความจำสลับ มันรันเซิร์ฟเวอร์เสมือน 8 เซิร์ฟเวอร์โดยใช้การจำลองเสมือน OpenVZ โดยไม่มีปัญหา

ดังนั้นขึ้นอยู่กับคุณหากคุณต้องการหน่วยความจำสลับ


วิธีการที่คุณทำงาน8 VMs บนเครื่องที่มีเพียง 256 เมกะไบต์แรม?!?
วอร์เรน

เป็นไปได้กับ VZ เนื่องจาก RAM ไม่ได้รับการแบ่งพาร์ติชั่นอย่างสมบูรณ์เนื่องจากมีการแชร์ไลบรารีทั่วไปบน VM หรือสิ่งที่มีผลกระทบ ดังนั้น 8 x 64M ไม่จำเป็นต้องเป็น 512M :)
sybreon

กระนั้นอุปกรณ์ที่ใช้อ้างอิงนั้นทำงานอย่างเสถียรได้อย่างไร?
วอร์เรน

โดยการสลับโปรแกรมที่ไม่ใช้งานคุณมีหน่วยความจำเพิ่มเติมสำหรับการแคชไฟล์ และนั่นช่วยเร่งความเร็วให้สูงขึ้น การอ่านแบบครั้งเดียวนี้มักจะค่อนข้างรวดเร็วและมีผลกระทบเล็กน้อยโดยรวม มันไม่ได้ใช้เพียงเมื่อคุณออกนอกขอบเขตในเรื่องของ RAM ที่มีอยู่ ฉันเคยเห็นเครื่องที่มี RAM ขนาด 16GB ใช้ SWAP หลายครั้ง
RapidWebs

นอกจากนี้ฉันจะไม่แนะนำให้ปิดการใช้งาน SWAP บนเซิร์ฟเวอร์ฐานข้อมูล ลูกค้าหรือเว็บแอพของเขาจะไม่ยินดีเป็นอย่างยิ่งเมื่อ OOM สังหารแบ็คเอนด์ทั่วการดำเนินการสำรองข้อมูลทุกคืนอย่างง่ายหรืออะไรทำนองนั้น? มันจะฉลาดกว่าในการปรับแคชฐานข้อมูลที่สัมพันธ์กับการใช้งานแอปพลิเคชันและหน่วยความจำที่มีอยู่ ถ้าเขาแลกเปลี่ยนอยู่แล้วเขาก็ต้องการหน่วยความจำเพิ่มขึ้นหรือกำหนดค่าเซิร์ฟเวอร์ DB ของเขาให้ดีขึ้น มิฉะนั้นการปิดใช้งาน SWAP จะบีบบังคับ OOM เพื่อฆ่าเซิร์ฟเวอร์ DB ทุกครั้งที่เปลี่ยนไป ซึ่งตัดสินโดยคำถามของเขามักจะ
RapidWebs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.