Как увидеть топ процессы отсортированы по фактическому использованию памяти?

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

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.

Ответ 1

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

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

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

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

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

Но, так как RES будет считаться, например. /lib/libc.so.6 память раз почти для каждого процесса, это не совсем удивительная мера того, сколько памяти используется процессом. Столбец SHR сообщает, сколько памяти используется совместно с другими процессами, но нет никакой гарантии, что другой процесс действительно используется - он может быть доступен для совместного доступа, просто никто не хочет делиться.

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

Ответ 2

используйте быстрый совет, используя команду 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. Вы увидите активный процесс, упорядоченный по использованию памяти

Ответ 3

ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

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

Ответ 4

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

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

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

Ответ 5

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

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

Ответ 6

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'

Ответ 7

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

steps:
* top
* shift + F
* select a column from the list
    e.g. n means sort by memory,
* press enter
* ok

Ответ 8

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

$ watch -n2 free -m
$ htop

Ответ 9

Как подсчитать использованную память по имени процесса:

Иногда, даже глядя на самые большие отдельные процессы, все еще остается много неиспользованной памяти. Чтобы проверить, существует ли много таких же меньших процессов, использующих память, вы можете использовать команду, подобную следующей, которая использует awk для суммирования общего объема памяти, используемой процессами с одинаковым именем:

ps -e -orss=,args= |awk '{print $1 " " $2 }'| awk '{tot[$2]+=$1;count[$2]++} END {for (i in tot) {print tot[i],i,count[i]}}' | sort -n

например, выход

9344 docker 1
9948 nginx: 4
22500 /usr/sbin/NetworkManager 1
24704 sleep 69
26436 /usr/sbin/sshd 15
34828 -bash 19
39268 sshd: 10
58384 /bin/su 28
59876 /bin/ksh 29
73408 /usr/bin/python 2
78176 /usr/bin/dockerd 1
134396 /bin/sh 84
5407132 bin/naughty_small_proc 1432
28061916 /usr/local/jdk/bin/java 7

Ответ 10

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

$ free -h