Исчерпывающий список REASONS, почему хост/сервер может быть отключен (nmap --reason)

mapped_ratio

mapped_ratio можно рассчитать следующим образом:

mapped ratio = (nr mapped * 100) / total memory;

Источник: https://www.cs.columbia.edu/~smb/classes/s06-4118/l19.pdf

nr_mapped

Значение nr_mapped можно прочитать из / proc / vmstat :

$ grep nr_mapped /proc/vmstat
nr_mapped 47640

distress

Согласно этой статье, озаглавленной: Память Linux - Замечания по реализации

«Это измерение того, насколько трудно виртуальной машине восстановить страницы. Каждый раз, когда виртуальная машина пытается освободить память, она сканирует 1 / n-ю неактивных списков в каждой зоне, пытаясь освободить страницы. Каждый раз, когда выполняется переход по списку, если количество неактивных чистых + свободных страниц в этой зоне не превышает нижнюю отметку, n уменьшается на единицу. Бедствие измеряется как 100 >> n » 5

При изучении большей части документации звучит так, будто" бедствие "- это счетчик ядра, но это не так. Скорее, это значение, которое используется при сканировании каждой зоны памяти, которое постепенно увеличивается по мере того, как страничные кадры памяти сканируются ядром в попытке восстановить их. Обсуждение этого выходит за рамки этого Q&A, но если вам интересно, раздел книги «Понимание ядра Linux», Глава 17: Восстановление фрейма страницы . Значение «бедствие» происходит от значения «prev_priority» при сканировании зон.

Ссылки

1
14.02.2019, 21:39
2 ответа

Я решил эту проблему с помощью небольшого приложения на Rust под названием escalator . Он использует исполняемый бит suidдля выполнения от имени пользователя root, затем setuidи setgid, чтобы действительно стать пользователем root перед выполнением того, что ему передается, заменяя себя дочерним процессом.

2
27.01.2020, 23:30

Если у вас есть контроль над командной строкой docker run, вы можете передать ей параметр --user(, например --user=0:0), вместо использования sudoв команде ENTRYPOINT.

В этом случае вы можете использовать ENTRYPOINT, установленный на /usr/lib/systemd/systemd --system --unit=multi-user.target, который будет запускать systemd как PID 1, сохраняя при этом настройку USER, которая будет действовать в ваших командах docker exec.

См. вместо USER в справочном руководстве docker run.

И наоборот, если у вас нет контроля над командной строкой docker run, вы можете попытаться передать --userкомандам docker exec, оставив пользователя root в определении контейнера. Это имеет некоторые недостатки, такие как тот факт, что вы должны передавать эту опцию всем вызовам, и вам нужно выяснить, какой пользователь :группа (или uid :gid )для передачи (root легко, всегда 0 :0.)

1
27.01.2020, 23:30

Теги

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