Після дослідження все ще заплутався у моніторингу використання оперативної пам’яті


10

Я ознайомився з цією статтею , де пояснюються різні методи перевірки використання оперативної пам'яті. Однак я не можу погодити різні методи і не знаю, який з них є правильним.

Коли я вперше ввійду, мене вітають із таким екраном:

  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%

Це говорить про те, що я використовую 41% своєї оперативної пам’яті, що здається досить високим, оскільки сервер робить мало. Або це число посилається на щось, крім оперативної пам'яті?

Далі я спробую free -mметод:

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

Згідно з пояснювальною графікою статті, це означає, що у мене є 130 МБ використаної оперативної пам’яті та 459 МБ вільної оперативної пам’яті, що говорить про те, що я використовую близько 22% своєї оперативної пам’яті.

Далі біжу 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     

Це є найбільш заплутаним, оскільки у підсумках показано, що я використовую 525 МГ загальною загальною кількістю 604М, але все ж, коли використовується інтерактивна команда "m" для сортування за верхньою пам'яттю, то для верхнього процесу використовується лише 0,3% пам'яті ???

Нарешті, psздається , що команда також показує дуже мало використання пам'яті:

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

Я б хотів, щоб хтось виправив усі мої непорозуміння, що створюють ці явні конфлікти.

Дякую!

EDIT для Рахула

Вихід 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) Команда в верхніх сортування по пам'яті не м , це М . # 2) Щоб побачити всі процеси, спробуйте ** ps ax -o команда, rss **; те, що ти біг, просто показує свої власні.
тинк

Будь ласка, оновіть нам вихідcat /proc/meminfo
Rahul Patil


@tink, дякую за це пояснення. Я спробував ps ax -o rss | awk '{ sum+=$1} END {print sum}'зараз і 153156.
Йона

@RahulPatil, OP оновлено. Зауважте, що запущені процеси можуть дещо відрізнятися від вихідних чисел, але це не повинно бути таким далеко. Крім того, результат, який я отримав для вас, здається, не відповідає результату, який я отримав для тинку в коментарі вище цього. Їх забрали лише пару хвилин.
Йона

Відповіді:


8

Вам просто потрібно зрозуміти концепцію пам'яті

Відповідно до результату / proc / meminfo, Вам потрібно лише помітити нижче:

Буфери : - Буфер - це те, що ще потрібно "записати" на диск. Він представляє, скільки оперативної пам’яті присвячено блоку дискового кешу. "Кешований" схожий на "Буфери", лише цього разу він кешує сторінки з читання файлів

Кешування : - Кеш - це те, що було "прочитано" з диска і збережено для подальшого використання. Як правило, ви можете розглядати область кешу як ще одну «вільну» оперативну пам’ять, оскільки вона буде поступово скорочуватися, якщо програма вимагатиме більше пам’яті.

Достатньо зрозуміти, що і "буфери", і "Кешовані" відображають розмір системного кешу. Вони динамічно зростають або скорочуються відповідно до вимог внутрішнього механізму ядра Linux.

в Webhosting вони очищають кеш, використовуючи нижче cmd: (здебільшого налаштований у cron):

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

Посилання на цитування

EDIT для ще однієї вимоги, тобто для використання пам'яті користувача

#!/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

Будь ласка, перевірте вищевказаний скрипт і повідомте мені, чи він відображається належним чином чи ні.


Дякую Рахулю. Одне заключне питання. Оскільки free -mне передбачено способу перегляду пам’яті, що використовується на кожного користувача, то який точний спосіб визначити, скільки реальної оперативної пам’яті споживає конкретний користувач? Це з'являється, наприклад, під час моніторингу використання вашої власної пам'яті на спільному сервері.
Йона

@Jonah Я оновив .. будь ласка, перевірте і повідомте мене
Rahul Patil

цей сценарій працює не так, як очікувалося .. але я намагаюся оновити скоро
Рахул Патіл

@Jonah спасибі за те, що прийняв мою анс .. але справжнє спасибі для MichaelHampton ...
Rahul Patil

2

Гарна відповідь @RahulPatil.

Ще один момент, про який слід розглянути питання про ps або top, полягає в наступному

Цей інструмент [exmap] є більш точним, ніж ps або top, оскільки він враховує спільні бібліотеки, якими користуються декілька програм. Наприклад, якщо два додатки використовують одну і ту ж спільну бібліотеку, яка займає 1 МБ пам'яті, ps відображатиме обидва додатки, використовуючи 1 Мб додаткової пам'яті, тоді як exmap правильніше показує кожну програму, що має 500 КБ. Ця більша точність особливо важлива для оцінки середовищ робочого столу, таких як KDE та GNOME, які дуже активно використовують бібліотеки, що діляться між додатками.

Через ibm / developerworks / linux_memory

Оскільки ваше запитання стосується безголівкового сервера - я не впевнений, скільки насправді матиме подвійний репортаж або ps


0

Я боюся, що ми можемо не помітити очевидне, тому що це такий "звичайно" для більшості з нас.

Джона, пробач, якщо я помиляюся, але твої запитання звучать так, що ти, можливо, не зрозумів, що всі ці значення, зокрема використання процесора, зазвичай будуть сильно відрізнятися від секунди до секунди.

Використання процесора може миттєво перейти від однозначних до 100%, коли новий процес запускається, але швидко (сподіваємось) повернутися до діапазону нижче 50%.

Використання пам'яті змінюється повільніше, але там Linux намагається використовувати пам'ять, яка не використовується в активному режимі, запускаючи процеси для "кешування" доступу до диска. Наприклад, він намагається передбачити, що потрібно буде прочитати з диска далі, наприклад, решту великого файлу після того, як частина була прочитана, і попередньо завантажити її в кеш. Деякі значення використання пам'яті включають як пам'ять, яка використовується процесами, так і пам'ять, що використовується для кешування. У системі, яка працює деякий час, два комбіновані ймовірно становитимуть 80-90% або більше.

Також врахуйте, що процес, який ви запускаєте для показу використання, наприклад top, використовує процесор і пам'ять. Якщо ви писали сценарій з циклом, щоб постійно повідомляти про використання процесора, він майже напевно завжди показував би 100%, оскільки в акті звітування про саме використання (без певних sleep затримок) використовується весь процесор.


Док, спасибі за думку, але це не питання
Йона
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.