ทำไมต้องใช้ swap เมื่อมีพื้นที่ว่างใน RAM มากกว่าเพียงพอ


124

การใช้พื้นที่สว็อปแทน RAM อาจทำให้พีซีทำงานช้าลงอย่างมาก

ดังนั้นทำไมเมื่อฉันมี RAM มากกว่าพอระบบ Linux (Arch) ของฉันจึงใช้ swap หรือไม่

ชำระเงินผลลัพธ์ของฉันด้านล่าง:

เอาท์พุท conky

และนี่อาจเป็นสาเหตุของปัญหาความเร็วและการตอบสนองของระบบที่ฉันมี

ผลลัพธ์ของfree -m:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1257       1004        252          0         51        778
-/+ buffers/cache:        174       1082
Swap:          502        144        357

5
ฉันค่อนข้างแน่ใจว่าการเปลี่ยนแปลงของปัญหานี้มีการเปลี่ยนแปลงอย่างมีนัยสำคัญกับ SSD กลายเป็นบรรทัดฐาน ในขณะที่ SSD สำหรับผู้ใช้ทั่วไปของคุณยังช้ากว่าแรมมากตอนนี้มันเป็นเรื่องของราคาถูกกว่า - RAM $ / GB หรือ SSD $ / GB SSD ในขณะที่ช้ากว่านั้นราคาถูกกว่ามากและในกรณีส่วนใหญ่ก็เร็วพอดังนั้นแม้การแลกเปลี่ยนไม่ควรรบกวนประสบการณ์การใช้งานของผู้ใช้อย่างที่เคยทำกับสื่อการหมุน
lkraav

7
บางครั้งถ้าคุณใช้ swap ในอดีตเนื่องจาก RAM เต็มคุณสามารถมีสถานการณ์ที่การสลับข้อมูลก่อนหน้านี้อยู่ที่นั่นเพราะมันไม่ได้ใช้ข้อมูลเต็มรูปแบบในขณะนี้
Totor

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

คำตอบ:


93

เป็นเรื่องปกติที่ระบบ Linux จะใช้การสลับบางอย่างแม้ว่าจะยังไม่มี RAM อยู่ก็ตาม เคอร์เนล Linux จะย้ายเพื่อสลับหน้าหน่วยความจำที่ไม่ค่อยมีคนใช้ (เช่นgettyอินสแตนซ์เมื่อคุณใช้ X11 และไม่ใช้งาน daemon อื่น ๆ )

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

สำหรับการเปรียบเทียบระบบ Ubuntu 10.04 ของฉันที่มีผู้ใช้สองคนลงชื่อเข้าใช้ด้วยเซสชัน X11 ทั้งที่ใช้เดสก์ท็อป GNOME ใช้ ~ 600MB of swap และ ~ 1GB RAM (ไม่นับบัฟเฟอร์และแคช fs) ดังนั้นฉันจะบอกว่า การใช้งานดูปกติ


39
โดยการสลับโปรแกรมที่ไม่ใช้งานคุณมีหน่วยความจำเพิ่มเติมสำหรับการแคชไฟล์ และนั่นช่วยเร่งความเร็วให้สูงขึ้น
jmanning2k

91

พฤติกรรมนี้สามารถกำหนดค่าได้โดยการตั้งค่าเป็น:

/proc/sys/vm/swappiness

ค่าเริ่มต้นคือ 60 การตั้งค่าเป็น 0 หมายถึงไม่เคยใช้การสลับเมื่อยังมี RAM เหลืออยู่และ 100 หน่วยความจำจะเปลี่ยนหน่วยความจำโดยเร็วที่สุด

ในการเปลี่ยนค่าชั่วคราว (สูญหายเมื่อรีบูต):

sudo sysctl vm.swappiness=10

หากต้องการเปลี่ยนค่าอย่างถาวรให้แก้ไขไฟล์:

/etc/sysctl.conf

