Linux чем занят swap

how to check what is in swap?

How to check what is in swap? I try to check it via processes, but for every pid on system VmSwap is 0:

undefine@uml:~$ awk '/VmSwap/ ' /proc/*/status |uniq 0 

What else can be in swap? I thought about tmpfs — but i reread all files on tmpfs-es — and it doesn’t flush swap size.

2 Answers 2

smem is the standard tool for this. It’s clean and simple.

On a Debian based system, install it via package manager:

A sample (clipped) output from my system:

$ smem -s swap -t -k -n PID User Command Swap USS PSS RSS 831 1000 /bin/bash 0 3.8M 3.8M 5.5M 3931 1000 bash /usr/bin/sage -c noteb 276.0K 4.0K 20.0K 1.2M 17201 1000 /usr/bin/dbus-launch --exit 284.0K 4.0K 8.0K 500.0K 17282 1000 /usr/bin/mate-settings-daem 372.0K 11.0M 11.7M 21.8M 17284 1000 marco 432.0K 16.7M 18.1M 29.5M 17053 1000 mate-session 952.0K 3.3M 3.5M 9.2M 3972 1000 python /usr/lib/sagemath/sr 2.7M 101.8M 102.1M 104.3M ------------------------------------------------------------------------------- 141 1 5.2M 3.9G 4.0G 4.5G 

But does it return anything other than the value shown in the VmSwap line in /proc/PID/status ? The question isn’t asking for a prettier display, it’s asking what could be in swap other than process data.

smem doesn’t give me nothing more usefull than greping proc: undefine@uml:~$ sudo smem -c swap |uniq -c 1 Swap 227 0

I only started looking into it yesterday for my needs, below is what I’ve found so far:

SWAP_USED = Used_by_Processes + SwapCached + Part_of_Tmpfs + something_else

Short story:

Used_by_Processes – data that has been swapped out from memory completely.

SwapCached – data that has been swapped to disk, but still remains in memory.

Part_of_Tmpfs – some portion of tmpfs data.

Long story:

Used_by_Processes – there are many instructions published on how to mis-calculate this one 😉 E.g. if we sum up all VmSwap entries from /proc/*/status or Swap entries from /proc/*/smaps — we will get an overestimate (shared swapped pages could get counted more than once). If we don’t run it from root user or our OS — the underestimate will be silently returned. I don’t have a proper way of identifying shared pages, but splashing of same ‘maps’ gives much better approximation than other approaches: (note that cat below is not useless and actually needs a 2>/dev/null )

[root@a:~]# cat /proc/*/status|awk ' /^VmSwap/< s+=$2 >END' 32048 [root@a:~]# cat /proc/*/smaps|awk ' /^Swap/< s+=$2 >END' 32048 [root@a:~]# cat /proc/*/smaps|awk '/-//^Swap/END' 14940 [root@a:~]# free -k|grep -e Swap -e used total used free shared buffers cached Swap: 8388600 15508 8373092 

SwapCached – this one is straightforward and can be cleanly extracted from /proc/meminfo . Some people wouldn’t expect this to be counted as «used» swap, since a duplicate (non-dirty) copy of same page in both RAM and Swap can be freed on either side quite instantly (in case if demand comes) thus making one of the copies «freed».

Читайте также:  Схема локальной сети linux

Part_of_Tmpfs – the bright side is that when all Your tmpfs data is many-days-untouched and swappiness is non-zero — it’s quite likely that entire tmpfs is swapped-out (and vice-versa for recently-used data). The downside is I’ve found no API to reliably calculate the threshold or percentage of how much of it IS swapped, though if there’s enough RAM — we can copy entire tmpfs data into /dev/null and thus get some clue of how much of it WAS swapped.

Common mistakes made during calculation of tmpfs size are — assuming that /dev/shm is the only tmpfs configured or trying to do it by recursive per-file scanning (not only implementations tend to omit hidden files or do it from non- root , but it also un-swaps some pages during traversing). Much easier way is to use good old df .

something_else – see the » diff 385 MB » below, needs a dive into kernel sources. See my script:

#!/bin/bash TMPFS=`df -kP |awk ' /^tmpfs/< s+=$3 >END'` PROCS=`cat /proc/*/smaps|awk '/-/ /^Swap/END'` SCACH=`cat /proc/meminfo|awk ' /^SwapCached/ '` TOTAL=`free -k |awk ' /^Swap/ '` echo -e " df $TMPFS\t smaps $PROCS \tSwapCache $SCACH\t| $TOTAL\tswap | diff $[TOTAL-TMPFS-PROCS-SCACH]\tMB" 

