LINUX.ORG.RU

Сообщения hakavlad

 

times2log 0.1.0 — монитор процессорного времени

Группа Open Source

Состоялся первый выпуск проекта times2log, предназначенного для мониторинга и логирования процессорного времени, используемого выбранным процессом. Код открыт под лицензией CC0 (общественное достояние).

times2log представляет из себя Python скрипт, периодически проверяющий /proc/[PID]/stat указанного процесса для учета utime и stime.

times2log выводит (и опционально логирует в указанный файл) пользовательское и системное время процесса за указанный интервал времени (2 секунды по умолчанию).

Перед началом мониторинга выполняется mlockall() для бесперебойной работы процесса в условиях нехватки памяти.

Пример вывода:

$ times2log -p `pidof kswapd0`
Process memory locked with MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT
PID: 93, Name: kswapd0, interval: 2s, SC_CLK_TCK: 100
============================================================
       user    |      system    |        total    | interval
-------------- | -------------- | --------------- | --------
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |  161 t,  80.4% |   161 t,  80.4% | 2.0s
   0 t,   0.0% |  199 t,  99.4% |   199 t,  99.4% | 2.0s
   0 t,   0.0% |  197 t,  98.4% |   197 t,  98.4% | 2.0s
   0 t,   0.0% |  198 t,  98.9% |   198 t,  98.9% | 2.0s
   0 t,   0.0% |  150 t,  74.9% |   150 t,  74.9% | 2.0s
   0 t,   0.0% |  157 t,  78.4% |   157 t,  78.4% | 2.0s
   0 t,   0.0% |  197 t,  98.4% |   197 t,  98.4% | 2.0s
   0 t,   0.0% |   29 t,  14.5% |    29 t,  14.5% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
   0 t,   0.0% |    0 t,   0.0% |     0 t,   0.0% | 2.0s
^C--
Times for the last 32.2s:
  user:   0 ticks (0.0s), avg: 0.0%
  system: 1288 ticks (12.9s), avg: 40.0%
  total:  1288 ticks (12.9s), avg: 40.0%

Учет времени ведется в тиках и в процентах от пройденного интервала времени. При завершении работы (после получения сигнала SIGINT, SIGTERM, SIGQUIT или SIGHUP) times2log выводит итоговую статистику за все время мониторинга.

>>> Подробности

 

hakavlad
()

cache-bench 0.2.0 — инструмент для исследования эффективности кэширования файлов

Группа Open Source

Спустя 7 месяцев после предыдущего релиза состоялся релиз cache-bench 0.2.0.

cache-bench — это Python-скрипт, позволяющий оценить влияние настроек виртуальной памяти (vm.swappiness, vm.watermark_scale_factor, Multigenerational LRU Framework и прочих) на производительность выполнения задач, требующих кэширования файловых операций чтения, особенно в условиях нехватки памяти. Код передан в публичное достояние (CC0).

Код скрипта в версии 0.2.0 почти полностью переписан. Теперь вместо чтения файлов из указанной директории (в новой версии опция -d удалена) производится чтение из одного файла фрагментами указанного размера в случайном порядке.

Добавлены опции:

  • --file – путь к файлу, из которого будет производиться чтение;
  • --chunk – размер фрагмента в кибибайтах, по умолчанию 64;
  • --mmap – читать из memory-mapped файлового объекта вместо чтения из файлового дескриптора;
  • --preread – перед началом теста предварительно прочитать (кэшировать) указанный файл путем последовательного чтения фрагментами размером 1 МиБ;
  • --bloat – добавлять считываемые фрагменты в список с целью увеличения потребления памяти процессом и создания в дальнейшем нехватки памяти;
  • --interval – интервал вывода (логирования) результатов в секундах.

Примеры использования можете найти на странице проекта.

>>> Подробности

 , ,

hakavlad
()

Выпуск r-test v0.1.0 — инструмента для исследования эффективности кэширования файлов при нехватке памяти

Группа Open Source

r-test - это Python скрипт, позволяющий оценить влияние настроек виртуальной памяти (vm.swappiness, vm.watermark_scale_factor, Multigenerational LRU Framework и прочих) на производительность выполнения задач, выполнение которых зависит от кэширования файловых операций в условиях нехватки памяти. Код открыт под лицензией CC0.

Основной способ использования - считывание файлов из указанной директории в случайном порядке и их добавление в список, пока не будет считано заданное число мебибайт.

Имеет два режима работы. Первый - вспомогательный - служит для создания директории заданного объема. При этом в директории создается заданное число мебибайтных файлов со случайными именами.

Второй режим - основной - режим чтения файлов из указанной директории в случайном порядке. Во время чтения растет объем потребляемой скриптом памяти, а скорость считывания заданного объема файлов зависит от объема кэшированных файловых страниц.

Частью проекта также является вспомогательных скрипт drop-cache, который рекомендуется выполнять перед началом теста.

В процессе работы скрипта в режиме чтения выводится общее время работы, средняя скорость чтения, имя последнего считанного файла.