เป็น root (เช่นsudo nano /etc/sysctl.conf) และเปลี่ยนหรือเพิ่ม (ถ้าไม่มี) บรรทัด:

vm.swappiness

ค่าที่ต้องการ หากไฟล์นี้ไม่มีอยู่ (เช่นใน Arch Linux) ให้ลอง/etc/sysctl.d/99-sysctl.confแทน

มีการถกเถียงกันว่าการสลับออกมาพร้อมกับหน่วยความจำฟรีที่มีอยู่เป็นสิ่งที่ดีหรือไม่ดีบางอย่าง แต่ความช่วยเหลืออูบุนตูไม่แน่นอนแนะนำให้มูลค่า 10 สำหรับระบบเดสก์ท็ ดูเพิ่มเติมกวดวิชานี้ในมหาสมุทรดิจิตอลสำหรับ CentOS


27
โปรดทราบว่าการลดความว่องไวไม่ได้แปลว่าประสิทธิภาพหรือการตอบสนองเพิ่มขึ้น ฉันเคยเห็นรายงานการเพิ่มความรวดเร็วในการแปลเพื่อประสิทธิภาพที่ดีขึ้น อย่าเชื่อสิ่งที่คุณอ่านที่ไม่มีการวัดประสิทธิภาพและตรวจสอบว่าการวัดประสิทธิภาพนั้นใช้ปริมาณงานที่คล้ายกับของคุณ
Gilles

สิ่งนี้ยังคงมีอยู่ในการรีบูตไหม ฉันคิดว่า / proc เกิดใหม่ในการบู๊ตแต่ละครั้ง
HandyGandy

@ HandyGandy: ฉันเพิ่มข้อมูลลงในคำตอบวิธีการเปลี่ยนอย่างถาวร
Marcel Stimberg

@ HandyGandy: เป็นคนเฉื่อยชา / proc ไม่ได้ถูกสร้างใหม่ในการบู๊ตแต่ละครั้ง แต่ proc เป็นระบบไฟล์เสมือนดังนั้นมันจึงเป็น "สร้าง" เมื่อคุณเข้าถึง ไม่มีอยู่ในดิสก์เลย
โกหกไรอัน

swappinessค่าไม่มีผลต่อระบบของฉัน แม้การตั้งค่าเป็น 0 จะยังคงย้ายหน้าที่สำคัญและใช้บ่อย (เช่นดัชนีของฉัน IDE) เพื่อสลับเมื่อยังมี RAM ว่าง 2GB
chefarov

46

Linux เริ่มทำการแลกเปลี่ยนก่อนที่ RAM จะเต็ม สิ่งนี้ทำเพื่อปรับปรุงประสิทธิภาพและการตอบสนอง:

  • ประสิทธิภาพจะเพิ่มขึ้นเนื่องจากบางครั้ง RAM ใช้แคชดิสก์ดีกว่าเก็บหน่วยความจำโปรแกรม ดังนั้นจึงเป็นการดีกว่าที่จะสลับโปรแกรมที่ไม่ได้ใช้งานเป็นระยะเวลาหนึ่งและเก็บไฟล์ที่ใช้บ่อยในแคชแทน

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

แน่นอนว่าการสลับจะทำให้ระบบช้าลงแน่นอน - แต่ทางเลือกในการสลับจะไม่ได้ทำการสลับมันมี RAM มากกว่าหรือใช้ RAM น้อยกว่า


ดังนั้นในแง่หนึ่งการแลกเปลี่ยนคือการวัดในกรณีหรือไม่ นั่นและสิ่งที่จำศีล
tshepang

@Tshepang: การสลับที่เพียงพอเพื่อให้พอดีกับหน่วยความจำเสมือนของคุณไม่ได้เป็น "ในกรณี" มันเป็นสิ่งจำเป็น (มิฉะนั้นโปรแกรมของคุณจะล้มเหลวเนื่องจากหน่วยความจำไม่เพียงพอ)
Gilles

