У меня 16G RAM и 8G раздел подкачки. Я использую Unity 17.04. У меня проблема, когда мой buff/cache
уходит на 11M, а мой swap used
уходит примерно на 3500. Раньше я почти никогда не использовал пространство подкачки, и я никогда не следил за баффом/кешем.
Я думаю, что это приложение с утечкой памяти, но я могу ошибаться.
Простой вопрос. Есть ли простой способ определить, использует ли приложение/процесс swap?
решение1
Узнать, сколько специального процесса использует раздел подкачки, можно с помощью этой команды:
cat /proc/"PID"/status | grep "^VmSwap"
А найти можно PID
с помощью этой команды:
ps -A | grep "Application_name"
Но если вы хотите узнать, какие процессы используют раздел подкачки, вы можете воспользоваться этим скриптом:
#!/bin/bash
for i in /proc/*/status ; do
vmswap=$(cat $i | grep "^VmSwap")
echo "$vmswap" | grep -qv ' 0 kB'
if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
echo "$i : $vmswap"
fi
done
Затем вы можете узнать имя приложения по его PID, который возвращает скрипт.
Обновлять: Я изменил этот скрипт так, чтобы он создавал файл журнала каждые 10 секунд (вы можете изменить время), и в этом файле вы можете увидеть множество процессов с момента запуска этого скрипта до настоящего момента:
#!/bin/bash
counter=1
touch ~/swap_process_usage.log
while true ; do
echo -e "************************************\nSwap's process in count $counter " >> ~/swap_process_usage.log
for i in /proc/*/status ; do
vmswap=$(cat $i | grep "^VmSwap")
echo "$vmswap" | grep -qv ' 0 kB'
if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
pid=$(echo "$i" | tr -d /proc/ | tr -d status)
proc_name=$(ps -p $pid -o comm=)
echo "$proc_name : $pid : $vmswap" >> ~/swap_process_usage.log
fi
done
sleep 10s
counter=$((counter+1))
done
И вы можете настроить этот скрипт на запускзапускатьпоэтому он каждый раз создает журнал.