ฉันจะตรวจสอบการใช้งานหน่วยความจำได้อย่างไร


265

ฉันเคยtopเห็นการใช้งานหน่วยความจำในขณะนี้ แต่ฉันต้องการตรวจสอบการใช้งานหน่วยความจำในช่วงเวลาหนึ่ง เช่นเริ่มต้นการตรวจสอบจากนั้นเรียกใช้คำสั่งสองสามคำสั่งและหยุดการตรวจสอบขั้นสุดท้ายและดูว่ามีการใช้หน่วยความจำเท่าใดในช่วงเวลานั้น

ฉันจะทำสิ่งนี้บนเซิร์ฟเวอร์ Ubuntu ได้อย่างไร

ฉันเดาว่าฉันสามารถเริ่ม cronjob ทุก ๆ 5 วินาทีหรือมากกว่านั้นและเรียกใช้คำสั่งที่บันทึกการใช้หน่วยความจำปัจจุบันในไฟล์ข้อความ แต่ฉันควรใช้คำสั่งอะไรเพื่อรับการใช้งานหน่วยความจำปัจจุบันในรูปแบบที่ง่ายต่อการเข้าสู่ไฟล์ข้อความ?

คำตอบ:


322

ฉันแนะนำให้รวมคำตอบก่อนหน้านี้

watch -n 5 free -m

โปรดทราบว่าลินุกซ์ชอบที่จะใช้หน่วยความจำเสริมใด ๆ ไปยังแคชบล็อกฮาร์ดไดรฟ์ Memดังนั้นคุณจึงไม่ต้องการที่จะดูเพียงฟรี คุณต้องการดูfreeคอลัมน์ของ-/+ buffers/cache:แถว สิ่งนี้แสดงจำนวนหน่วยความจำที่แอปพลิเคชันมี ดังนั้นฉันเพิ่งวิ่งfree -mและได้รับนี้:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

ฉันรู้ว่าฉันใช้1528 MBและฟรี2170 MB

หมายเหตุ:หากต้องการหยุดนี้watchรอบคุณก็สามารถกด+CtrlC


1
ขอบคุณนั่นคือข้อมูล แต่ในคอลัมน์ที่ใช้ก่อนอื่นคุณต้อง2896แล้ว1528สำหรับบัฟเฟอร์ไม่ได้หมายความว่าคุณกำลังใช้2896 + 1528?
Jonas

8
Mem: usedคือหน่วยความจำที่คุณใช้ทั้งหมด -/+ buffers/cache: usedคือหน่วยความจำทั้งหมดที่คุณใช้ลบด้วยบัฟเฟอร์และแคช ฉันรู้ว่าผลลัพธ์ดูตลก แต่ไม่จำเป็นต้องใช้เลขคณิตที่นี่ คุณกำลังมองหามือสอง / ฟรีในแถว - / + บัฟเฟอร์ / แคช
Justin Force

6
ตัวเลือก -h นั้นดีกว่ามาก
frmdstryr

1
@frmdstryr จุดดี! -h / - มนุษย์ไม่มีตัวตนเมื่อฉันเขียนสิ่งนี้แม้ว่า gitlab.com/procps-ng/procps/commit/…
Justin Force

3
@ cbradsh1 คุณสามารถทำได้free -hเช่นwatch -n 5 free -hเพื่อรับเอาต์พุต "human readable" เช่น2.1Gแทน2170เอาต์พุต
Justin Force

213

ผมคิดว่าhtopเป็นทางออกที่ดีที่สุด

  • sudo apt-get install htop

วิธีนี้คุณจะสังเกตได้ว่าโปรแกรมใดใช้ RAM ส่วนใหญ่ และคุณสามารถยกเลิกได้อย่างง่ายดายหากคุณต้องการ นี่คือภาพหน้าจอ!


2
htopเป็นสิ่งที่ดีเพราะมันเป็นมากกว่า "กราฟิก" freeและอาจจะให้อ่านง่ายขึ้นกว่า
mjswensen

1
ฉันไม่เข้าใจผลลัพธ์ เป็นRESหน่วยความจำที่ใช้โดยโปรแกรมที่เป็น MB? แล้วอะไรSHRล่ะ
faizal

1
@faizal: หน่วยความจำเสมือนสำรองและแชร์
WitchCraft

1
จะhtopแสดง 'การใช้หน่วยความจำในช่วงเวลาหนึ่ง' ได้อย่างไร
dangel

htop -s M_SHARE htop -s TIME
Tomachi

40

หากคุณกำลังมองหารายละเอียดที่ดีของหน่วยความจำที่ใช้โดยแต่ละขั้นตอนทำงานแล้วผมอาจจะแนะนำการตรวจสอบps_mem.py (ที่พบที่นี่ที่ pixelbeat.org)

ฉันรู้ในความคิดเห็นด้านบนคุณพูดถึงว่าต้องการสแนปช็อตหนึ่งบรรทัดจากฟรีแต่ฉันคิดว่าคนอื่น ๆ อาจพบว่ามีประโยชน์

ตัวอย่างผลลัพธ์:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

ส่วนเดียวที่ฉันไม่ชอบคือความจริงที่ว่าสคริปต์อ้างว่าต้องการสิทธิ์รูท ฉันยังไม่มีโอกาสได้เห็นอย่างชัดเจนว่าทำไมถึงเป็นเช่นนี้


ฉันสงสัยว่าความจำจะถูกแชร์ระหว่างเธรดหรือไม่ มันถูกใช้ร่วมกันระหว่างกระบวนการใช่ไหม อย่างน้อยใน Windows ...
Thomas Weller

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

4
ตอนนี้ที่มีอยู่ใน PyPI ( pip install ps_mem) และบน GitHub
Leif Arne Storset

