Построение и запуск образа системы ARM с помощью QEMU?

У меня недавно была та же проблема, и я создал ее для быстрой очистки свопа:

#Single-proc function to core-dump swapped ranges > 1M to /dev/null
unswap(){ (awk -F'[ \t-]+' '/^[a-f0-9]*-[a-f0-9]* /{recent="0x"$1" 0x"$2}/Swap:/&&$2>1000{print recent}' /proc/$1/smaps | while read astart aend; do gdb --batch --pid $1 -ex "dump memory /dev/null $astart $aend" &>/dev/null; done&)2>/dev/null;};

#Loop to run unswap on the top 20 swap-consuming processes
grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n20 | cut -d/ -f3 | while read line; do unswap $line; done;

#Observe the number of core dumps currently running, along with free swap, over time. 
echo "Dumps Free(m)"; rcount=10; while [[ $rcount -gt 0 ]]; do rcount=$(ps fauxww | grep "dump memory" | grep -v grep | wc -l); echo "$rcount        $(free -m | awk '/Swap/{print $4}')"; sleep 1; done 

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

1. Получите список процессов, которые потребляют больше всего свопа.

В моем случае я проверяю/proc/$ pid/status, используя своп в строке VmSwap.

# grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n5
/proc/22457/status:VmSwap:      3780 kB
/proc/22684/status:VmSwap:      4260 kB
/proc/7408/status:VmSwap:       4396 kB
/proc/31992/status:VmSwap:      9176 kB
/proc/2967/status:VmSwap:      60840 kB

2. Для процессов высокой замены я нахожу диапазоны адресов памяти, которые способствуют наибольшему использованию замены.

Я получаю это от/proc/$ pid/smaps:

7f2fd1bc4000-7f2fd1d24000 rw-p 00000000 00:00 0 <<< Address range
Size:               1408 kB
Rss:                 900 kB
Pss:                 900 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       900 kB
Referenced:            4 kB
Anonymous:           900 kB
AnonHugePages:         0 kB
Swap:                508 kB    << Swap used
KernelPageSize:        4 kB
MMUPageSize:           4 kB

3. Я использую gdb для выполнения дампов ядра этих диапазонов адресов прямо в/dev/null

Это заставляет систему получить доступ к этой памяти и извлечь ее из подкачки. Переход к/dev/null позволяет избежать ненужных операций ввода-вывода.

gdb --batch --pid $pid -ex "dump memory /dev/null $astart $aend"

Процесс, о котором я упоминал, первоначально пропускает любые области памяти, использующие менее 1M подкачки, чтобы получить большую часть подкачки со значительно меньшим количеством дампов ядра, но это не является обязательным.

-121--111509-

Попробуйте ввести шрифты по следующему пути:

/usr/share/pear/Image/Canvas/Fonts
-121--251345-

Создайте сценарий оболочки MultiRun , который принимает первый параметр в качестве команды и запускает его с оставшимися параметрами по одному.

./ MultiRun Скручивание A B C D

Сценарий должен принимать завиток в качестве команды и выполнять команды «скручивание A», «скручивание B», «скручивание C», «скручивание D». Теперь, поскольку ваш сценарий находится в управлении, вы можете решить, завершит ли сбой в какой-либо одной команде сценарий или продолжите переход к следующему параметру или дождитесь ввода пользователем. Можно даже принять решение о статусе выхода всего сценария, основываясь на выполнении отдельных команд.

Сценарий MultiRun может быть примерно таким:

#! /bin/bash
COMMAND=$1
shift #### Remove COMMAND from existing Parameters
for PARAMETER in "$@" ; #### Process all remaining Parameters
do
  # echo Executing "$COMMAND $PARAMETER" now #### Uncomment this line to see what command is getting executed.
  $COMMAND $PARAMETER
  # Check exit status and take action or wait for user input , if required.
  # read -p "finished executing command. press enter to continue. waiting..." #### Uncomment this line to pause between commands.
done
# Depending on the individual exit statuses , choose your exit status N with "exit $N".

Теперь выполните следующее:
./MultiRun echo 1 2 3 4
получить выход «эхо 1», «эхо 2», «эхо 3», «эхо 4» следующим образом:
1
2
3
4

Это очень гибкое и многоразовое решение.

1
20.09.2018, 11:22
1 ответ

Как показал Сэм в комментариях, решением была проверка/сброс $PAGERпеременной.

0
28.01.2020, 00:27

Теги

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