แอปพลิเคชันนี้ใช้ RAM เท่าใด


10

ถ้าฉันเรียกใช้top -cหรือhtopได้รับการประมวลผลที่มีการใช้หน่วยความจำของพวกเขา แต่ไม่ใช่สิ่งที่ฉันต้องการดู

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

ตัวอย่างเช่นฉันต้องการดูปริมาณการใช้ RAM ของเว็บเซิร์ฟเวอร์ Apache (ไม่ใช่โดยตรวจสอบกระบวนการทั้งหมดที่ทำงานแทน)

ram 


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

คำตอบ:


4

มีคำอธิบายโดยละเอียดที่ดีมากที่นี่: https://blogs.kde.org/2005/09/15/measuring-memory-usage

แต่โดยพื้นฐานแล้วคุณต้องขุดและเข้าใจวิธีการตั้งค่าแอปพลิเคชัน

ตัวอย่างเช่นดูที่ mysql:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

หน่วยความจำทั้งหมดที่ใช้มีค่าประมาณ 25 MB (ใช้เวลา 27 MB RES และลบการแชร์ (SHR))

ฉันตรวจสอบสิ่งนี้โดยการตรวจสอบการใช้งานหน่วยความจำทั้งหมด (ฟรี -m, + / บัฟเฟอร์ / แคช) ก่อนและหลังการออก "killall mysqld" หลังจากการฆ่ากระบวนการ mysqld ทั้งหมดการใช้หน่วยความจำลดลง 25 MB ตาม "free -m"

หากคุณเห็นว่าแต่ละกระบวนการมีคอลัมน์ VIRT, RES และ SHR ที่เหมือนกันพวกเขาน่าจะเป็นเพียงเธรดของกระบวนการเดียวกัน (ไลบราลีนุกซ์รุ่นเก่าจัดการทำเกลียวด้วยการวางไข่กระบวนการจริงหลายอย่างซึ่งโดยพื้นฐานแล้วครอบครองหน่วยความจำเดียวกัน)

หากมีความแตกต่างกันคุณอาจประเมินได้โดยใช้ SUM ของ (RES - SHR) แต่จะใช้งานได้ก็ต่อเมื่อกระบวนการนั้นอยู่ในความเป็นจริงแยกกระบวนการและไม่ใช่แค่เธรดของกระบวนการเดียวกัน การดู PPID (Parent Process ID) ก็ช่วยได้เช่นกัน หากพวกเขาทั้งหมดมีผู้ปกครองเดียวกันพวกเขาอาจเป็นเพียงกระทู้ (แม้ว่าไม่จำเป็น)

น่าเสียดายที่ไม่มีวิธีง่าย ๆ ในการตอบคำถามนี้ใน Linux วิธีง่ายๆคือการตรวจสอบ "ฟรี" ทันทีก่อนที่จะยกเลิกกระบวนการและตรวจสอบอีกครั้งทันทีหลังจาก ดูบรรทัด "- / + บัฟเฟอร์ / แคช:" และดูว่าการใช้หน่วยความจำลดลงเท่าใดและนั่นจะบอกคุณว่ากำลังใช้งานเท่าใด


2

ด้วยความช่วยเหลือเล็กน้อยman psและคำตอบที่ยอดเยี่ยมนี้ ...

ps -up $(pidof PROCESS_NAME)

ตัวอย่างเช่น:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

ทางอื่น:

cat /proc/$(pidof firefox)/status | grep VmSize

สิ่งนี้สามารถทำงานได้โดยไม่ต้อง-xและtail -1:

pmap -x $(pidof firefox) | tail -1

แสดงเฉพาะเปอร์เซ็นต์:

top -p $(pidof firefox)

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


แต่แอปพลิเคชั่นเปิดตัวหลายกระบวนการฉันจะรู้ได้อย่างไรว่าอันไหนเป็นหลัก

เดา? ฉันคิดว่าpmapแสดงข้อมูลมากมายเกี่ยวกับทรัพยากรที่ PID ใช้ ข้อมูลนี้จัดทำขึ้นตามชื่อของกระบวนการและ PID ที่พบจากการใช้pidofงานดังนั้นกระบวนการหลักจะแสดงหากชื่ออะไรก็ตามที่คุณให้ (ฉันคิดว่าไม่รู้ว่ามันหมายถึงกระบวนการของผู้ปกครอง)
วิลฟ์

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