Как увидеть топ процессы отсортированы по фактическому использованию памяти? - PullRequest
222 голосов
/ 26 января 2011

У меня есть сервер с 12G памяти.Фрагмент top показан ниже:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                      
12979 frank  20   0  206m  21m  12m S   11  0.2  26667:24 krfb                                                                                                                                                                                                                                                          
13 root      15  -5     0    0    0 S    1  0.0  36:25.04 ksoftirqd/3                                                                                                                                                                                                                                                   
59 root      15  -5     0    0    0 S    0  0.0   4:53.00 ata/2                                                                                                                                                                                                                                                         
2155 root      20   0  662m  37m 8364 S    0  0.3 338:10.25 Xorg                                                                                                                                                                                                                                                          
4560 frank  20   0  8672 1300  852 R    0  0.0   0:00.03 top                                                                                                                                                                                                                                                           
12981 frank  20   0  987m  27m  15m S    0  0.2  45:10.82 amarok                                                                                                                                                                                                                                                        
24908 frank  20   0 16648  708  548 S    0  0.0   2:08.84 wrapper                                                                                                                                                                                                                                                       
1 root      20   0  8072  608  572 S    0  0.0   0:47.36 init                                                                                                                                                                                                                                                          
2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd

free -m показывает следующее:

             total       used       free     shared    buffers     cached
Mem:         12038      11676        362          0        599       9745
-/+ buffers/cache:       1331      10706
Swap:         2204        257       1946

Если я правильно понимаю, система имеет только 362 МБ доступной памяти.У меня вопрос: как я могу узнать, какой процесс потребляет большую часть памяти?

Так же, как справочная информация, система работает 64bit OpenSuse 12.

Ответы [ 9 ]

307 голосов
/ 07 марта 2012

используйте быстрый совет, используя команду top в linux / unix

$ top

, а затем нажмите Shift + m (то есть напишите заглавную M).

С man top

SORTING of task window
  For compatibility, this top supports most of the former top sort keys.
  Since this is primarily a service to former top users, these commands do
  not appear on any help screen.
    command   sorted-field                  supported
      A         start time (non-display)      No
      M         %MEM                          Yes
      N         PID                           Yes
      P         %CPU                          Yes
      T         TIME+                         Yes

Или альтернативно: нажмите Shift + f , затем выберите порядок отображения по памяти, нажав клавишу n , затем нажмите Enter . Вы увидите активный процесс, упорядоченный по использованию памяти

272 голосов
/ 26 января 2011

Во-первых, повторите эту мантру немного: «неиспользованная память - это потерянная память».Ядро Linux хранит около 1001 * огромного количества метаданных файлов и файлов, которые были запрошены, пока что-то, что выглядит более важным, не вытолкнет эти данные.Вот почему вы можете запускать:

find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'

и запускать второй экземпляр find со смешной скоростью.

Linux оставляет лишь немного «свободной» памяти для обработки скачков памятииспользование без особых усилий.

Во-вторых, вы хотите найти процессы, которые поглощают всю вашу память;в top используйте команду M для сортировки по использованию памяти.Не стесняйтесь игнорировать столбец VIRT, который просто сообщает вам, сколько виртуальной памяти было выделено, а не сколько памяти использует процесс.RES сообщает, сколько памяти является резидентным , или в настоящее время находится в оперативной памяти (в отличие от подкачки на диск или фактически никогда не выделяется на первом месте, несмотря на запрос).RES будет подсчитывать, например, /lib/libc.so.6 память один раз почти для каждого процесса, это не совсем хороший показатель того, сколько памяти использует процесс.В столбце SHR указано, сколько памяти совместно используется с другими процессами, но нет никакой гарантии, что другой процесс на самом деле делится - это может быть общий ресурс, просто никто больше не хочет делиться.

Инструмент smem предназначен для того, чтобы помочь пользователям лучше определить, сколько памяти следует действительно обвинять в каждом отдельном процессе.Это делает некоторую умную работу, чтобы выяснить, что действительно уникально, что является общим, и пропорционально соотносит общую память с процессами, разделяющими ее.smem может помочь вам понять, куда идет ваша память лучше, чем top, но top - отличный первый инструмент.

37 голосов
/ 23 апреля 2013
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

(Добавление -n числового флага для команды сортировки.)

28 голосов
/ 26 января 2011

Сначала вы должны прочитать пояснение к выводу free.Итог: у вас есть как минимум 10,7 ГБ памяти, легко используемой процессами.

Затем вы должны определить, что такое «использование памяти» для процесса (это не просто и не однозначно, поверьте мне).

Тогда мы могли бы помочь больше: -)

20 голосов
/ 18 октября 2013

Список и сортировка процессов по использованию памяти:

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
17 голосов

ps aux --sort '%mem'

из procps 'ps (по умолчанию в Ubuntu 12.04) генерирует вывод, подобный:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
tomcat7   3658  0.1  3.3 1782792 124692 ?      Sl   10:12   0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
root      1284  1.5  3.7 452692 142796 tty7    Ssl+ 10:11   3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro      2286  0.3  3.8 1316000 143312 ?      Sl   10:11   0:49 compiz
ciro      5150  0.0  4.4 660620 168488 pts/0   Sl+  11:01   0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb             
ciro      5147  0.0  4.5 660556 170920 pts/0   Sl+  11:01   0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb             
ciro      5142  0.1  6.3 2581944 239408 pts/0  Sl+  11:01   0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]                                                                          
ciro      2386  3.6 16.0 1752740 605372 ?      Sl   10:11   7:38 /usr/lib/firefox/firefox

Так что здесь Firefox - лучший потребитель с 16% моей памяти.

Вы также можете быть заинтересованы в:

ps aux --sort '%cpu'
4 голосов
/ 25 декабря 2013

Вы можете указать, по какому столбцу сортировать, выполнив следующие шаги:

steps:
* top
* shift + F
* select a column from the list
    e.g. n means sort by memory,
* press enter
* ok
1 голос
/ 02 марта 2018

Вы можете увидеть использование памяти, выполнив этот код в своем терминале:

$ watch -n2 free -m
$ htop
0 голосов
/ 31 января 2019

У вас есть простая команда:

$ free -h
...