1
@Tschepang: นักฆ่า OOM เป็นเหตุผลที่พวกเขาผิดพลาด (ในทางเทคนิคคุณสามารถทำได้โดยไม่ต้องใช้ OOM killer และไม่สามารถจัดสรรอะไรได้ แต่นั่นจะมีโอกาสที่ดีในการล็อคระบบ OOM killer ทำให้ผู้ดูแลระบบสามารถเข้าสู่ระบบและ สำหรับกระบวนการที่สำคัญเพื่อให้ทำงานต่อไป)
Gilles

1
ฉันเข้าใจจุดของคุณ "การสลับหน้าออกเมื่อระบบไม่ได้ใช้งานมากกว่าเมื่อหน่วยความจำเต็ม" แต่คนที่แต่งตัวประหลาดใช้แทบ 15% ของ RAM ไกลจากเกือบเต็มแล้วใช่ไหม แม้ว่าการสลับครั้งก่อนหน้านี้ที่เกิดจากการใช้ RAM แบบเต็มอาจทำให้สถานการณ์นี้ ...
Totor

1
"Linux เริ่มทำการสลับก่อนที่ RAM จะเต็ม" เมื่อไร? แน่นอน
Yousha Aleayoub

11

นี่คือโพสต์เก่า แต่ฉันจะยังคงมีเสรีภาพในการวางความคิดของฉันที่นี่

เริ่มต้นจากใต้, ลีนุกซ์จะแบ่งหน่วยความจำออกเป็นหน้า ๆ (โดยทั่วไปคือ 4K ต่อหน้าบนระบบ x86_64) หลังจากนั้นจะสร้างหน่วยความจำเสมือนที่มีการทำแผนที่กับหน่วยความจำกายภาพโดยใช้ MMU (หน่วยจัดการหน่วยความจำ)

กระบวนการได้รับการจัดสรรหน่วยความจำจากพื้นที่หน่วยความจำเสมือนดังนั้นโปรดทราบเมื่อคุณเห็น / proc / meminfo คุณจะเห็น VMalloc * เป็นรายละเอียดหน่วยความจำเสมือน

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

แคชคืออะไร

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

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

บัฟเฟอร์คืออะไร

เท่าที่เกี่ยวข้องกับบัฟเฟอร์เมื่อกระบวนการทำไฟล์ I / O มันอาศัยบัฟเฟอร์ของเคอร์เนลในการเขียนข้อมูลไปยังดิสก์ กระบวนการร้องขอให้เคอร์เนลทำงาน ดังนั้นในนามของกระบวนการเคอร์เนลเขียนข้อมูลลงใน "บัฟเฟอร์" ของมันและบอกกระบวนการที่เขียนเสร็จแล้ว ในลักษณะ async เคอร์เนลจะยังคงซิงค์ข้อมูลนี้ในบัฟเฟอร์ไปยังดิสก์ ด้วยวิธีนี้กระบวนการพึ่งพาเคอร์เนลเพื่อเลือกเวลาที่ถูกต้องในการซิงค์ข้อมูลกับดิสก์และกระบวนการสามารถทำงานต่อไปได้ จำไว้ว่านี่เป็น I / O ทั่วไปที่กระบวนการปกติกำลังทำอยู่ อย่างไรก็ตามกระบวนการพิเศษที่ต้องยืนยันว่า I / O นั้นทำบนดิสก์จริงแล้วสามารถใช้กลไกอื่นเพื่อทำ I / O บนดิสก์ ยูทิลิตี opensource บางส่วนเป็น libaio นอกจากนี้ยังมีวิธีเรียกการซิงค์อย่างชัดเจนกับ FD ที่เปิดในบริบทกระบวนการของคุณ

ความผิดพลาดของหน้าคืออะไร

