Sau khi nghiên cứu, vẫn còn bối rối về việc theo dõi việc sử dụng RAM


10

Tôi đã đi qua bài viết này , trong đó giải thích các phương pháp khác nhau để kiểm tra mức sử dụng RAM của bạn. Tuy nhiên, tôi không thể dung hòa các phương pháp khác nhau và không biết phương pháp nào là đúng.

Khi tôi đăng nhập lần đầu, tôi được chào đón với một màn hình như thế này:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Điều này gợi ý cho tôi rằng tôi đang sử dụng 41% RAM, có vẻ khá cao vì máy chủ không hoạt động nhiều. Hay con số đó đề cập đến một cái gì đó ngoài RAM?

Tiếp theo tôi thử free -mphương pháp:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Theo hình ảnh giải thích trong bài viết, điều này ngụ ý rằng tôi có 130 MB RAM đã sử dụng và 459 MB RAM miễn phí, điều này cho thấy tôi đang sử dụng khoảng 22% RAM.

Tiếp theo tôi chạy top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

Đây là điều khó hiểu nhất, vì tóm tắt cho thấy tôi sử dụng 525MG trong tổng số 604M, nhưng khi sử dụng lệnh tương tác "m" để sắp xếp theo bộ nhớ hàng đầu thì quá trình hàng đầu chỉ sử dụng 0,3% bộ nhớ ???

Cuối cùng, pslệnh dường như cũng hiển thị rất ít sử dụng bộ nhớ:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

Tôi muốn một người nào đó sửa chữa bất cứ sự hiểu lầm nào mà tôi có đang tạo ra những xung đột rõ ràng này.

Cảm ơn!

EDIT cho Rahul

Ouput của cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

# 1) Các lệnh trong đầu để sắp xếp theo bộ nhớ không phải là m , đó là M . # 2) Để xem tất cả các quy trình, hãy thử ** lệnh ax ax -o, rss **; những gì bạn chạy chỉ cho thấy những gì của riêng bạn.
tink

Vui lòng cập nhật cho chúng tôi đầu ra củacat /proc/meminfo
Rahul Patil


@tink, cảm ơn vì lời giải thích đó. Tôi đã thử ps ax -o rss | awk '{ sum+=$1} END {print sum}'ngay bây giờ và 153156.
Jonah

@RahulPatil, OP cập nhật. Lưu ý rằng các quy trình đang chạy có thể hơi khác so với các số ban đầu, nhưng không nên đi quá xa. Ngoài ra, kết quả tôi nhận được cho bạn dường như không khớp với kết quả tôi nhận được cho tink trong nhận xét trên này. Những người được thực hiện chỉ cách nhau một vài phút.
Giô-na

Câu trả lời:


8

Bạn chỉ cần hiểu Khái niệm bộ nhớ

Theo kết quả / Proc / meminfo của bạn, bạn chỉ cần thông báo những điều dưới đây:

Bộ đệm : - Bộ đệm là thứ chưa được "ghi" vào đĩa. Nó đại diện cho bao nhiêu RAM được dành riêng cho khối đĩa đệm. "Bộ nhớ cache" tương tự như "Bộ đệm", chỉ có điều lần này nó lưu các trang khỏi việc đọc tệp

Bộ nhớ cache : - Bộ nhớ cache là thứ đã được "đọc" từ đĩa và được lưu trữ để sử dụng sau. Nói chung, bạn có thể coi vùng bộ nhớ cache là RAM "miễn phí" khác vì nó sẽ bị thu hẹp dần nếu ứng dụng cần thêm bộ nhớ.

Điều đó đủ để hiểu rằng cả "bộ đệm" và "Bộ đệm" đại diện cho kích thước của bộ đệm hệ thống. Chúng tự động phát triển hoặc thu hẹp theo yêu cầu của cơ chế nhân Linux bên trong.

