Làm thế nào tôi có thể theo dõi việc sử dụng bộ nhớ?


265

Tôi đã sử dụng topđể xem việc sử dụng bộ nhớ tại thời điểm này. Nhưng tôi muốn theo dõi việc sử dụng bộ nhớ trong một khoảng thời gian. Ví dụ, bắt đầu theo dõi và sau đó thực hiện một vài lệnh, và cuối cùng dừng theo dõi và xem có bao nhiêu bộ nhớ đã được sử dụng trong khoảng thời gian.

Làm thế nào tôi có thể làm điều này trên Ubuntu Server?

Tôi đoán rằng tôi có thể bắt đầu một cronjob cứ sau 5 giây hoặc lâu hơn và gọi một lệnh ghi nhật ký sử dụng bộ nhớ hiện tại trong tệp văn bản. Nhưng tôi nên sử dụng lệnh nào để có được mức sử dụng bộ nhớ hiện tại ở định dạng dễ đăng nhập vào tệp văn bản?

Câu trả lời:


322

Tôi khuyên bạn nên kết hợp các câu trả lời trước

watch -n 5 free -m

Lưu ý rằng Linux thích sử dụng bất kỳ bộ nhớ bổ sung nào để lưu trữ các khối ổ cứng . Vì vậy, bạn không muốn nhìn vào chỉ miễn phí Mem. Bạn muốn nhìn vào freecột của -/+ buffers/cache:hàng. Điều này cho thấy có bao nhiêu bộ nhớ có sẵn cho các ứng dụng. Vì vậy, tôi chỉ cần chạy free -mvà nhận được điều này:

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

Tôi biết rằng tôi đang sử dụng 1528 MB và có 2170 MB miễn phí.

Lưu ý: Để dừng watchchu trình này, bạn chỉ cần nhấn Ctrl+ C.


1
Cảm ơn, đó là thông tin. Nhưng trên cột được sử dụng trước tiên bạn có 2896và sau đó 1528cho bộ đệm, điều này không có nghĩa là bạn đang sử dụng 2896 + 1528?
Jonas

8
Mem: usedlà tổng bộ nhớ đã sử dụng của bạn. -/+ buffers/cache: usedlà tổng bộ nhớ đã sử dụng của bạn trừ đi bộ đệm và bộ đệm. Tôi biết đầu ra trông buồn cười, nhưng không yêu cầu số học ở đây. Bạn chỉ đang tìm kiếm được sử dụng / miễn phí trong hàng - / + bộ đệm / bộ đệm.
Justin Force

6
Tùy chọn -h đẹp hơn rất nhiều
frmdstryr

1
@frmdstryr Điểm tốt! -h / - con người đã không tồn tại khi tôi viết điều này. gitlab.com/procps-ng/procps/commit/ triệt
Justin Force

3
@ cbradsh1 Bạn chỉ có thể làm free -h, ví dụ watch -n 5 free -hđể có đầu ra "con người có thể đọc được", ví dụ 2.1Gthay vì 2170trong đầu ra.
Justin Force

213

Tôi nghĩ htoplà giải pháp tốt nhất.

  • sudo apt-get install htop

Bằng cách này bạn sẽ nhận thấy những chương trình nào đang sử dụng hầu hết RAM. và bạn có thể dễ dàng chấm dứt một nếu bạn muốn. Đây là một ảnh chụp màn hình!


2
htoplà tốt vì nó "đồ họa" hơn và có thể dễ đọc hơn free.
mjswensen

1
tôi không hiểu đầu ra. Là RESbộ nhớ được sử dụng bởi ứng dụng đó trong MB? Đó là SHRgì?
faizal

1
@faizal: bộ nhớ ảo, dành riêng & chia sẻ.
WitchCraft

1
Làm thế nào để htopcho bạn thấy "việc sử dụng bộ nhớ trong một khoảng thời gian"?
dangel

htop -s M_SHARE htop -s TIME
Tomachi

40

Nếu bạn đang tìm kiếm một sự cố nhỏ của bộ nhớ được sử dụng bởi mỗi quá trình đang chạy, thì tôi có thể khuyên bạn nên kiểm tra ps_mem.py (tìm thấy ở đây tại pixelbeat.org).

Tôi biết trong các ý kiến ​​trên, bạn đã đề cập đến việc muốn có một ảnh chụp nhanh một dòng miễn phí , nhưng tôi cho rằng những người khác có thể thấy điều này hữu ích.

Ví dụ đầu ra:

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

Phần duy nhất tôi không thích là thực tế là tập lệnh tuyên bố yêu cầu quyền root. Tôi chưa có cơ hội để xem chính xác tại sao lại như vậy.


Tôi tự hỏi liệu bộ nhớ được chia sẻ giữa các chủ đề. Nó được chia sẻ giữa các quá trình, phải không? Ít nhất là trên Windows ...
Thomas Weller

Vì vậy, trong trường hợp này, bộ nhớ dùng chung đề cập đến các trang được ánh xạ bởi nhiều quy trình dưới dạng thư viện dùng chung. Ngoài ra, trong bối cảnh của một ứng dụng đa luồng, toàn bộ không gian bộ nhớ quy trình có thể truy cập được bởi tất cả các luồng trong quy trình đó.
Jason Mock

4
Hiện đã có trong PyPI ( pip install ps_mem) và trên GitHub .
Leif Arne Storset

@ThomasWeller: Có, các luồng luôn chia sẻ bộ nhớ, trong khi các quy trình có thể chia sẻ một số hoặc tất cả các điều đó trong một số điều kiện nhất định.
Leif Arne Storset