ลองพิจารณาตัวอย่างเมื่อคุณเริ่มต้นกระบวนการ (พูดกับเว็บเบราว์เซอร์) ซึ่งมีไบนารี่ประมาณ 300MB อย่างไรก็ตามเว็บเบราว์เซอร์ไบนารีที่สมบูรณ์ขนาด 300MB ไม่สามารถทำงานได้ทันที กระบวนการจะย้ายจากฟังก์ชั่นไปยังฟังก์ชั่นในรหัสของมัน ดังที่ได้กล่าวไว้ก่อนหน้านี้หน่วยความจำเสมือนจะถูกใช้งาน 300MB แต่หน่วยความจำกายภาพทั้งหมดไม่ได้ถูกแมปกับหน่วยความจำกายภาพ (RSS - หน่วยความจำภายในจะน้อยกว่าดูผลลัพธ์สูงสุด) เมื่อการเรียกใช้โค้ดถึงจุดที่หน่วยความจำไม่ได้ถูกแมปจริง ๆ แล้วความผิดพลาดของหน้าจะเป็นปัญหา เคอร์เนลจะจับคู่หน่วยความจำนี้กับฟิสิคัลเชื่อมโยงเพจหน่วยความจำกับกระบวนการของคุณ ความผิดพลาดหน้าดังกล่าวเรียกว่า "ข้อผิดพลาดหน้าเล็กน้อย" ในทำนองเดียวกันเมื่อกระบวนการกำลังทำผิดหน้าไฟล์สำคัญของ I / O จะเพิ่มขึ้น

เมื่อใดและทำไม Swap Out เกิดขึ้น?

สถานการณ์ 1:

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

สถานการณ์ที่ 2:

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

ดูตัวอย่างนี้ ( เอาต์พุต vmstat )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04 เราเห็นว่ายังมีแรมฟรีจำนวนมาก อย่างไรก็ตามแม้จะมีการสลับเกิดขึ้น เราตรวจสอบทรีกระบวนการ ณ จุดนี้และเราไม่เห็นกระบวนการใด ๆ ที่จะเกิดขึ้นซึ่งต้องการหน่วยความจำจำนวนมาก (มากกว่าหน่วยความจำที่ว่าง) ข้อสงสัยที่ชัดเจนคือสถานการณ์ 2 ที่อธิบายไว้ข้างต้น เราตรวจสอบบันทึก buddyinfo และ zoneinfo ด้านบน (ใช้ echo m> / proc / sysrq-trigger เพื่อตรวจสอบสิ่งเหล่านี้เอาต์พุตจะเข้าสู่ syslogs)

สำหรับระบบปกติของเราการเปรียบเทียบข้อมูลโซนจะเป็นไปตามนี้ และกราฟสำหรับแคช / ฟรี / หน่วยความจำต่ำยังกล่าวถึงด้านล่าง

ข้อมูลโซน

สลับฟรีต่ำฟรี

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

การแตกแฟรกเมนต์ของหน่วยความจำยังเป็นสาเหตุที่ทำให้การใช้ swap เพิ่มขึ้นแม้ว่าหน่วยความจำว่างจะมีอยู่


2
คุณควรชี้แจงหากใน "สถานการณ์ 2" ของคุณกระบวนการที่เรียกร้องนั้นกำลังจัดสรรหน่วยความจำกายภาพซึ่งเป็นกรณีที่ผิดปกติ กระบวนการส่วนใหญ่เกี่ยวข้องกับหน่วยความจำเสมือนเท่านั้นซึ่งการแยกส่วนนั้นไม่เกี่ยวข้องเลย คุณอาจต้องการอธิบายวิธีที่ดีกว่าในการยืนยันว่ามีการแตกแฟรกเมนต์ของหน่วยความจำจากตัวเลขและแผนภูมิที่แสดงเนื่องจากไม่ชัดเจนตั้งแต่แรกเห็น Oh, และโดยวิธีการที่คุณเป็นจริงพูดคุยเกี่ยวกับที่อยู่ติดกันหน่วยความจำหวังว่าจะไม่ติดต่อหน่วยความจำ ;-)
jlliagre