Скрипт также позволяет логировать результаты в файл. Пример лога:

2021-05-30 21:47:56,084: mkdir testdir1
2021-05-30 21:47:56,211: written testdir1/0.9860985015646311; total size: 1M
2021-05-30 21:47:56,289: written testdir1/0.0691916965192153; total size: 2M
2021-05-30 21:47:56,377: written testdir1/0.27868153831296383; total size: 3M
2021-05-30 21:47:56,455: written testdir1/0.7341114648416274; total size: 4M
2021-05-30 21:47:56,533: written testdir1/0.5363495159203434; total size: 5M
2021-05-30 21:47:56,533: OK
2021-05-30 21:48:23,193: found 5 regular files in testdir1, total size: 5.0M
2021-05-30 21:48:23,199: setting self oom_score_adj=1000
2021-05-30 21:48:23,199: reading files from the directory testdir1
2021-05-30 21:48:23,229: read 1.0M (20.0%) in 0.0s (avg 32.9M/s); file 0.7341114648416274
2021-05-30 21:48:23,296: read 2.0M (40.0%) in 0.1s (avg 20.8M/s); file 0.0691916965192153
2021-05-30 21:48:23,298: read 3.0M (60.0%) in 0.1s (avg 30.3M/s); file 0.0691916965192153
2021-05-30 21:48:23,299: read 4.0M (80.0%) in 0.1s (avg 40.1M/s); file 0.7341114648416274
2021-05-30 21:48:23,352: read 5.0M (100.0%) in 0.2s (avg 32.6M/s); file 0.27868153831296383
2021-05-30 21:48:23,353: --
2021-05-30 21:48:23,353: read 5.0M in 0.2s (avg 32.6M/s); src: 5 files, 5.0M
2021-05-30 21:48:23,354: OK

>>> Подробности

 , ,

hakavlad
()

Второй релиз юзерспейсного OOM киллера oomd 0.2.0

Группа Open Source

Второй релиз юзерспейсного OOM киллера oomd 0.2.0, лицензированного под GPL-2.0 и написанного на C++.

Релиз 0.2.0 включает в себя множество обновлений и перестановок файлов, чтобы упростить пакет oomd для дистрибутивов Linux: https://github.com/facebookincubator/oomd/releases/tag/v0.2.0

RPM для только что выпущенного oomd v0.2.0 доступны в этом репозитории COPR: https://copr.fedorainfracloud.org/coprs/filbranden/oomd/

oomd ориентирован на высоконагруженные сервера и для работы требует поддержки PSI и cgroup2.

>>> Подробности

 ,

hakavlad
()

low-memory-monitor: анонс нового юзерспейсного обработчика нехватки памяти

Группа Open Source

Bastien Nocera анонсировал новый обработчик нехватки памяти для рабочего стола Gnome. Написан на C. Лицензирован под GPL3. Для работы демона необходимо ядро 5.2 или новее. Демон проверяет дефицит памяти через /proc/pressure/memory и при превышении порога отправляет через dbus предложение процессам о необходимости умерить аппетиты. Также демон может пытаться сохранить отзывчивость системы через запись в /proc/sysrq-trigger.

Страница проекта

Обсуждение на r/linux

Анонс в блоге автора

>>> Подробности

 low-memory-monitor, , , ,

hakavlad
()

Выпуск earlyoom 1.3, процесса для раннего реагирования на нехватку памяти

Группа Open Source