để làm điều này, tôi sử dụng màn hình gnome-system

24

Sử dụng lệnh miễn phí . Ví dụ: đây là thông số của 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 /+ sẽ chỉ trả lại dòng thứ hai:

-/+ buffers/cache:        947       1064

Cảm ơn, trông rất tuyệt. Vì vậy, đây 947là sử dụng bộ nhớ trừ bộ nhớ được sử dụng cho bộ đệm và bộ nhớ cache?
Jonas

11

Lệnh xem có thể hữu ích. Cố gắng watch -n 5 freetheo dõi việc sử dụng bộ nhớ với các cập nhật cứ sau năm giây.


Cảm ơn, điều này thật tuyệt! Tuy nhiên, tôi muốn sử dụng bộ nhớ trên một dòng duy nhất, vì vậy thật dễ dàng để đăng nhập vào một tệp văn bản.
Jonas

8

Bạn có thể làm điều đó bằng cách sử dụng 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
thêm đồng hồ vào mặt trước của lệnh này làm cho nó tuyệt vời! như trongwatch cat /proc/meminfo
Anh Cả Geek

Các freelệnh lấy thông tin từ /proc/meminfovà trình bày chúng trong một cách nhỏ gọn. Sử dụng free -hcho đầu ra con người có thể đọc được.
LoMaPh

4

Để theo dõi trực quan việc sử dụng RAM tổng thể, nếu bạn sử dụng Byobu , nó sẽ giữ mức sử dụng bộ nhớ của bạn ở góc dưới bên phải của thiết bị đầu cuối và sẽ chạy trong khi bạn đang ở trong bất kỳ phiên cuối nào.

Như bạn có thể thấy từ ảnh chụp màn hình, máy ảo của tôi có thời gian hoạt động 1h3m, tải 0,00, có bộ xử lý 2,8 GHz (ảo) và 994 MB (21%) RAM có sẵn trên hệ thống.

Byobu đang sử dụng


3

Giải pháp và đầu ra dòng đơn:

free -m | grep "Mem:"

Dưới đây là một ví dụ về đầu ra dự kiến:

Mem:           3944         652         302          18        2990        2930

1

Tôi sẽ sử dụng Cacti . Điều này sẽ lập biểu đồ sử dụng bộ nhớ của bạn, v.v. trong một khoảng thời gian và bạn sẽ có thể kiểm tra việc sử dụng bằng trình duyệt web của mình.


1

Theo dõi sử dụng bộ nhớ

Tôi phù hợp hơn với một trong những bài viết trước đó đã đề cập đến Cacti như một cách tuyệt vời để theo dõi việc sử dụng bộ nhớ. Tuy nhiên, vì nó xuất hiện xương rồng không còn phổ biến trong dòng chính, nên có một ứng dụng đồ họa thay thế được gọi là Graphite.

Graphite tương đối dễ cài đặt trên máy chủ Ubuntu và để cài đặt nó, bạn có thể kiểm tra liên kết này để dễ thực hiện theo quy trình cài đặt.

Sau khi than chì đã được cài đặt, bây giờ, bạn có thể gửi số liệu bộ nhớ đến nó, tại bất kỳ khoảng thời gian nào bạn muốn; cứ sau 5 giây, mỗi phút, mỗi giờ ...

Để biểu đồ số liệu bộ nhớ, như đã đề xuất trong các bài viết trước, bạn có thể viết tập lệnh của riêng mình bằng các công cụ hệ thống để thu thập thông tin bộ nhớ cần thiết. Hoặc, bạn có thể sử dụng plugin snmp được viết sẵn sẽ thực hiện tất cả công việc cho bạn.

Nếu bạn muốn viết tập lệnh bộ nhớ của riêng mình, sẽ là khôn ngoan để đảm bảo bạn tính đến bộ nhớ đệm và bộ nhớ cache khi tính toán bộ nhớ đã sử dụng, nếu không, bạn sẽ thu thập dữ liệu sai.

Thay vào đó, nếu bạn muốn sử dụng một plugin snmp đã thực hiện tất cả các tính toán cần thiết cho bạn, thì đây là một liên kết đến một hoạt động khá tốt: checkMemoryviaSNMP .

Ưu điểm của SNMP:

Tôi đã cài đặt snmp trên tất cả các nút từ xa mà tôi theo dõi. Điều này cho phép tôi giám sát tất cả các hệ thống của mình từ một máy chủ trung tâm , mà không phải sao chép hoặc đặt plugin trên các nút từ xa.

Nhược điểm của SNMP:

Bạn phải đảm bảo tác nhân snmp được cài đặt trên mỗi nút từ xa mà bạn muốn theo dõi bộ nhớ. Tuy nhiên, cài đặt này sẽ là một thỏa thuận một lần. Nếu bạn đang sử dụng các công cụ tự động hóa như đầu bếp hoặc con rối hoặc các công cụ tương tự trong môi trường của bạn, thì đây hoàn toàn không phải là vấn đề.

Cấu hình của tác nhân SNMP trên (các) nút từ xa:

Sau khi tác nhân snmp đã được cài đặt, chỉ cần vi tệp /etc/snmpd/snmpd.conf và thêm dòng này vào nó:

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

Sau đó khởi động lại tác nhân snmpd, với:

/etc/init.d/snmpd restart

Sau đó, trên máy chủ trung tâm của bạn, từ đó bạn thay thế để giám sát tất cả các máy chủ khác của mình, bạn có thể chạy lệnh sau:

$ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.