and the output from different boxes:

xa002: df 0 smaps 271 SwapCache 3858 | 4120 swap | diff -9 MB sg003: df 0 smaps 234 SwapCache 3876 | 4111 swap | diff 1 MB sg001: df 0 smaps 245 SwapCache 3845 | 4093 swap | diff 3 MB sg002: df 0 smaps 244 SwapCache 3843 | 4091 swap | diff 4 MB dm001: df 2 smaps 971 SwapCache 728 | 1707 swap | diff 6 MB hm012: df 270 smaps 161 SwapCache 29 | 454 swap | diff -6 MB hm003: df 274 smaps 142 SwapCache 27 | 440 swap | diff -3 MB hm006: df 262 smaps 150 SwapCache 29 | 437 swap | diff -4 MB hm002: df 265 smaps 120 SwapCache 28 | 412 swap | diff -1 MB hm009: df 258 smaps 124 SwapCache 33 | 410 swap | diff -5 MB hm011: df 262 smaps 118 SwapCache 28 | 406 swap | diff -2 MB hm008: df 245 smaps 122 SwapCache 32 | 396 swap | diff -3 MB hm005: df 247 smaps 120 SwapCache 33 | 396 swap | diff -4 MB dp001: df 0 smaps 0 SwapCache 0 | 386 swap | diff 386 MB hm014: df 184 smaps 134 SwapCache 34 | 343 swap | diff -9 MB hm007: df 0 smaps 132 SwapCache 32 | 158 swap | diff -6 MB bm002: df 0 smaps 121 SwapCache 25 | 141 swap | diff -5 MB dm002: df 2 smaps 70 SwapCache 71 | 139 swap | diff -4 MB bm001: df 3 smaps 102 SwapCache 28 | 131 swap | diff -2 MB bm004: df 0 smaps 98 SwapCache 29 | 126 swap | diff -1 MB hm013: df 0 smaps 100 SwapCache 30 | 124 swap | diff -6 MB bm006: df 0 smaps 103 SwapCache 15 | 122 swap | diff 4 MB hm010: df 0 smaps 102 SwapCache 24 | 122 swap | diff -4 MB hm001: df 0 smaps 101 SwapCache 25 | 121 swap | diff -5 MB bm003: df 0 smaps 98 SwapCache 15 | 107 swap | diff -6 MB bm005: df 0 smaps 70 SwapCache 17 | 85 swap | diff -2 MB sg004: df 0 smaps 72 SwapCache 14 | 83 swap | diff -3 MB sg001: df 0 smaps 41 SwapCache 33 | 78 swap | diff 4 MB sg005: df 0 smaps 59 SwapCache 20 | 75 swap | diff -4 MB sg003: df 0 smaps 58 SwapCache 18 | 72 swap | diff -4 MB sg006: df 0 smaps 56 SwapCache 13 | 65 swap | diff -4 MB sg002: df 0 smaps 54 SwapCache 12 | 64 swap | diff -2 MB xa001: df 0 smaps 56 SwapCache 5 | 55 swap | diff -6 MB 

And a small experiment as the bonus:

