ฉันควรเปลี่ยน swap เท่าใดสำหรับ 1GB ถึง 8TB ของ RAM ที่ 14.04 หรือสูงกว่า


14

ฉันจะติดตั้ง 64 บิต 14.04 บนเครื่องใหม่ที่มี 1 ถึง 128GB RAM และ RAM เพิ่มเติมในภายหลัง ฉันควรจัดสรรพื้นที่ให้กับพาร์ติชัน swap มากน้อยแค่ไหน?

และโดยเฉพาะ: ทำไมคำแนะนำเหล่านั้นสำหรับตัวเลขเหล่านี้

(ไม่มีคำตอบที่มีอยู่ที่นี่และที่นี่อธิบายเหตุผลและเป็นบิตถ้าเราดูที่ 1GB หรือ RAM ขึ้นไป)


6
ซ้ำกันเป็นไปได้ของฉันมี RAM 16GB ฉันจำเป็นต้องมีการแลกเปลี่ยน 32GB หรือไม่ มีคำตอบจาก 2017 (หรืออัปเดตในปี 2017) ดังนั้นจึงมีคำแนะนำล่าสุดมากกว่าคำตอบนี้
Melebius

1
@Melebius: ฉันไม่เห็นด้วย: แม้ว่าคำถามนี้จะใหม่กว่า แต่ก็เป็นคำถามทั่วไปมากกว่าคำถามที่คุณพยายามจะทำซ้ำ คำถาม & คำตอบนี้ครอบคลุมมากกว่ารุ่นเก่าแต่การย้อนกลับไม่เป็นความจริง! ;-)
Fabby

1
@Fabby ในกรณีนั้นไม่ควรทำเครื่องหมายอื่น ๆ ว่าเป็นรายการที่ซ้ำกันหรือไม่
Melebius

1
@Melebius หากผู้ตรวจทานสามารถใช้คำถามทั้งสองเป็นคำถามซ้ำ ๆ กันในสถานการณ์ต่าง ๆ คำถามทั้งสองจะสามารถเปิดให้จัดการกับสถานการณ์ที่แตกต่างกันเหล่านี้ได้เนื่องจากคำถามทั้งสองมีคำตอบที่ได้รับการตอบโต้สูงมาก
karel

2
@Melebius เราได้มีการหารือเกี่ยวกับหัวข้อนี้ในเมตาแล้วและชุมชนได้ตัดสินใจที่จะให้แต่ละขาตั้งตามที่เป็นอยู่
Fabby

คำตอบ:


30

คำตอบสั้น ๆ :

ตั้งค่าไฟล์ swap ของคุณเป็น:

  • round(sqrt(RAM))ถ้าคุณไม่ใช้การไฮเบอร์เนต
  • RAM+round(sqrt(RAM))ถ้าคุณใช้การไฮเบอร์เนต

ตั้งค่าของคุณswappinessเป็น 10 บนเดสก์ท็อปแต่ไม่ใช่บนเซิร์ฟเวอร์!

คำตอบที่ยาว:

ในอดีตที่ผ่านมา:

กฎของหัวแม่มือที่ใช้ในช่วง 25 ปีที่ผ่านมามีอย่างน้อย 1xRAM และ 2xRAM สูงสุดนั่นคือสิ่งที่คุณจะเห็นตลอดเวลา

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

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

ในปัจจุบัน:

  1. หากคุณไม่ได้ใช้ไฮเบอร์เนตและหน่วยความจำของคุณอยู่ในส่วนที่เกินจาก 1GByte กฎใหม่ของหัวแม่มือเป็นround(sqrt(RAM))ที่RAMเห็นได้ชัดขนาด RAM ของคุณใน GB และsqrtราก :-)

  2. หากคุณใช้การจำศีลคุณจะต้องสามารถสลับ RAM ทั้งหมด + RAM ที่สลับไปยังดิสก์ทั้งหมดแล้วสูตรจึงกลายเป็น: RAM+round(sqrt(RAM))

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

