ทำความเข้าใจการใช้งาน Linux RAM ของคุณอย่างง่ายดายด้วย Smem

เผยแพร่แล้ว: 2022-01-29
หน้าจอแล็ปท็อปแสดงโลโก้เปลือก Bash บนฉากหลังสีแดง
fatmawati achmad zaenuri/Shutterstock

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

การใช้ความจำ

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

คอมพิวเตอร์ของคุณต้องการ RAM เท่าใดสำหรับเกม PC?
ที่เกี่ยวข้อง คอมพิวเตอร์ของคุณต้องการ RAM เท่าใดสำหรับเกม PC?

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

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

วิธีตรวจสอบการใช้หน่วยความจำจาก Linux Terminal
ที่เกี่ยวข้อง วิธีตรวจสอบการใช้หน่วยความจำจาก Linux Terminal

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

โฆษณา

ตัวอย่างเช่น การใช้ cat เพื่อดูระบบไฟล์หลอก /proc/meminfo ส่งคืนเอาต์พุต 50 บรรทัดบนเครื่องที่ใช้ในการค้นคว้าบทความนี้ คุณจะเริ่มต้นที่ไหน

 cat /proc/meminfo

และยูทิลิตี้ Linux บางตัวให้คำตอบที่แตกต่างกัน ในเครื่องทดสอบของเรา เรามีอินสแตนซ์ที่ทำงาน less ซึ่งมีรหัสกระบวนการ 2183

เราสามารถใช้ยูทิลิตี pmap กับตัวเลือก -x (ขยาย) เพื่อดูภาพรวมของการใช้หน่วยความจำของกระบวนการ เราจะใช้กับ ID กระบวนการของอินสแตนซ์ less :

 pmap -x 2183 

การค้นหาแผนที่หน่วยความจำของกระบวนการเดียว

ที่ด้านล่างของเอาต์พุต เราได้ยอดรวมสำหรับ Resident Set Size ซึ่งเป็นจำนวน RAM หลักที่ใช้

เอาต์พุต pmap สำหรับอินสแตนซ์ less . ตัวเดียว

จากนั้นเราใช้ยูทิลิตี ps กับตัวเลือก -o (เอาต์พุต) เลือกคอลัมน์ RSS และส่งผ่าน ID กระบวนการของอินสแตนซ์ที่เหมือนกันของ less :

 ps -o rss 2183 

ใช้ ps เพื่อดู RSS ของอินสแตนซ์ less . เดียวกัน

เราได้รับผลลัพธ์ที่แตกต่างกัน นี่คือการตัดสินใจออกแบบในส่วนของผู้เขียน ps นี่คือจากหน้า man ps :

ฟิลด์ SIZE และ RSS จะไม่นับบางส่วนของกระบวนการ ซึ่งรวมถึงตารางเพจ เคอร์เนลสแตก struct thread_info และ struct task_struct โดยปกติแล้วจะเป็นหน่วยความจำอย่างน้อย 20 KiB ที่ติดตัวอยู่เสมอ SIZE คือขนาดเสมือนของกระบวนการ (code+data+stack)
โฆษณา

ผู้เขียนยูทิลิตี้อื่น ๆ มีมุมมองของตนเองเกี่ยวกับวิธีการวัดการใช้ RAM

RSS, USS และ PSS

Resident Set Size (RSS) คือจำนวน RAM ที่จัดสรรให้กับกระบวนการ ไม่รวมพื้นที่สว็อป แต่รวมถึง RAM ที่ไลบรารีที่ใช้ร่วมกันต้องใช้ซึ่งกระบวนการใช้

เหตุใดจึงดีที่ RAM ในคอมพิวเตอร์ของคุณเต็ม
ที่เกี่ยวข้อง เหตุใดจึงดีที่ RAM ในคอมพิวเตอร์ของคุณเต็ม

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

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

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

USS และ PSS เป็นคำศัพท์และแนวคิดที่เสนอโดย Matt Mackall ผู้เขียน smem

ยูทิลิตี้ smem

ยูทิลิตี smem รายงานเกี่ยวกับหน่วยความจำที่ใช้โดยกระบวนการ ผู้ใช้ การแมป หรือทั่วทั้งระบบ ในการแจกแจงทั้งหมดที่เราทดสอบ จำเป็นต้องติดตั้ง ในการติดตั้งบน Ubuntu ให้ใช้คำสั่งนี้:

 sudo apt ติดตั้ง smem 

การติดตั้ง smem บน Ubuntu

ในการติดตั้ง smem บน Fedora คุณต้องพิมพ์:

 sudo dnf ติดตั้ง smem 

การติดตั้ง smem บน Fedora

ในการติดตั้ง smem บน Manjaro ให้ใช้:

 sudo pacman -Sy smem 

การติดตั้ง smem บน Manjaro

โฆษณา

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

 smm 

เรียกใช้ smem โดยไม่มีตัวเลือกบรรทัดคำสั่ง

ตารางข้อมูลจะแสดงในหน้าต่างเทอร์มินัล

เอาต์พุตเริ่มต้นของ smem

คอลัมน์คือ:

  • PID : ID กระบวนการของกระบวนการที่ใช้หน่วยความจำ
  • ผู้ใช้ : ชื่อผู้ใช้ของผู้ใช้ที่เป็นเจ้าของกระบวนการ
  • คำสั่ง : บรรทัดคำสั่งที่เริ่มต้นกระบวนการ
  • Swap : พื้นที่สว็อปที่กระบวนการใช้อยู่
  • USS : ขนาดชุดที่ไม่ซ้ำ
  • PSS : ขนาดชุดตามสัดส่วน
  • RSS : The Resident Set Size.

