ปล่อยพื้นที่สว็อป


10

บางครั้งเคอร์เนลดูเหมือนว่าจะตั้งใจที่จะรักษาเช่น firefox ในการแลกเปลี่ยนแม้ว่าจะมีหน่วยความจำกายภาพเพียงพอและฉันใช้ firefox:

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

มีคำสั่งให้เคอร์เนลปล่อยพื้นที่สวอปและใช้หน่วยความจำว่างที่มีอยู่หรือไม่?


อัปเดต : แม้ว่าในระยะสั้นฉันใช้ swapon / swapoff แต่ตอนนี้ฉันตั้งค่าไว้แล้ว

sudo sysctl vm.swappiness=30

ตามที่แนะนำในการตอบกลับอีกครั้งและได้ผลลัพธ์ที่ดีมาก

คำตอบ:


2

คุณสามารถทำswapoff - จะต้องมีสิทธิ์พิเศษ
แต่ฉันคิดว่านั่นไม่ใช่ปัญหาสำหรับคุณ


15

คุณสามารถทำในสิ่งที่ Nik ปัญหาและการใช้swapoff อย่างไรก็ตามยังมีอีกวิธีที่สวยงามกว่าในการปรับแต่ง "swappiness" หรือวิธีที่เคอร์เนลสลับโปรแกรมไปยังดิสก์ในระบบที่ใช้ 2.6 เมล็ดอย่างจริงจัง

มีการอภิปรายอุ่นบนลินุกซ์เคอร์เนลรายการทางเกี่ยวกับนโยบายเคอร์เนลควรปฏิบัติเกี่ยวกับการแลกเปลี่ยนพฤติกรรม ผลที่สุดคือตอนนี้เรามีแพทช์ใน 2.6 เมล็ดที่ช่วยให้เราปรับแต่งพฤติกรรมนี้ในระดับใหญ่

โปรดทราบว่าคุณต้องมีสิทธิ์ใช้งานรูทเพื่อทำสิ่งนี้เช่นเดียวกับการรันคำสั่ง swapoff / swapon

ค่าปัจจุบันของ "swappiness" สามารถตรวจสอบได้ในไฟล์/ proc / sys / vm / swappinessหรือโดยการรันคำสั่งsysctlนี้:

sudo sysctl vm.swappiness

ค่า "swappiness" สามารถอยู่ในช่วงตั้งแต่ 0 (ไม่มีการสลับ) ถึง 100 (สลับไปยังดิสก์ให้มากที่สุด) Ubuntu มาพร้อมกับความรวดเร็วเริ่มต้นที่ตั้งไว้ที่ 60

หากต้องการเปลี่ยนสิ่งนี้สำหรับเซสชันให้เรียก sysctl อีกครั้งและส่งผ่านค่า swappiness ที่จะใช้:

sudo sysctl vm.swappiness=30

นอกจากฟรีแล้วคุณสามารถตรวจสอบผลของการทำสิ่งนี้ได้ผ่านทางยูทิลิตี้ฮ็อพหรือไอโซโทปที่ดีเยี่ยม

หากคุณชอบสิ่งที่คุณเห็นและต้องการรักษาค่านี้ไว้ตลอดการเรียบเครื่องให้ใส่"vm.swappiness = 30"ในไฟล์/etc/sysctl.conf

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

คุณสามารถเล่นกับค่าที่แตกต่างกันจนกว่าคุณจะพบคนที่มีระดับการแลกเปลี่ยนบนเครื่องที่ยอมรับได้


+1 สำหรับ sysctl เมื่อทำการทดลองด้วยค่า swappiness ที่แตกต่างกันคุณสามารถเขียนโดยตรงไปยังไฟล์ proc (echo "30"> / proc / sys / vm / swappiness) การเปลี่ยนแปลงนี้เป็นการชั่วคราวและจะไม่เขียนลงใน /etc/sysctl.conf เมื่อคุณพอใจกับการตั้งค่าแล้วใช้ sysctl เพื่อทำการเปลี่ยนแปลง 'ถาวร'
Shawn Chin