@ThomasWeller: ใช่เธรดจะแชร์หน่วยความจำเสมอในขณะที่กระบวนการอาจแชร์บางส่วนหรือทั้งหมดภายใต้เงื่อนไขบางประการ
Leif Arne Storset

สำหรับสิ่งนี้ฉันใช้ gnome-system-monitor

24

ใช้คำสั่งฟรี ตัวอย่างเช่นนี่คือ ouput ของfree -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ จะกลับเฉพาะบรรทัดที่สอง:

-/+ buffers/cache:        947       1064

ขอบคุณดูดีมาก ดังนั้นนี่947คือการใช้หน่วยความจำลบด้วยหน่วยความจำที่ใช้สำหรับบัฟเฟอร์และแคช?
Jonas

11

ดูคำสั่งอาจจะมีประโยชน์ ลองwatch -n 5 freeตรวจสอบการใช้หน่วยความจำด้วยอัพเดททุกห้าวินาที


ขอบคุณนี่ยอดเยี่ยมมาก! อย่างไรก็ตามฉันต้องการได้รับการใช้หน่วยความจำในบรรทัดเดียวดังนั้นจึงง่ายต่อการเข้าสู่ไฟล์ข้อความ
Jonas

8

cat /proc/meminfoคุณสามารถทำได้โดยใช้

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB

1
การเพิ่มการเฝ้าดูที่ด้านหน้าของคำสั่งนี้ทำให้มันยอดเยี่ยม! เหมือนในwatch cat /proc/meminfo
Elder Geek

freeคำสั่งจะรับข้อมูลจาก/proc/meminfoและนำเสนอพวกเขาในทางที่มีขนาดกะทัดรัด ใช้free -hสำหรับเอาต์พุตที่มนุษย์อ่านได้
LoMaPh

4

สำหรับการตรวจสอบการใช้ RAM โดยรวมหากคุณใช้Byobuจะทำให้การใช้งานหน่วยความจำของคุณอยู่ที่มุมล่างขวาของเครื่องและจะทำงานในขณะที่คุณอยู่ในเซสชันใด ๆ

อย่างที่คุณเห็นจากภาพหน้าจอเครื่องเสมือนของฉันมีเวลาทำงาน 1h3m โหลด 0.00 มีโปรเซสเซอร์ 2.8GHz (เสมือน) และ 994MB (21%) ของ RAM ที่มีอยู่ในระบบ

ใช้งาน Byobu


3

โซลูชั่นบรรทัดเดียวและเอาท์พุท:

free -m | grep "Mem:"

นี่คือตัวอย่างของผลลัพธ์ที่คาดไว้:

Mem:           3944         652         302          18        2990        2930

1

ผมจะใช้Cacti การทำเช่นนี้จะแสดงกราฟการใช้หน่วยความจำของคุณ ฯลฯ ในช่วงระยะเวลาหนึ่งและคุณจะสามารถตรวจสอบการใช้งานโดยใช้เว็บเบราว์เซอร์ของคุณ


1

ตรวจสอบการใช้งานหน่วยความจำ

ฉันสอดคล้องกับหนึ่งในโพสต์ก่อนหน้านี้ที่กล่าวถึง Cacti เป็นวิธีที่ดีในการตรวจสอบการใช้หน่วยความจำ อย่างไรก็ตามเนื่องจากดูเหมือนว่า cacti ไม่ได้รับความนิยมในกระแสหลักอีกต่อไปจึงมีแอปพลิเคชั่นกราฟทางเลือกที่เรียกว่า Graphite

กราไฟท์นั้นค่อนข้างง่ายต่อการติดตั้งบนเซิร์ฟเวอร์อูบุนตูและเพื่อติดตั้งคุณสามารถตรวจสอบลิงค์นี้เพื่อง่ายต่อการปฏิบัติตามขั้นตอนการติดตั้ง

หลังจากติดตั้งกราไฟท์แล้วคุณสามารถส่งเมตริกหน่วยความจำไปยังช่วงเวลาที่คุณต้องการ ทุก 5 วินาทีทุกนาทีทุกชั่วโมง ... ฯลฯ

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

หากคุณต้องการเขียนสคริปต์หน่วยความจำของคุณเองคุณควรตรวจสอบให้แน่ใจว่าบัญชีของคุณมีหน่วยความจำบัฟเฟอร์และแคชเมื่อคำนวณหน่วยความจำที่ใช้แล้วมิฉะนั้นคุณจะต้องรวบรวมข้อมูลเท็จ

หากคุณต้องการที่จะใช้แทนปลั๊กอิน SNMP ที่มีอยู่แล้วไม่ทั้งหมดคำนวณที่จำเป็นสำหรับคุณที่นี่เชื่อมโยงไปยังหนึ่งที่ทำงานสวยดี: checkMemoryviaSNMP

ข้อดีของ SNMP:

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

ข้อเสียของ SNMP:

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

การกำหนดค่าของเอเจนต์ SNMP บนโหนดรีโมต:

หลังจากติดตั้งเอเจนต์ snmp แล้วเพียง vi ไฟล์ /etc/snmpd/snmpd.conf และเพิ่มบรรทัดนี้:

rocommunity  (specify-a-community-string-aka-password-here)

จากนั้นรีสตาร์ทเอเจนต์ snmpd ด้วย:

/etc/init.d/snmpd restart

จากนั้นบนเซิร์ฟเวอร์กลางของคุณซึ่งคุณแทนการตรวจสอบเซิร์ฟเวอร์อื่น ๆ ทั้งหมดของคุณคุณสามารถเรียกใช้คำสั่งต่อไปนี้:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

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