[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs' Filesystem Size Used Avail Use% Mounted on tmpfs 12G 271M 12G 3% /dev/shm tmpfs 8.0G 84K 8.0G 1% /tmp [root@hm012:~]# ./get_swap.sh df 270 smaps 161 SwapCache 29 | 454 swap | diff -6 MB [root@hm012:~]# rm -rf /dev/shm/* [root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs' Filesystem Size Used Avail Use% Mounted on tmpfs 12G 0 12G 0% /dev/shm tmpfs 8.0G 84K 8.0G 1% /tmp [root@hm012:~]# ./get_swap.sh df 0 smaps 161 SwapCache 29 | 185 swap | diff -5 MB 

P.S. aside from the approximation mentioned above — there are other sources of error, like rounding of KB into MB, theoretical possibility of a mismatch between block-sizes of RAM and Swap, etc. I’m not sure it covers everything, but hoping this helps to some extent 🙂

Читайте также:  Установка wine astra linux common edition

Источник

Как в linux узнать какой именно процесс попал в swap

Кто то кушает swap и не хочет из него вылазить при появлении свободной памяти, решается все swapoff -a, но хотелось бы узнать какой именно процесс в данный момент был перемещен в swap.

в top:
жмем f — появляется настройка колонок для вывода
жмем p — включаем колонку со свопом.

в htop:
жмем f2, идем в columns, два раза в право, выбираем nswap и жмем f5

uranik

Использовать колонку nswap в TOP для обнаружения процессов, которые уже ушли в swap не совсем корректно. Подробнее можно почитать здесь. Там же приводят простой скрипт на баше, с помощью которого можно легко получить список всех процессов, которые едят ваш swap.

Это нормальное поведение. Линукс лучше вас знает, что должно быть в памяти, а что может валяться в свопе. Верьте ему.

То есть когда свободно 10 гигов памяти свободно, а в свопе лежит 600 мегабайт какого то процесса и съедает 100% io диска это нормально?

nochkin

Вся память съедена, ребутаю апача и мускула, памяти свободной 10 гигов, в свопе осталось 600 мегабайт и они активно съедают весь io диска.

Нашел замечательный скрипт !

#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to «sort -nk3» to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo

SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex «^/proc/5+»`
do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm —no-headers`
for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk ‘< print $2 >‘`
do
let SUM=$SUM+$SWAP
done
if (( $SUM > 0 )); then
echo «PID=$PID swapped $SUM KB ($PROGNAME)»
fi
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo «Overall swap used: $OVERALL KB»

Читайте также:  Монтирование дисков linux uuid

Войдите, чтобы написать ответ

Безопасен ли линукс для хранения файлов?

Источник

Как узнать, что забивает swap?

Экранный снимок htop

Обычно раздел подкачки пустой и заполняется лишь при работе с очень большими графическими файлами. Но уже второй день творится какой-то непорядок. Можно решить проблему выходом и повторным входом в учётную запись, но мне интересно узнать, что именно забивает swap. Как это узнать? Кроме браузеров, NetBeans, аудио, видео и виртуальной машины ничего не запускал. Ничего особенного не делал — все как всегда. Раньше я по две недели не выходил из системы и все было хорошо.

3 ответа 3

Найдено где-то на просторах и немного допилено под свою среду. Возможно, придётся допиливать тоже, главное — понять принцип:

#!/bin/sh for dir in $(find /proc/ -maxdepth 1 -type d |grep -E "5+"); do pid=$(echo $dir |cut -d/ -f3) cmd=$(ps h -o comm -p $pid) swap=$(grep VmSwap $dir/status 2> /dev/null |awk '') if [ ! -z $swap ] && [ $swap -ne 0 ]; then echo "pid: $pid command: $cmd swap: $swap KB" fi done | sort -rnk6 | column -t 

Можно запустить top и нажать f — отобразится список параметров, которые он (top) может выводить. Выбери отображение SWAP — и ты увидишь какие процессы сколько данных там держат. А отсортировать по этой колонке можно нажав F.

#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/6"` ; 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" 

Хочу ответить откуда взялась проблема с swap-space. Это мог бы быть этот баг http://osdir.com/ml/ubuntu-bugs/2016-03/msg00360.html , но у меня версия 14.04, так что это не мой случай.

xuser@mh:~$ df -h Файл.система Размер Использовано Дост Использовано% Cмонтировано в udev 3,9G 4,0K 3,9G 1% /dev tmpfs 799M 1,3M 798M 1% /run /dev/sda2 54G 12G 39G 23% / none 4,0K 0 4,0K 0% /sys/fs/cgroup tmpfs 1,0G 183M 842M 18% /tmp none 5,0M 0 5,0M 0% /run/lock none 3,9G 1,4M 3,9G 1% /run/shm none 100M 20K 100M 1% /run/user tmpfs 1,5G 291M 1,2G 20% /home/xuser/.cache tmpfs 512M 199M 314M 39% /home/xuser/.mozilla tmpfs 5,0G 0 5,0G 0% /home/xuser/torTmp /dev/sdb1 230G 108G 111G 50% /media/xuser/9bd1fae0-bcb9-4677-9f1a-28ac7079dccc xuser@mh:~$ 

Я запускал виртуальную машину и забыл очистить папку

а она у меня предназначена для торрентов и образа виртуальной машины.

писало ошибку о том что не может распределить память.

Я потом и догадался что нужно глянуть что же у меня в системе с памятью происходит. Конец истории :).

Источник

Оцените статью
Adblock
detector