ทำความเข้าใจการใช้งาน Linux RAM ของคุณอย่างง่ายดายด้วย Smem
เผยแพร่แล้ว: 2022-01-29 การใช้หน่วยความจำ Linux อาจตีความได้ยากและเข้าใจยาก เมื่อใช้ smem
การค้นหาหน่วยความจำที่กระบวนการใช้อยู่นั้นเป็นเรื่องง่าย และกระบวนการใดที่ใช้บ่อยที่สุด
การใช้ความจำ
Linux ช่วยให้คุณตรวจสอบสิ่งที่เกิดขึ้นกับ RAM ของคอมพิวเตอร์ได้หลายวิธี ปัญหาคือ การจัดการหน่วยความจำเป็นความท้าทายที่ซับซ้อนสำหรับระบบปฏิบัติการของคุณ มันต้องเล่นกล RAM จริง RAM เสมือนในรูปแบบของพื้นที่สว็อป และความต้องการของกระบวนการประเภทต่าง ๆ ที่ทำงานพร้อมกันในแต่ละครั้ง
กระบวนการใช้ RAM ขณะโหลดตัวเองลงในหน่วยความจำ จากนั้นพวกเขาจึงขอ RAM เพิ่ม เพื่อให้มีพื้นที่สำหรับทำงานตามที่ออกแบบไว้ กระบวนการบางอย่างแทบจะไม่ส่งผลกระทบต่อ RAM ส่วนบางกระบวนการก็ต้องใช้หน่วยความจำมาก
เคอร์เนลและส่วนที่เหลือของระบบปฏิบัติการ สภาพแวดล้อมเดสก์ท็อปของคุณ และทุกแอปพลิเคชันหรือเซสชันบรรทัดคำสั่งที่คุณเรียกใช้ล้วนแต่ส่งเสียงร้องถึงส่วนของ RAM จำนวนจำกัดที่ติดตั้งในคอมพิวเตอร์ของคุณ กระบวนการบางอย่างทำให้เกิดกระบวนการอื่น บางกระบวนการใช้ RAM ร่วมกับกระบวนการอื่น
พยายามถอดรหัสทั้งหมดนี้และหาคำตอบง่ายๆ สำหรับคำถามที่ว่า "โปรแกรมหรือกระบวนการนี้ใช้ RAM เท่าใด" อาจเป็นความท้าทายที่น่าประหลาดใจ ความละเอียดนั้นยอดเยี่ยมและมีที่ของมัน แต่ข้อมูลที่มากเกินไปอาจเป็นอุปสรรคได้
ตัวอย่างเช่น การใช้ cat
เพื่อดูระบบไฟล์หลอก /proc/meminfo ส่งคืนเอาต์พุต 50 บรรทัดบนเครื่องที่ใช้ในการค้นคว้าบทความนี้ คุณจะเริ่มต้นที่ไหน
cat /proc/meminfo
และยูทิลิตี้ Linux บางตัวให้คำตอบที่แตกต่างกัน ในเครื่องทดสอบของเรา เรามีอินสแตนซ์ที่ทำงาน less
ซึ่งมีรหัสกระบวนการ 2183
เราสามารถใช้ยูทิลิตี pmap
กับตัวเลือก -x
(ขยาย) เพื่อดูภาพรวมของการใช้หน่วยความจำของกระบวนการ เราจะใช้กับ ID กระบวนการของอินสแตนซ์ less
:
pmap -x 2183
ที่ด้านล่างของเอาต์พุต เราได้ยอดรวมสำหรับ Resident Set Size ซึ่งเป็นจำนวน RAM หลักที่ใช้
จากนั้นเราใช้ยูทิลิตี ps
กับตัวเลือก -o
(เอาต์พุต) เลือกคอลัมน์ RSS
และส่งผ่าน ID กระบวนการของอินสแตนซ์ที่เหมือนกันของ less
:
ps -o rss 2183
เราได้รับผลลัพธ์ที่แตกต่างกัน นี่คือการตัดสินใจออกแบบในส่วนของผู้เขียน ps
นี่คือจากหน้า man
ps
:
ผู้เขียนยูทิลิตี้อื่น ๆ มีมุมมองของตนเองเกี่ยวกับวิธีการวัดการใช้ RAM
RSS, USS และ PSS
Resident Set Size (RSS) คือจำนวน 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
บน Fedora คุณต้องพิมพ์:
sudo dnf ติดตั้ง smem
ในการติดตั้ง smem
บน Manjaro ให้ใช้:
sudo pacman -Sy smem
การใช้ smem
โดยไม่มีตัวเลือกจะแสดงรายการกระบวนการที่ใช้ RAM
smm
ตารางข้อมูลจะแสดงในหน้าต่างเทอร์มินัล
คอลัมน์คือ:
- PID : ID กระบวนการของกระบวนการที่ใช้หน่วยความจำ
- ผู้ใช้ : ชื่อผู้ใช้ของผู้ใช้ที่เป็นเจ้าของกระบวนการ
- คำสั่ง : บรรทัดคำสั่งที่เริ่มต้นกระบวนการ
- Swap : พื้นที่สว็อปที่กระบวนการใช้อยู่
- USS : ขนาดชุดที่ไม่ซ้ำ
- PSS : ขนาดชุดตามสัดส่วน
- RSS : The Resident Set Size.
หากต้องการดูขนาดที่แสดงเป็นเปอร์เซ็นต์ ให้ใช้ตัวเลือก -p
(เปอร์เซ็นต์)
smem -p
ขนาดเป็นไบต์ถูกแทนที่ด้วยเปอร์เซ็นต์
หากต้องการดูตัวเลขที่แสดงในรูปแบบที่เป็นมิตรกับมนุษย์มากขึ้น ให้ใช้ตัวเลือก -k
(ตัวย่อ) สิ่งนี้ย่อขนาดและเพิ่มตัวบ่งชี้หน่วย
smem -k
แทนที่จะเป็นไบต์ดิบ ขนาดจะแสดงเป็นเมกะไบต์ กิกะไบต์ และอื่นๆ
หากต้องการเพิ่มบรรทัดผลรวม ให้ใช้ตัวเลือก -t
(ผลรวม)
smem -k -t
บรรทัดสุดท้ายของผลลัพธ์แสดงผลรวมสำหรับแต่ละคอลัมน์
การปรับแต่งรายงาน
คุณสามารถขอให้ smem
รายงานการใช้หน่วยความจำโดยผู้ใช้ การทำแผนที่ (ไลบรารี) หรือทั้งระบบ ในการกรองเอาต์พุตตามผู้ใช้ ให้ใช้ตัวเลือก -u
(ผู้ใช้) โปรดทราบว่าหากคุณต้องการดูมากกว่าแค่การใช้งานของคุณเอง คุณจะต้องเรียกใช้ smem
ด้วย sudo
smem -u
sudo smem -u
อย่างที่คุณเห็น ผลลัพธ์ที่ได้จะโค้งงอสำหรับชื่อผู้ใช้ที่มีความยาวเกินแปดอักขระ
หากต้องการดูการใช้งานที่แมปกับไลบรารีที่ใช้งานอยู่ ไม่ว่ากระบวนการใดกำลังใช้ไลบรารี หรือผู้ใช้รายใดเป็นเจ้าของกระบวนการเหล่านั้น ให้ใช้อ็อพชัน -m
(การแมป)
smem -m -k -t
เรายังขอค่านิยมที่มนุษย์อ่านได้และยอดรวม
หากต้องการดูการใช้หน่วยความจำทั้งระบบ ให้ใช้ตัวเลือก -w
(ทั้งระบบ)
smem -w -k -t
การรายงานในโปรแกรมเดียว
ด้วยความมหัศจรรย์ของบรรทัดคำสั่งเล็กน้อย เราสามารถรายงานเกี่ยวกับโปรแกรมเดียวและกระบวนการย่อยทั้งหมดได้ เราจะไพพ์เอาต์พุตจาก smem
ไปที่ tail
และขอให้ tail
แสดงเฉพาะบรรทัดสุดท้าย เราจะบอกให้ smem
ใช้ค่าที่มนุษย์อ่านได้และให้ผลรวม ผลรวมจะเป็นบรรทัดสุดท้าย และส่วน tail
ของบรรทัดจะแสดงให้เราทราบ
เราจะใช้ตัวเลือก -c
(คอลัมน์) กับ smem
และบอกว่าเราต้องการรวมคอลัมน์ใดในผลลัพธ์ของเรา เราจะจำกัดสิ่งนี้ไว้ที่คอลัมน์ Proportional Set Size ตัวเลือก -P
(ตัวกรองกระบวนการ) ช่วยให้เราสามารถระบุสตริงการค้นหาให้กับ smem
จะรวมเฉพาะบรรทัดเอาต์พุตที่ตรงกันเท่านั้น
smem -c pss -P firefox -k -t | หาง -n 1
นั่นเป็นวิธีที่รวดเร็วและเรียบร้อยในการค้นหาการใช้ RAM ของโปรแกรมและกระบวนการย่อย
การสร้างกราฟ
คุณสามารถส่งตัวเลือก --pie
หรือ --bar
เพื่อให้ smem
สร้างกราฟได้ ต้องบอกว่าด้วยหมวดหมู่ที่มากเกินไป กราฟจึงไม่สามารถเข้าใจได้อย่างรวดเร็ว แต่อาจมีประโยชน์สำหรับภาพรวมอย่างรวดเร็ว
รูปแบบคำสั่งคือ:
smem --ชื่อพาย -s uss
แผนภูมิวงกลมปรากฏในหน้าต่างตัวแสดงของตัวเอง
หากต้องการดูแปลงอื่น ๆ ใช้ pss
หรือ rss
แทน uss
หากต้องการดูกราฟแท่ง ให้ใช้ --bar
แทน --pie
เพื่อให้ใช้งานได้ คุณจะต้องติดตั้ง Python ร่วมกับไลบรารี matplotlib
สิ่งเหล่านี้ได้รับการติดตั้งบน Ubuntu, Fedora และ Manjaro ที่เราทดสอบแล้ว
สิ่งที่ดีมาในแพ็คเกจขนาดเล็ก
ยูทิลิตี้ smem
มีเคล็ดลับเพิ่มเติมอีกสองสามข้อ และคุณควรตรวจสอบหน้า man
ของมัน ละครหลักของมันคือสิ่งที่เราได้สรุปไว้ที่นี่ และเป็นเครื่องมือเล็ก ๆ ที่ยอดเยี่ยมที่จะมีในกล่องเครื่องมือ CLI ของคุณ
ที่เกี่ยวข้อง: 37 คำสั่ง Linux ที่สำคัญที่คุณควรรู้