tại Webhosting, họ xóa bộ nhớ cache bằng cách sử dụng cmd bên dưới: (hầu hết được cấu hình bằng cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Trích dẫn liên kết

EDIT cho một yêu cầu nữa tức là cho mỗi lần sử dụng bộ nhớ người dùng

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Vui lòng kiểm tra với kịch bản trên và cho tôi biết, nếu nó hiển thị đúng hay không.


Cảm ơn Raul. Một câu hỏi cuối cùng. Vì free -mkhông cung cấp cách xem bộ nhớ được sử dụng cho mỗi người dùng, đâu là cách chính xác để xác định lượng RAM thực sự đang được sử dụng bởi một người dùng cụ thể là bao nhiêu? Điều này xuất hiện khi theo dõi việc sử dụng bộ nhớ của riêng bạn trên một máy chủ dùng chung chẳng hạn.
Giô-na

@Jonah Tôi đã cập nhật .. vui lòng kiểm tra và cho tôi biết
Rahul Patil

kịch bản đó không hoạt động như mong đợi .. nhưng tôi đang cố gắng cập nhật sớm
Rahul Patil

@Jonah cảm ơn vì đã chấp nhận ans của tôi .. nhưng cảm ơn thực sự cho MichaelHampton ...
Rahul Patil

2

Câu trả lời hay @RahulPatil.

Một điểm khác để xem xét về ps hoặc đầu là như sau

Công cụ này [exmap] chính xác hơn ps hoặc top vì nó tính đến các thư viện dùng chung được sử dụng bởi nhiều ứng dụng. Ví dụ: nếu hai ứng dụng đang sử dụng cùng một thư viện dùng chung, chiếm 1 MB bộ nhớ, ps sẽ hiển thị cả hai ứng dụng sử dụng thêm 1 MB bộ nhớ, trong khi exmap hiển thị chính xác hơn mỗi ứng dụng sử dụng 500 KB. Độ chính xác cao hơn này đặc biệt quan trọng để đánh giá các môi trường máy tính để bàn như KDE và Gnome, vốn sử dụng rất nhiều thư viện được chia sẻ giữa các ứng dụng.

Qua ibm / developerworks / linux_memory

Vì câu hỏi của bạn đề cập đến một máy chủ không đầu - tôi không chắc chắn bao nhiêu báo cáo hàng đầu hoặc ps sẽ thực sự có.


0

Tôi sợ rằng chúng ta có thể đang nhìn vào điều hiển nhiên bởi vì đó là một "tất nhiên" đối với hầu hết chúng ta.

Jonah, hãy tha thứ cho tôi nếu tôi sai, nhưng những câu hỏi của bạn có vẻ như bạn có thể không nhận ra rằng tất cả các giá trị này, đặc biệt là việc sử dụng CPU, thường sẽ thay đổi khá nhiều từ giây này sang giây khác.

Việc sử dụng CPU có thể đi từ một chữ số đến 100% ngay lập tức khi một quy trình mới được bắt đầu nhưng nhanh chóng (hy vọng) rơi trở lại phạm vi dưới 50%.

Việc sử dụng bộ nhớ thay đổi chậm hơn nhưng ở đó, Linux cố gắng sử dụng bộ nhớ không hoạt động bằng cách chạy các quy trình để truy cập đĩa "bộ nhớ đệm". Ví dụ, nó cố gắng dự đoán những gì sẽ cần đọc từ đĩa tiếp theo, chẳng hạn như phần còn lại của một tệp lớn sau khi một phần đã được đọc và tải trước nó trong bộ đệm. Một số giá trị sử dụng bộ nhớ bao gồm cả bộ nhớ được sử dụng bởi các quy trình cũng như bộ nhớ được sử dụng cho bộ đệm. Trên một hệ thống đang hoạt động được một lúc, cả hai kết hợp có thể sẽ là 80-90% trở lên.

Cũng xem xét quá trình bạn chạy để hiển thị việc sử dụng, chẳng hạn như top, cũng sử dụng CPU và bộ nhớ. Nếu bạn đã viết một tập lệnh với một vòng lặp để báo cáo việc sử dụng CPU liên tục, nó gần như chắc chắn sẽ luôn hiển thị 100% vì hành động báo cáo chính việc sử dụng (không có một số độ sleep trễ được đưa vào) sử dụng tất cả CPU.


Bác sĩ, cảm ơn vì đã nghĩ, nhưng đây không phải là vấn đề
Jonah
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.