Shell-скрипт для периодического освобождения некоторой памяти с Ubuntu 18.10 LiveCD с всего 4 ГБ ОЗУ. Требуется улучшение

Да, вы можете запустить Whonix (или, если на то пошло, любой другой дистрибутив Linux) внутри виртуальной машины, например VirtualBox .

0
14.12.2018, 14:34
2 ответа

Решение, которое "fra -san" дал здесь в комментариях, идеально подошло. Используя пакет «cgroup -tools», я смог успешно ограничить использование памяти Chrome. Я протестировал его, открывая десятки вкладок одновременно, и увидел ограничение памяти в действии. Однако мне пришлось оставить свой скрипт работающим, поскольку, хотя я в основном использую Chrome, системный кеш также потребляет много оперативной памяти.

Мои шаги:

1 -Использован этот сценарий из:Ограничение использования памяти для одного процесса Linux

#!/bin/sh

# This script uses commands from the cgroup-tools package. The cgroup-tools commands access the cgroup filesystem directly which is against the (new-ish) kernel's requirement that cgroups are managed by a single entity (which usually will be systemd). Additionally there is a v2 cgroup api in development which will probably replace the existing api at some point. So expect this script to break in the future. The correct way forward would be to use systemd's apis to create the cgroups, but afaik systemd currently (feb 2018) only exposes dbus apis for which there are no command line tools yet, and I didn't feel like writing those.

# strict mode: error if commands fail or if unset variables are used
set -eu

if [ "$#" -lt 2 ]
then
    echo Usage: `basename $0` "<limit> <command>..."
    echo or: `basename $0` "<memlimit> -s <swaplimit> <command>..."
    exit 1
fi

cgname="limitmem_$$"

# parse command line args and find limits

limit="$1"
swaplimit="$limit"
shift

if [ "$1" = "-s" ]
then
    shift
    swaplimit="$1"
    shift
fi

if [ "$1" = -- ]
then
    shift
fi

if [ "$limit" = "$swaplimit" ]
then
    memsw=0
    echo "limiting memory to $limit (cgroup $cgname) for command $@" >&2
else
    memsw=1
    echo "limiting memory to $limit and total virtual memory to $swaplimit (cgroup $cgname) for command $@" >&2
fi

# create cgroup
sudo cgcreate -g "memory:$cgname"
sudo cgset -r memory.limit_in_bytes="$limit" "$cgname"
bytes_limit=`cgget -g "memory:$cgname" | grep memory.limit_in_bytes | cut -d\  -f2`

# try also limiting swap usage, but this fails if the system has no swap
if sudo cgset -r memory.memsw.limit_in_bytes="$swaplimit" "$cgname"
then
    bytes_swap_limit=`cgget -g "memory:$cgname" | grep memory.memsw.limit_in_bytes | cut -d\  -f2`
else
    echo "failed to limit swap"
    memsw=0
fi

2 -Назвал его как "limitmem" и скопировал в /usr/bin/, чтобы я мог вызвать его из терминала просто с помощью limitmem. Теперь я могу открыть процесс, ограничивающий использование памяти, например, до 800 МБ, используя этот синтаксис:limitmem 800M command

В моем случае:limitmem 1000M google-chrome --password-store=basic --aggressive-cache-discard --aggressive-tab-discard

0
28.01.2020, 04:08

Вы спросили, делаете ли вы это наиболее эффективным способом. Я использовал ноутбук очень похожим образом.Что я заметил за 3 года использования LiveUSB:

  1. Старайтесь не использовать apt-get installдля установки пакетов; вместо этого используйте sudo dpkg -i. Кажется, это снижает «общую» память. (измененные системные файлы, занимающие больше памяти на RAM-диске ).
  2. Вам не нужно убивать все дерево процессов Chromium; вы можете убить только «левые -более» закрытые вкладки, которые он оставляет (обычно называемые --type=rendererпроцессами ). Вы делаете это, запустив :
    ps aux | grep type=renderer
    kill -9 $(ps aux | grep type=renderer)
    
    Вы можете назначить сочетание клавиш для запуска скрипта, содержащего команду kill. Таким образом, вам не нужно перезагружать весь браузер; вы только нажимаете всплывающее окно с уведомлением, чтобы перезагрузить расширения. Накладные расходы памяти после этого остаются очень низкими по любой причине.
  3. Раньше я использовал команду clean cache/buffersмного раз в день, но со временем заметил, что мне нужно обращать внимание только на «Доступную» память, а не на «Свободную». Моя система остается работоспособной только со свободными 100 МБ. Меня должно беспокоить только то, что Доступно меньше 300 МБ; затем обычно нажатие горячей клавиши kill Chromium решает проблему.

    Хотел бы я знать, есть ли способ чтобы каждый раз запускать команду "kill Chromium" Доступная память достигает определенного нижнего предела.

Примечание. :Я экспериментировал с процедурами Zram/Zswap, но это не помогло; казалось, что это только приводит к более частым зависаниям системы, что приводит к частым перезагрузкам (большему износу уже старого жесткого диска, чем меньше вы перезагружаете или приостанавливаете работу, тем лучше ).

0
07.05.2020, 22:56

Теги

Похожие вопросы