หากต้องการดูขนาดที่แสดงเป็นเปอร์เซ็นต์ ให้ใช้ตัวเลือก -p (เปอร์เซ็นต์)

 smem -p 

ใช้ตัวเลือก smem -p เพื่อขอเปอร์เซ็นต์

ขนาดเป็นไบต์ถูกแทนที่ด้วยเปอร์เซ็นต์

เอาต์พุต smem แสดงเปอร์เซ็นต์

หากต้องการดูตัวเลขที่แสดงในรูปแบบที่เป็นมิตรกับมนุษย์มากขึ้น ให้ใช้ตัวเลือก -k (ตัวย่อ) สิ่งนี้ย่อขนาดและเพิ่มตัวบ่งชี้หน่วย

 smem -k 

ใช้ตัวเลือก smem -k เพื่อแสดงขนาดด้วยตัวบ่งชี้หน่วย

แทนที่จะเป็นไบต์ดิบ ขนาดจะแสดงเป็นเมกะไบต์ กิกะไบต์ และอื่นๆ

เอาต์พุต smem โดยใช้ตัวบ่งชี้หน่วยเช่น K, M และ G

โฆษณา

หากต้องการเพิ่มบรรทัดผลรวม ให้ใช้ตัวเลือก -t (ผลรวม)

 smem -k -t 

ใช้ตัวเลือก smem -t เพื่อเพิ่มบรรทัดผลรวมให้กับผลลัพธ์

บรรทัดสุดท้ายของผลลัพธ์แสดงผลรวมสำหรับแต่ละคอลัมน์

บรรทัดผลรวมที่ด้านล่างของเอาต์พุต smem

การปรับแต่งรายงาน

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

 smem -u
 sudo smem -u 

การใช้ตัวเลือก smem -u ที่มีและไม่มี sudo

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

หากต้องการดูการใช้งานที่แมปกับไลบรารีที่ใช้งานอยู่ ไม่ว่ากระบวนการใดกำลังใช้ไลบรารี หรือผู้ใช้รายใดเป็นเจ้าของกระบวนการเหล่านั้น ให้ใช้อ็อพชัน -m (การแมป)

 smem -m -k -t 

ใช้ตัวเลือก smem -m เพื่อรับรายงานผู้ทำแผนที่

เรายังขอค่านิยมที่มนุษย์อ่านได้และยอดรวม

รายงานการแมป smem แสดงการใช้หน่วยความจำโดยห้องสมุด

หากต้องการดูการใช้หน่วยความจำทั้งระบบ ให้ใช้ตัวเลือก -w (ทั้งระบบ)

 smem -w -k -t 

รายงานทั้งระบบ sem

การรายงานในโปรแกรมเดียว

ด้วยความมหัศจรรย์ของบรรทัดคำสั่งเล็กน้อย เราสามารถรายงานเกี่ยวกับโปรแกรมเดียวและกระบวนการย่อยทั้งหมดได้ เราจะไพพ์เอาต์พุตจาก smem ไปที่ tail และขอให้ tail แสดงเฉพาะบรรทัดสุดท้าย เราจะบอกให้ smem ใช้ค่าที่มนุษย์อ่านได้และให้ผลรวม ผลรวมจะเป็นบรรทัดสุดท้าย และส่วน tail ของบรรทัดจะแสดงให้เราทราบ

โฆษณา

เราจะใช้ตัวเลือก -c (คอลัมน์) กับ smem และบอกว่าเราต้องการรวมคอลัมน์ใดในผลลัพธ์ของเรา เราจะจำกัดสิ่งนี้ไว้ที่คอลัมน์ Proportional Set Size ตัวเลือก -P (ตัวกรองกระบวนการ) ช่วยให้เราสามารถระบุสตริงการค้นหาให้กับ smem จะรวมเฉพาะบรรทัดเอาต์พุตที่ตรงกันเท่านั้น

 smem -c pss -P firefox -k -t | หาง -n 1 

การใช้ smem เพื่อแสดงการใช้ memeory โดยกระบวนการและลูกๆ ของมัน

นั่นเป็นวิธีที่รวดเร็วและเรียบร้อยในการค้นหาการใช้ RAM ของโปรแกรมและกระบวนการย่อย

การสร้างกราฟ

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

รูปแบบคำสั่งคือ:

 smem --ชื่อพาย -s uss 

ขอให้ SME สร้างแผนภูมิวงกลม

แผนภูมิวงกลมปรากฏในหน้าต่างตัวแสดงของตัวเอง

แผนภูมิวงกลม smem ในหน้าต่างตัวแสดงของตัวเอง

หากต้องการดูแปลงอื่น ๆ ใช้ pss หรือ rss แทน uss หากต้องการดูกราฟแท่ง ให้ใช้ --bar แทน --pie

โฆษณา

เพื่อให้ใช้งานได้ คุณจะต้องติดตั้ง Python ร่วมกับไลบรารี matplotlib สิ่งเหล่านี้ได้รับการติดตั้งบน Ubuntu, Fedora และ Manjaro ที่เราทดสอบแล้ว

สิ่งที่ดีมาในแพ็คเกจขนาดเล็ก

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

ที่เกี่ยวข้อง: 37 คำสั่ง Linux ที่สำคัญที่คุณควรรู้