เมื่อใช้ ps ฉันจะเห็นขนาด vsize (เหมือนกับ VIRT ของ top หรือไม่) และ rss (เหมือนกับ res ของ top?) (อีกหนึ่งที่ฉันเห็นด้านบนคือ SHR)
มีใครสรุปให้ฉันได้ไหม
เมื่อใช้ ps ฉันจะเห็นขนาด vsize (เหมือนกับ VIRT ของ top หรือไม่) และ rss (เหมือนกับ res ของ top?) (อีกหนึ่งที่ฉันเห็นด้านบนคือ SHR)
มีใครสรุปให้ฉันได้ไหม
คำตอบ:
ในระยะสั้น:
ขนาดเสมือน:จำนวนพื้นที่ที่อยู่ที่กระบวนการกำลังจัดการอยู่ พื้นที่ที่อยู่เสมือนมีทุกอย่างที่กระบวนการสามารถเข้าถึงผ่านตัวชี้ (การอ้างอิงที่อยู่หน่วยความจำ) ตัวอย่างเช่นหากโปรแกรมของคุณเข้าถึง framebuffer ของการ์ดแสดงผลหน่วยความจำนั้นจะถูกแมปกับพื้นที่เสมือนของกระบวนการและรับที่อยู่ที่จัดเก็บไว้ในตัวชี้ ไฟล์ที่แม็พหน่วยความจำและการแม็พแบบไม่ระบุชื่อจะถูกพิจารณาเป็นขนาดพื้นที่ที่อยู่เสมือน ค่อนข้างทุกอย่างในขนาดเสมือน หากคุณสรุปขนาดของช่วงที่อยู่ทั้งหมดที่มีในรายการ/proc/<pid>/maps
ควรจะส่งคืนค่าเท่ากับขนาดเสมือนจริงโดยประมาณ
ขนาดที่อยู่อาศัย:คือจำนวนหน่วยความจำที่เป็นของกระบวนการนั้นที่อยู่ในหน่วยความจำ นั่นหมายถึงปริมาณหน่วยความจำที่ไม่ได้อยู่ในการสลับ โปรดทราบว่าบางส่วนของกระบวนการสามารถอยู่ในหน่วยความจำสลับได้แม้ในขณะที่กระบวนการกำลังทำงานอยู่ ระบบปฏิบัติการจะดึงภูมิภาคเหล่านี้ออกจากการสลับเมื่อกระบวนการพยายามเข้าถึง ซึ่งควรรวมถึงฮีปสแต็กของเธรดทั้งหมดและการแมปส่วนตัวอื่น ๆ ถ้าคุณมองใน/proc/<pid>/maps
การ[stack]
, [heap]
และแมปที่ไม่ระบุชื่ออื่น ๆ (ผู้ที่ไม่มีเส้นทางแฟ้ม) จะสลับหรือคิดในขนาดที่มีถิ่นที่อยู่
ขนาดที่ใช้ร่วมกัน:คือจำนวนหน่วยความจำที่อาจเป็นของหลายกระบวนการ ตัวอย่างเช่นหากคุณมีอินสแตนซ์สี่แอปพลิเคชันเดียวกันที่โหลดในหน่วยความจำคุณจะมีสี่อินสแตนซ์ของฮีปและอย่างน้อยสี่สแต็กอย่างใดอย่างหนึ่งสำหรับแต่ละกระบวนการ (นี่คือหน่วยความจำถิ่นที่อยู่) รหัสไบนารีของโปรแกรมและไลบรารีของมัน นี่คือพื้นที่ที่ใช้ร่วมกัน ไม่เพียง แต่จะรวมถึงรหัสไบนารีของโปรแกรมและไลบรารีของมันเท่านั้น แต่ยังรวมถึงไฟล์การแปลข้อมูลโปรแกรมแบบอ่านอย่างเดียวเซ็กเมนต์หน่วยความจำที่แบ่งใช้ SysV และ POSIX, เซมาฟอร์ ฯลฯ ... หากคุณดู/proc/<pid>/maps
การแมปส่วนใหญ่ผูกอยู่กับไฟล์ไลบรารีและโปรแกรม ที่ใช้ร่วมกัน
โปรดทราบว่า VIRT มีการรวม RSS และ SHR และจะมากกว่าหนึ่งในนั้น อาจมีภูมิภาคที่คิดว่าเป็นทั้ง RSS และ SHR
ใน Juliano คำตอบ:
โปรดทราบว่า RSS + SHR <= VIRT เสมอ
นี่เป็นเพียงความเท็จ SHR มีหน่วยความจำเสมือนทั้งหมดที่สามารถใช้ร่วมกับกระบวนการอื่น ๆ และ RSS มีหน่วยความจำทั้งหมดใน RAM ที่กระบวนการใช้
ดังนั้นหน่วยความจำที่ใช้ร่วมกันทั้งหมดในปัจจุบันจะถูกนับทั้งใน SHR และใน RSS ดังนั้น SHR + RSS จึงไม่มีความหมายเนื่องจากสามารถมีจำนวนซ้ำได้
หากต้องการสร้างกระบวนการด้วย RSS + SHR> VIRT เพียงแค่ mmap ไฟล์ขนาดใหญ่ (1GB) จากนั้นอ่านให้ครบถ้วน: ไฟล์ mmaped จะถูกโหลดใน RAM และ VIRT, SHR และ RSS แต่ละตัวจะเล็กกว่า 1GB ดังนั้น SHR + RSS> VIRT