После семи месяцев разработки опубликован выпуск фонового процесса earlyoom 1.3, который периодически проверяет объем доступной памяти (MemAvailable, SwapFree) и пытается на ранней стадии отреагировать на возникновения нехватки памяти.

Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGTERM или SIGKILL) завершит работу процесса, наиболее активно потребляющего память (имеющего самое большое значение /proc/*/oom_score), не доводя состояние системы до очистки системных буферов и мешающего работе своппинга (обработчик OOM (Out Of Memory) в ядре срабатывает когда состояние нехватки памяти уже достигло критичных значений и обычно к этому моменту система уже не реагирует на действия пользователя).

Earlyoom поддерживает отправку уведомлений о принудительно завершённых процессах на рабочий стол (с помощью notify-send), а также предоставляет возможность определения правил, в которых при помощи регулярных выражений можно задать имена процессов, завершение которых предпочтительно (опция "--prefer") или остановки которых стоит избегать (опция "--avoid").

Основные изменения в новом выпуске:

  • Реализовано ожидание завершения процесса после отправки ему сигнала. Это устраняет проблему, заключающуюся в том, что earlyoom иногда убивает более одного процесса, когда одного будет достаточно;
  • Добавлен вспомогательный скрипт (notify_all_users.py) для уведомления всех залогиненых пользователей о завершении процессов через уведомления notify-send;
  • Исправлено некорректное отображение некоторых имен процессов, содержащих UTF-8 символы;
  • Принят кодекс поведения (Contributor Covenant Code of Conduct).

>>> Подробности

 , ,

hakavlad
()

Первый релиз юзерспейсного OOM-киллера - oomd 0.1.0

Группа Open Source

Разработка Facebook нацелена на более оперативное и выборочное завершение работы процессов, потребляющих слишком много памяти, на стадии до срабатывания OOM-обработчика ядра Linux. Код oomd написан на языке C++ и поставляется под лицензией GPLv2. Oomd уже используется в инфраструктуре Facebook и хорошо зарекомендовал себя при промышленных нагрузках (в частности, проект позволил почти полностью избавиться от возникновения на серверах длительных livelock-блокировок). Подробнее о работе oomd: https://facebookmicrosites.github.io/oomd/

>>> Подробности

 , ,

hakavlad
()

Выпуск Nohang v0.1 - демона, предотвращающего OOM в пространстве пользователя

Выпуск Nohang v0.1 - демона, предотвращающего OOM в пространстве пользователя
Группа Open Source

Nohang - это демон для GNU/Linux, обрабатывающий ситуации нехватки памяти и предотвращающий OOM. Код открыт под лицензией MIT. Написан на Python, потребляет около 10 MiB VmRSS и настраивается с помощью редактирования конфига, расположенного по адресу /etc/nohang/nohang.conf. По сравнению с аналогичным проектом earlyoom, nohang обладает некоторыми дополнительными возможностями.

Основные особенности:

  • настраиваемая интенсивность мониторинга: если на сервере не предполагаются резкие перепады потребления памяти, то можно снизить нагрузку на процессор, снизив интенсивность мониторинга;
  • при нехватке памяти nohang сначала отправляет SIGTERM процессу с наибольшим oom_score. При дальнейшем падении уровня доступной памяти и отсутствии реакции на SIGTERM процесс с наибольшим oom_score получает SIGKIL. Уровни доступной памяти, при достижении которых должны происходить корректирующие действия, могут задаваться в процентах и в MiB;
  • возможность GUI уведомлений о результатах завершения процессов (реализовано с помощью notify-send);
  • возможность GUI уведомлений о низком уровне доступной памяти: настраиваемость уровня памяти, при котором отправляются уведомления, и минимальная периодичность уведомлений (по умолчанию уведомления отключены; уровни памяти для отправки: одновременное снижение уровней SwapFree и MemAvailable до 20%; минимальный период между отправками уведомлений - 20 секунд). В уведомлениях отображается уровень доступной памяти, а также Pid и Name процесса с наибольшим badness;
  • поддержка zram - mem_used_total в качестве триггера (может быть актуально для систем с большим disksize и низкой степенью сжатия сохраняемых в zram данных);
  • предохранение от убийства невинных жертв: задержки после отправки сигналов (по умолчанию 0.5 секунд для SIGTERM и 3 секунды для SIGKILL) предотвращают возможное массовое убийство процессов, так как память при завершении процессов может освобождаться не сразу; возможность игнорировать процессы, имеющие badness ниже заданного;
  • возможность модификации badness процессов перед выбором жертвы через сопоставление имён процессов с заданным в конфиге регулярным выражением;
  • возможна настройка запуска произвольной команды (например, sendmail или systemctl restart) вместо отправки сигнала SIGTERM жертве, если имя процесса-жертвы совпадает с заданным в конфиге именем.

>>> Подробности

 , ,

hakavlad
()

Выпуск earlyoom 1.2

Группа Open Source

После трёх месяцев разработки опубликован выпуск фонового процесса earlyoom 1.2, который периодически проверяет объем доступной памяти (MemAvailable, SwapFree) и пытается на ранней стадии отреагировать на возникновения нехватки памяти.

( читать дальше... )

>>> Подробности

 , ,

hakavlad
()

Выпуск earlyoom 1.1

Группа Open Source

Спустя пять месяцев после предыдущего релиза вышел earlyoom 1.1. Earlyoom - демон, периодически (10 раз в секунду) проверяющий объем доступной памяти (MemAvailable, SwapFree) и, если доступной памяти окажется меньше заданного объема, то процессу с максимальным oom_score будет отправлен сигнал SIGKILL для предотвращения Out of memory. Earlyoom поддерживает отправку десктопных уведомлений об убитых процессах (с помощью notify-send), а также возможность задать с помощью regex имена процессов, убийство которых предпочтительно (опция --prefer) или убийства которых стоит избегать (опция --avoid).

Основные изменения:

  • Исправлена возможная инъекция shell-кода через всплывающие уведомления.
  • Время сна после неудачи убийства процесса снижено с 10 до 1 секунды.
  • Всплывающие уведомления теперь отправляются после убийства процесса, а не перед.
  • Поддержка --help в дополнение к -h.
  • Исправлена проблема неверного отображения имен процессов во всплывающих уведомлениях.
  • Исправлено возможное деление на ноль при использовании опции -S.

>>> Подробности

 , ,

hakavlad
()

RSS подписка на новые темы