ทั้งหมดเหล่านี้เข้าด้วยกันให้ตารางต่อไปนี้: (3 คอลัมน์สุดท้ายแสดงถึงพื้นที่สว็อป)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

ด้านบนเป็นเพียงกฎของหัวแม่มือ มันไม่ใช่กฎของแรงโน้มถ่วง!
คุณสามารถฝ่าฝืนกฎนี้ (ต่างจากกฎแรงโน้มถ่วง) หากกรณีการใช้งานเฉพาะของคุณแตกต่างกัน!

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

วิธีทดสอบว่าการใช้งาน swap ของคุณแตกต่างจากกฎ "ทั่วไป" หรือไม่:

เพิ่งดำเนินการ:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

ซึ่งจะให้รายการโปรแกรมที่รันอยู่ทั้งหมดซึ่งถูกสลับ (กับโปรแกรมที่ใช้พื้นที่สว็อปมากที่สุดอยู่ด้านบน)

หากคุณใช้งานมากกว่าสองสาม KB: ปรับขนาดให้มากขึ้นอย่างน้อยก็มิฉะนั้นอย่ากังวล ...

หากคุณอยู่บนเซิร์ฟเวอร์หยุดอ่านเดี๋ยวนี้: คุณพร้อมแล้ว!


ถ้าคุณอยู่ในลูกค้าเดสก์ทอป / แล็ปท็อป (ไม่เซิร์ฟเวอร์) ที่คุณต้องการ GUI ของคุณจะตอบสนองเป็นไปได้และแลกเปลี่ยนเฉพาะเมื่อคุณต้องการจริงๆ Ubuntu ได้รับการปรับให้เหมาะกับการแลกเปลี่ยนก่อนเพื่อการใช้เซิร์ฟเวอร์แต่ในไคลเอนต์ของคุณคุณต้องการแก้ไขรูปภาพดิบขนาดใหญ่ 250 เมกะพิกเซลgimpเพื่อให้รวดเร็วดังนั้นการตั้งค่าswappinessเป็น 10 จะทำให้เคอร์เนลไม่ต้องสลับเร็วเกินไป ไม่สลับสายเกินไป:

หากคุณมีsysctl.confไฟล์

sudo nano /etc/sysctl.conf

หรือ

หากคุณมีsysctl.dไดเรกทอรี แต่ไม่มีsysctl.confไฟล์ให้สร้างไฟล์ใหม่:

sudo nano /etc/sysctl.d/35_swap.conf 

และในทั้งสองกรณีเพิ่ม:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

ที่ส่วนท้ายของไฟล์ให้บันทึกไฟล์ ( Ctrl+ XY+ Enterในนาโน) และดำเนินการ a:

sysctl --system

เพื่อโหลดพารามิเตอร์หรือใช้วิธี Window $ และรีบูต ... :-)


1
ขอบคุณ คุณหมายถึงอะไรโดย "ลดการกลับมา" หากทั้ง RAM และการแลกเปลี่ยนถูกใช้อย่างเต็มที่แล้วมันเป็นไปไม่ได้ที่จะจำศีลแม้ว่าการแลกเปลี่ยนจะมีขนาด 2 * RAM ใช่ไหม (เพราะการจำศีลจะต้องใช้ขนาดของการสลับเป็น RAM + swap ซึ่งเป็นไปไม่ได้?)
ทิม

