การใช้ swap ของฉันคืออะไร (Ubuntu)


30

ฉันมีเซิร์ฟเวอร์ Ubuntu 8.04 ซึ่งใช้ฐานข้อมูลและเซิร์ฟเวอร์แอปพลิเคชัน Java จำนวนมาก การกำหนดค่าหน่วยความจำและการใช้งานมันคือ:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

ฉันสังเกตเห็นว่าการแลกเปลี่ยนเกิดขึ้นทุกบ่ายและมีการปล่อยเวลากลางคืน ความต้องการไม่เหมือนกันทุกวันและเริ่มในเวลาต่างกัน ดังนั้นมันจึงสุ่มค่อนข้างยกเว้นขอบเขต "บ่าย - กลางคืน" ที่คลุมเครือ

โหลดบนเครื่องนี้จะแตกต่างกันในระหว่างวัน มันต่ำมากระหว่างเที่ยงคืนถึง 6-7 น. สูงกว่ามาก (แต่คงที่) จนถึง 18.00 น. จากนั้นค่อย ๆ ลดลง

ตอนนี้ฉันมีคำถามต่อไปนี้:

  1. ฉันจะดูกระบวนการที่ใช้ swap ได้อย่างไร
  2. เหตุใดจึงต้องการสลับออกแทนที่จะใช้หน่วยความจำบางส่วนจากแคช

คำตอบ:


25

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

คุณสามารถได้รับเหลือบของหน่วยความจำเท่าใดหลายชนิดแต่ละขั้นตอนจะใช้ในหรือtop htopไม่แสดงการใช้งาน swap ตามค่าเริ่มต้น แต่ทั้งสองสามารถกำหนดค่าเป็น (ด้านบน: กดfและเปิดSWAPคอลัมน์; htop: กดF2เพิ่มNSWAPคอลัมน์) คุณจะได้รับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการโดยเฉพาะอย่างยิ่งกับการcat /proc/12345/vmstatที่12345เป็นกระบวนการ ID โปรดทราบว่า“ การสลับโปรแกรมที่ใช้อยู่” นั้นไม่ได้กำหนดไว้อย่างสมบูรณ์เนื่องจากบางหน้าจะถูกใช้ร่วมกันโดยหลาย ๆ กระบวนการ

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


6
ฉันไม่พบNSWAPคอลัมน์ (Ubuntu 16.04: /)
jjmontes

1
@jjmontes มันถูกลบแล้ว ฉันไม่รู้ว่าทำไม
Gilles 'หยุดชั่วร้าย'

htop คำถามที่พบบ่อยรัฐที่ผู้เขียนไม่เชื่อว่ามันเป็นไปได้ที่จะต้องรายงานการใช้การแลกเปลี่ยนและของตัวชี้วัดด้านบนที่ไม่ถูกต้อง
Oliver Evans

0

ใน StackOverflow มีคำตอบที่ยอดเยี่ยมสำหรับคำถามแรกของคุณ ("กระบวนการใดที่ใช้การสลับจริง")

https://stackoverflow.com/a/7180078/1442301

โดยสรุปเครื่องมือเช่นtopหรือhtopไม่ให้ข้อมูลที่ถูกต้องเกี่ยวกับการใช้งาน swap คุณควรดำดิ่งลงใน/procโฟลเดอร์ (ในไฟล์หลอก/proc/$PID/smaps) เพื่อรับข้อมูลที่แม่นยำยิ่งขึ้น

โพสต์ดังกล่าวข้างต้นมีสคริปต์เชลล์สั้นที่จะได้รับข้อมูลเหล่านี้สะท้อนในทางที่ดี


0

ด้วยhtop v1.01ผมกด "S" เพื่อเพิ่มNSWAPคอลัมน์แทน "F2" (ตามที่กิลส์แนะนำ) แล้วColumns> Available Columns> และF5ที่จะเพิ่ม

ป้อนคำอธิบายรูปภาพที่นี่


ฉันมี htop 2.0.1 และฉันไม่เห็นตัวเลือก NSWAP :(
อดัม

1
@Adam ผู้ดูแลไม่ต้องการแสดงคอลัมน์นี้อีกต่อไปเนื่องจากไม่มีวิธีที่เชื่อถือได้ในการรับข้อมูลนี้ ดูเหตุใดจึงไม่มีคุณลักษณะ htop คอลัมน์ SWAP เหมือนส่วนบน
Genjo

0

โดยไม่ต้องลงคะแนนเลือกตั้งและการแยกผลของเครื่องมือที่ชอบvmstat, freeและtopสถานที่ที่ดีที่สุดในการดูอาจจะ crontabs ของผู้ใช้รากหรือผู้ใช้อื่นในระบบ หากโหลดทั่วไปของระบบเพิ่มขึ้นอย่างน่าเชื่อถือในเวลาที่แน่นอนโอกาสที่จะเกิดกระบวนการ cron ที่สร้างความต้องการทรัพยากร มิฉะนั้นคุณสามารถสร้างยูทิลิตี้บันทึกการทิ้งเรือสลัมด้วยscriptยูทิลิตี้ซึ่งจะบันทึกทุกอย่างที่ไปที่ STDOUT

ดังนั้นหากฉันต้องการทำสคริปต์ throwaway one-off เพื่อตรวจจับผลลัพธ์สำหรับการตรวจสอบในภายหลังในเทอร์มินัลหนึ่งฉันจะพิมพ์:

script /tmp/free.txt

แล้ว

while (true); do date; free; sleep 30; done

และในอาคารอื่น

script /tmp/top.txt

แล้ว

while (true); do date; top -n 1; sleep 30; done

และจากนั้นในเช้าวันถัดไปฆ่าscriptการเรียกร้องและจับคู่ผลลัพธ์ของtopและfree

นี่เป็นวิธีการสลัมอีกครั้ง แต่ดูเหมือนว่าคุณต้องการเพียงครั้งเดียว

คุณอาจต้องการอ่านคำแนะนำในการสลับอูบุนตู

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