@jlliagre: ขอบคุณสำหรับอินพุต ฉันกำลังแก้ไขข้อผิดพลาด "ต่อเนื่อง"
Anugraha Sinha

5

มีหน่วยความจำที่พร้อมใช้งานมากขึ้น

อย่างที่ทุกคนพูดว่าใช่การสลับจะช่วยให้คุณกำจัดหน่วยความจำที่ไม่ได้ใช้ดังนั้นจึงสามารถช่วยให้คุณมีหน่วยความจำเพิ่มขึ้น

จำศีล

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

มีฟังก์ชั่นจำศีลเป็นหนึ่งในเหตุผลหลักที่เรายังคงเห็นในปัจจุบันแนะนำให้มีอย่างน้อยขนาดของ RAM สำหรับการแลกเปลี่ยน ด้วยวิธีนี้ระบบสามารถใส่ RAM ที่ใช้ทั้งหมดลงในการแลกเปลี่ยนและเข้าสู่โหมดไฮเบอร์เนต

สั้น comings

ระวังว่าเมื่อมีการสลับข้อมูลกระบวนการสามารถอ่านได้ในการแลกเปลี่ยนแม้หลังจากปิดเครื่องเว้นแต่ว่าการแลกเปลี่ยนนั้นจะถูกเข้ารหัส (แน่นอน)

การใช้การแลกเปลี่ยนที่เข้ารหัสด้วยการไฮเบอร์เนตนั้นไม่ได้ผลกับการแจกจ่ายทั้งหมด คุณต้องใช้คีย์การเข้ารหัสที่คงที่ (การตั้งค่าบางอย่างจะสร้างคีย์การเข้ารหัสพื้นที่สว็อปในแต่ละการบู๊ต) และ initrd / initramfs เพื่อเปิดใช้งานโวลุ่มที่เข้ารหัสก่อนที่จะดำเนินการต่อ


3

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

ฉันพูดจากประสบการณ์ส่วนตัวที่เจ็บปวดที่นี่

ปีที่แล้วฉันได้เปลี่ยนหนึ่งในเว็บไซต์ของฉันเป็นเฟรมเวิร์กเว็บเซิร์ฟเวอร์ใหม่ที่มีแนวโน้มที่สร้างขึ้นบน Firefox อาจฟังดูแปลกที่การสร้างระบบฝั่งเซิร์ฟเวอร์ด้านบนของโปรแกรมที่เน้นลูกค้าเช่น Firefox แต่มันมีประโยชน์มากมาย Firefox มีประสิทธิภาพมากมีบริการภายในที่น่าประทับใจและลดความไม่ตรงกันระหว่างเซิร์ฟเวอร์และไคลเอนต์เพื่อให้ทั้งคู่ใช้แพลตฟอร์มที่คล้ายคลึงกัน

แต่มีข้อเสีย: Firefox มีขนาดใหญ่ ใหญ่จริงๆ นี่เป็นโครงการประเภท 1.x ดังนั้นพวกเขาจึงไม่ได้เอาสิ่งต่าง ๆ เช่นการลบการสนับสนุน GUI [*] เว็บไซต์ของฉันไม่ต้องการสิ่งใด แต่เนื่องจากเทคโนโลยี VPS ที่ผู้ให้บริการโฮสติ้งของฉันใช้ไม่ได้ ' ไม่อนุญาตให้มีพื้นที่สว็อปรหัส GUI และส่วนอื่น ๆ ของ Firefox ฉันไม่ได้ใช้ RAM จริง ฉันต้องการ RAM ขั้นต่ำ 512 MB เพียงเพื่อเรียกใช้ไซต์โดยไม่หยุดทำงานเนื่องจากหน่วยความจำหมด ถ้า VPS ของฉันมีพื้นที่สว็อปฉันอาจได้รับกับแผน 256 MB