ใช่ แต่ฉันไม่เคยเกิดเหตุการณ์นี้เลย ... (และฉันแก่แล้ว! 2 * RAM: เมื่อ RAM ทั้งหมดเปลี่ยนคุณยังสามารถจำศีลได้ ...
Fabby

2
"การลดลงของผลตอบแทน" เพียงหมายความว่าการเข้าถึง HDD นั้นเป็นปัจจัยที่ช้ากว่า 1,000 หน่วยดังนั้นถ้าคุณต้องการสลับ RAM ของคุณสองครั้งคุณจะเสียชีวิตเมื่ออายุมากขึ้นก่อนที่มันจะเสร็จสมบูรณ์ ... มีเพียงเมื่อคุณจำศีล อีกครั้งแล้วสลับ ...
Fabby

1
@Fabby เวลา CV ทบทวนในคำถามเดิมอีกครั้ง: askubuntu.com/review/close/889454 ดูความคิดเห็นของ Yufenyuy Veyeh Dider ใต้คำถาม
karel

1
@mrkskwsnck: เป็นโดยผู้เขียนคนเดียวกัน ... ;-)
Fabby

6

จำเป็นสำหรับการแลกเปลี่ยน

สลับมีประโยชน์ด้วยเหตุผล 3 ประการ:

  1. การลบความยุ่งเหยิงจาก RAM จากบทความบน kernel.org:

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

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

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

  3. การไฮเบอร์เนต: เมื่อคอมพิวเตอร์ไฮเบอร์เนตเนื้อหาของ RAM จะไปที่ดิสก์

จำนวน Swap

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

ตัวอย่างเช่นlinux.comแนะนำ:

กฎของหัวแม่มือมีดังนี้: 1) สำหรับระบบเดสก์ท็อปใช้พื้นที่สว็อปของหน่วยความจำระบบสองเท่าเนื่องจากจะช่วยให้คุณสามารถเรียกใช้แอปพลิเคชั่นจำนวนมากได้ RAM เพิ่มเติมพร้อมใช้งานสำหรับแอปพลิเคชันที่ใช้งานอยู่; 2) สำหรับเซิร์ฟเวอร์ให้มี swap น้อยกว่า (พูดครึ่งหนึ่งของหน่วยความจำกายภาพ) เพื่อให้คุณมีความยืดหยุ่นในการแลกเปลี่ยนหากจำเป็น แต่ตรวจสอบจำนวนพื้นที่ swap ที่ใช้และอัพเกรด RAM ของคุณหากจำเป็น 3) สำหรับเครื่องเดสก์ท็อปรุ่นเก่า (ที่มีขนาด 128MB เท่านั้น) ให้ใช้พื้นที่สว็อปมากเท่าที่คุณสามารถสำรองได้สูงสุด 1GB

จากประสบการณ์ส่วนตัวนี่คือสิ่งที่ฉันต้องการ:

เมื่อพิจารณาถึงเครื่องที่มีขนาด 1 - 2 GB ซึ่งไม่จำเป็นต้องจำศีลและสำหรับการใช้งานทั่วไปคุณสามารถมีพื้นที่แลกเปลี่ยน 1GB ถึง 2GB พีซีของฉันที่มี 14.04 Ubuntu มี RAM 1GB และ 2GB swap จำนวน swap ไม่เคยข้ามชายแดน 800MB และฉันใช้พีซีของฉันเพื่อท่องเว็บและเขียนสคริปต์เท่านั้น

ด้วยพีซีที่มีมากกว่า 2GB และคุณไม่จำเป็นต้องจำศีลคุณอาจสลับจาก 512MB เป็น 1GB ฉันมีแล็ปท็อปขนาด 15.04 ซึ่งฉันไม่จำศีลเลยและมีไฟล์ swap ( ไม่ใช่พาร์ติชัน ) 512 MB แรมตัวเองคือ 6 GB แต่ไม่ข้าม 2-3 GB เคย อีกครั้ง: การใช้งานทั่วไป

Cosmoscalibur และ Fabby กล่าวถึงการแลกเปลี่ยนในกรณีที่คุณจำเป็นต้องจำศีลดังนั้นฉันจะไม่เข้าไปในนั้นอย่างกว้างขวาง ความเห็นที่ต่ำต้อยของฉันคือ:

หากคุณวางแผนที่จะจำศีลเนื้อหา RAM จะต้องถูกสลับออกดังนั้นคุณต้องมีขนาดอย่างน้อยเท่ากับ RAM ของคุณ


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