Назад | Перейти на главную страницу

Как проверить содержимое своп-памяти в Linux?

Я пытаюсь выяснить, что именно использует память подкачки в моей системе. Free сообщает о более 5 ГБ используемой памяти подкачки, но все процессы используют только 24 МБ подкачки. Я подозреваю, что своп может использоваться файловой системой tmpfs, но я не знаю, как это проверить.

Не могли бы вы сказать, что еще я должен проверить, чтобы проверить содержимое памяти подкачки?

    # free -m
                 total       used       free     shared    buffers     cached
    Mem:         48206      47688        518       8177         10      11789
    -/+ buffers/cache:      35888      12317
    Swap:        15999       5378      10621

РЕДАКТИРОВАТЬ:

Проблема решена, я обнаружил информацию о том, что подкачано 1372500 страниц общей памяти:

    # ipcs -mu

    ------ Shared Memory Status --------
    segments allocated 32
    pages allocated 2752532
    pages resident  1380020
    pages swapped   1372500
    Swap performance: 0 attempts     0 successes

    # getconf PAGESIZE
    4096
    # echo $((1372500*4096/1024/1024))
    5361

Использование свопа для каждого процесса

#!/bin/bash
set -o posix
set -u
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"

Задача решена:

Я обнаружил, что 1372500 страниц общей памяти заменены местами. Размер страницы 4096 байт.

# ipcs -mu

------ Shared Memory Status --------
segments allocated 32
pages allocated 2752532
pages resident  1380020
pages swapped   1372500
Swap performance: 0 attempts     0 successes

# getconf PAGESIZE
4096

# echo "$((1372500*4096/1024/1024)) MB"
5361 MB

Linux перемещает редко используемую память для подкачки; не всегда имеет значение, есть ли у вас в данный момент свободная память или нет, см. этот ответ на аналогичный вопрос на askubuntu: https://askubuntu.com/a/159358

Я использую этот bash, чтобы увидеть, какие процессы в замена - for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less