[*] การลบรหัส GUI ออกจากเฟรมเวิร์กอาจไม่เป็นที่ต้องการเนื่องจากหนึ่งในข้อดีของแพลตฟอร์มนี้คือการขูดเว็บที่มีความเที่ยงตรงสูงเนื่องจากเฟรมเวิร์กฝั่งเซิร์ฟเวอร์สามารถดาวน์โหลดเว็บเพจจากเว็บไซต์อื่นและคุณสามารถจัดการได้ เช่นเดียวกับที่คุณทำในฝั่งไคลเอ็นต์ คิดว่าการผสมกัน สิ่งต่าง ๆ มากมายที่จะแตกถ้าคุณไม่สามารถ "แสดง" หน้าเว็บในบริบทกราฟิกบางอย่าง

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


3

จากUbuntu Swap คำถามที่พบบ่อยที่ Marcel เชื่อมโยงกับ

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

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


6
ฉันยังคงพบว่ามันไม่น่าเชื่อ ทำไมฉันจึงต้องมีการแลกเปลี่ยน 8 GB สำหรับระบบ 4GB ที่ไม่จำศีล ฉันจำเป็นต้องมีการแลกเปลี่ยน 128GB สำหรับโหนดการคำนวณ 64GB ของฉันหรือไม่ ฉันมักจะจัดสรรไม่เกิน 1GB สำหรับการแลกเปลี่ยนเว้นแต่จะมีเหตุผลที่เฉพาะเจาะจง
David Mackintosh

2
มันปล่อยให้มีพื้นที่มากขึ้นสำหรับการแคช HDD ที่ช้าตามความต้องการใน RAM ที่มีความเร็วสูง (เพิ่มเติมแผนการจำศีลบางบันทึกสำเนาของแรมลงใน swapspace)
Arafangion

6
@David, @Jader: swap = 2 * ram ram เป็นเกาลัดเก่าที่รอดชีวิตมาได้ดีหลังจากการให้เหตุผลดั้งเดิมเริ่มไม่เกี่ยวข้อง - ตอนนี้ผู้คนพยายามหาวิธีที่จะปรับรูปนี้แทนที่จะมากับตัวเลขที่เหมาะสมสำหรับระบบของพวกเขา . ดูว่าทำไมเราต้องตั้งพื้นที่สว็อปใหญ่เป็นสองเท่าของหน่วยความจำกายภาพ .
Gilles

1
@Gilles ฉันยึดติดกับตำแหน่งของฉันเพราะฉันเคยเห็นกระดาษที่เชื่อถือได้ในเรื่องนี้ซึ่งขัดแย้งกับผู้เชี่ยวชาญหลายคนที่ฉันไม่รู้ว่าความรู้ของพวกเขานั้นลึกซึ้งเพียงใด
Jader Dias

4
หากคุณจำการอ้างอิงได้โปรดแชร์
Gilles

2

ฉันคิดว่า "Gilles" ได้กล่าวถึงความจริงที่ว่าในขณะที่คุณมี RAM เกินพอการสลับจะมีประโยชน์ในช่วง "ข้อบกพร่อง" บางอย่างเช่นเดียวกับการบันทึกข้อมูลบางส่วนอย่างต่อเนื่องแม้หลังจากปิดเครื่อง - หรือฉันคิดผิดหรือไม่? เนื่องจากแรมถูกล้างออกหลังจากรีบูต) ฉันมี RAM ขนาด 12GB ในระบบของฉันและฉันก็เคยไตร่ตรองเกี่ยวกับคำถามนี้มาก่อน ณ จุดหนึ่งเมื่อฉันปิดการใช้งานการสลับทั้งหมดและพึ่ง RAM ของฉันฉันมีประสบการณ์ที่ยากลำบากในการพยายามแก้ไขข้อผิดพลาดของระบบหรือข้อผิดพลาดอื่น ๆ หลังจากการปิดระบบ ตั้งแต่นั้นมาฉันได้เปิดใช้งานพาร์ติชัน swap อีกครั้ง

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