6

โปรดจำไว้ว่าสิ่งต่าง ๆ ในการแลกเปลี่ยนถูกวางที่นั่นในเวลาที่ยุ่งกว่าตอนนี้

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

สิ่งนี้ได้รับการจัดการบนพื้นฐานการลบเมื่อเขียนดังนั้นหากการคัดลอกใน RAM ได้รับการปรับปรุงบล็อกในการแลกเปลี่ยนจะถูกปล่อยออกมา

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

คุณไม่สามารถดูข้อมูลที่อยู่ในรัฐนี้ (ของการเป็นทั้งในหน้าดิสก์ในพื้นที่แลกเปลี่ยนและใน RAM) freeในการส่งออกจาก คุณสามารถดูได้ผ่าน/procระบบไฟล์พิเศษแม้ว่า ดูผลลัพธ์ของcat /proc/meminfoการSwapCachedนับ

อีกสองเหตุผลที่ทำให้มีการสลับการใช้งานเมื่อมีหน่วยความจำสำรองว่างอยู่

  • เมื่ออยู่ภายใต้หนัก I / O โหลดเคอร์เนลได้ตัดสินใจว่าหน้าเว็บที่ยังไม่ได้ถูกนำมาใช้สำหรับทุกเพศทุกวัยจะสลับที่ดีกว่าออกเพื่อที่จะสามารถใช้แรมสำหรับแคช / บัฟเฟอร์แม้ว่าคุณกำลังมองหาที่freeการส่งออกที่น่าจะเป็นกรณีที่ไม่เป็นคุณที่นี่ มี RAM ที่ไม่ได้ถูกจัดสรรอย่างแท้จริงเช่นเดียวกับที่ใช้โดยแคช / บัฟเฟอร์ของ IO
  • หน้าถูกสลับออกด้วยเหตุผลบางอย่างก่อนหน้านี้และเพิ่งไม่จำเป็นอีกครั้งตั้งแต่ - บางทีมันเป็นหน่วยความจำที่ใช้โดยกระบวนการที่ไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง ในกรณีนี้การปล่อยการแลกเปลี่ยน (ดังนั้นการโหลดหน้าเว็บกลับสู่ RAM) อาจปรับปรุงเวลาตอบสนองของกระบวนการนั้นในครั้งต่อไปที่จำเป็นต้องทำสิ่งอื่นนอกเหนือจากโหมดสลีป แต่ถ้ามันไม่ได้ใช้งานมาระยะหนึ่งแล้วอาจไม่จำเป็น ในอนาคตอันใกล้นี้

1
+1 สำหรับคำอธิบายที่ยอดเยี่ยม FYI, vmstatให้คุณดู / proc / meminfo ข้อมูลไม่ได้ทั้งหมด

1

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

นอกจากนี้คุณอาจต้องการตรวจสอบว่าคุณไม่มีข้อ จำกัด เกี่ยวกับขนาดที่อยู่อาศัยสูงสุดผ่าน ulimit (โดยปกติจะอยู่ใน / etc / profile แต่อาจแตกต่างกันไปตามการกระจายและสามารถตั้งค่าต่อกระบวนการได้ (เช่นในสคริปต์เรียกใช้) )

ในที่สุดบน Microsoft Windows มีรายงานปัญหาเฉพาะกับ Firefox ที่ถูกสลับไปยังดิสก์เช่นเมื่อย่อเล็กสุด (เช่น http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ) ฉันไม่เคยได้ยินเรื่องนี้ในระบบ GNU / Linux แต่มันอาจคุ้มค่าที่จะสำรวจ


ขอบคุณสำหรับคำตอบ. ปัญหาของฉันคือไม่ใช้การแลกเปลี่ยน แต่ตอนนี้มันถูกใช้สำหรับโปรแกรมที่ใช้งานอยู่เช่น Firefox และ Thunderbird ซึ่งรู้สึกซบเซา swapoff / swapon ทำให้พวกเขารู้สึกว่องไวอีกครั้ง
Robert Munteanu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.