неуправляемое обновление вызывает зависание и завершение работы моего экземпляра EC2

Вопрос или проблема

Я запускаю сервис в контейнере Docker на экземпляре t4g.nano (с 512 МБ ОЗУ). Мои сервисы обычно используют около 65% памяти, и, как правило, они работают нормально, однако время от времени я замечаю всплески использования памяти и процессора. Проверяя через journalctl, я вижу следующее:

23 сен 06:31:10 ip-xxxxx kernel: Состояние задач (значения памяти в страницах):
23 сен 06:31:10 ip-xxxxx kernel: [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj имя
23 сен 06:31:10 ip-xxxxx kernel: [    150]     0   150    12106      928   102400        0          -250 systemd-journal
23 сен 06:31:10 ip-xxxxx kernel: [    190]     0   190    72415     6464   114688        0         -1000 multipathd
23 сен 06:31:10 ip-xxxxx kernel: [    193]     0   193     2736      956    65536        0         -1000 systemd-udevd
23 сен 06:31:10 ip-xxxxx kernel: [    351]   100   351     4102      832    81920        0             0 systemd-network
23 сен 06:31:10 ip-xxxxx kernel: [    353]   101   353     6307     1616    94208        0             0 systemd-resolve
23 сен 06:31:10 ip-xxxxx kernel: [    397]     0   397      557      384    40960        0             0 acpid
23 сен 06:31:10 ip-xxxxx kernel: [    402]     0   402     1727      480    57344        0             0 cron
23 сен 06:31:10 ip-xxxxx kernel: [    403]   102   403     2214      832    69632        0          -900 dbus-daemon
23 сен 06:31:10 ip-xxxxx kernel: [    410]     0   410    20520      640    61440        0             0 irqbalance
23 сен 06:31:10 ip-xxxxx kernel: [    411]     0   411     8238     2816   114688        0             0 networkd-dispat
23 сен 06:31:10 ip-xxxxx kernel: [    413]   104   413    55505      992    90112        0             0 rsyslogd
23 сен 06:31:10 ip-xxxxx kernel: [    414]     0   414   457784     2090   200704        0             0 amazon-ssm-agen
23 сен 06:31:10 ip-xxxxx kernel: [    417]     0   417   348223     3230   262144        0          -900 snapd
23 сен 06:31:10 ip-xxxxx kernel: [    418]     0   418     3889      800    77824        0             0 systemd-logind
23 сен 06:31:10 ip-xxxxx kernel: [    448]     0   448   446710     3840   262144        0          -999 containerd
23 сен 06:31:10 ip-xxxxx kernel: [    454]     0   454     1408      448    49152        0             0 agetty
23 сен 06:31:10 ip-xxxxx kernel: [    457]     0   457     1397      352    49152        0             0 agetty
23 сен 06:31:10 ip-xxxxx kernel: [    481]   115   481     5072     1426    73728        0             0 pgbouncer
23 сен 06:31:10 ip-xxxxx kernel: [    567]   114   567     4654      579    61440        0             0 chronyd
23 сен 06:31:10 ip-xxxxx kernel: [    585]   114   585     2557      427    61440        0             0 chronyd
23 сен 06:31:10 ip-xxxxx kernel: [    636]     0   636    27483     2688   122880        0             0 unattended-upgr
23 сен 06:31:10 ip-xxxxx kernel: [    676]     0   676    58833     1006    98304        0             0 polkitd
23 сен 06:31:10 ip-xxxxx kernel: [    772]     0   772   489411     6641   348160        0          -500 dockerd
23 сен 06:31:10 ip-xxxxx kernel: [    807]     0   807     3785     1024    73728        0         -1000 sshd
23 сен 06:31:10 ip-xxxxx kernel: [    978]     0   978   309497      862   118784        0          -998 containerd-shim
23 сен 06:31:10 ip-xxxxx kernel: [    998] 65534   998   308899     1608   122880        0             0 pgbouncer_expor
23 сен 06:31:10 ip-xxxxx kernel: [   1753]     0  1753    74364     1408   176128        0             0 packagekitd
23 сен 06:31:10 ip-xxxxx kernel: [   3689]     0  3689      576      352    45056        0             0 apt.systemd.dai
23 сен 06:31:10 ip-xxxxx kernel: [   3693]     0  3693      576      352    45056        0             0 apt.systemd.dai
23 сен 06:31:10 ip-xxxxx kernel: [   3721]     0  3721    85333    15613   458752        0             0 unattended-upgr
23 сен 06:31:10 ip-xxxxx kernel: [   3913]     0  3913   102053    31125   479232        0             0 unattended-upgr
23 сен 06:31:10 ip-xxxxx kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=init.scope,mems_allowed=0,global_oom,task_memcg=/system.slice/apt-daily>
23 сен 06:31:10 ip-xxxxx kernel: Нет памяти: Процесс 3913 (unattended-upgr) убит, total-vm:408212kB, anon-rss:121788kB, file-rss:2712kB, shmem-rss:0kB, UID:0 p>
23 сен 06:31:10 ip-xxxxx systemd[1]: apt-daily-upgrade.service: Процесс этого юнита был убит OOM-убийцей.
23 сен 06:31:10 ip-xxxxx systemd[1]: apt-daily-upgrade.service: Главный процесс завершил работу, код=killed, статус=15/TERM
23 сен 06:31:10 ip-xxxxx systemd[1]: apt-daily-upgrade.service: Не удалось завершить с результатом 'oom-kill'

Это не всегда приводит к тому, что экземпляр перестает отвечать, но такое может случиться. Это также иногда может привести к завершению экземпляра и его замене (я использую группу автоматического масштабирования), что плохо для нашего сценария использования.
PS: Пожалуйста, не судите меня слишком строго, я относительно новичок в Linux и управлении серверами.

Ответ или решение

Проблема, с которой вы столкнулись, связана с исчерпанием памяти на вашем экземпляре EC2 (t4g.nano), что приводит к вызову механизма OOM (Out of Memory) и, в некоторых случаях, к аварийной остановке или замене экземпляра в Auto Scaling Group.

Причины проблемы

  1. Недостаток ресурсов: t4g.nano имеет всего 512 МБ ОЗУ, что крайне ограничено для работы нескольких сервисов в контейнерах Docker, особенно если их использование памяти иногда достигает 65%. Ваша система может не справляться с пиковыми нагрузками.

  2. Служба unattended-upgrades: Из вывода journalctl видно, что процесс unattended-upgr (автоматические обновления) потребляет значительное количество памяти (up to 121788kB). Когда система сталкивается с нехваткой памяти, OOM Killer завершает этот процесс, чтобы попытаться освободить ресурсы.

  3. Автоматическое масштабирование: Поскольку ваш экземпляр находится в Auto Scaling Group, его автоматическое восстановление может быть связано с срабатыванием ограничений по ресурсам, что приводит к его замене.

Решения

1. Оптимизация использования ресурсов

  • Проверьте контейнеры Docker: Убедитесь, что контейнеры ограничены в использовании памяти. Вы можете задать ограничения на использование памяти для контейнеров Docker, используя параметры --memory и --memory-swap. Например:
    docker run --memory=256m --memory-swap=256m your_image
  • Мониторинг пиков: Используйте инструменты мониторинга, чтобы отслеживать использование ресурсов в реальном времени и идентифицировать контейнеры или процессы, которые могут потреблять слишком много памяти.

2. Настройка службы автоматических обновлений

  • Отключение unattended-upgrades: Если автоматическое обновление не критично для вашей среды, рассмотрите возможность его отключения:
    sudo systemctl disable unattended-upgrades
  • Настройка графика обновлений: Если вы хотите оставить автоматические обновления, рассмотрите возможность настройки времени их выполнения на менее пиковые часы.

3. Увеличение ресурсов экземпляра

  • Переход на более мощный экземпляр: Рассмотрите возможность использования экземпляра с большим объемом памяти, например, t4g.micro (1 ГБ ОЗУ) или более мощного экземпляра. Это обеспечит необходимый запас памяти для работы ваших приложений и устранит проблемы с исчерпанием памяти.

4. Настройка параметров Auto Scaling

  • Конфигурация политики замещения: Если ваши задачи не требуют постоянных обновлений, вы можете настроить параметры Auto Scaling, чтобы уменьшить частоту замены экземпляров или увеличить время отклика на сбои.

5. Исследование документации и обучение

  • Так как вы упомянули, что вы относительно новичок в управлении серверами, рекомендую изучить базовые концепции работы с Linux, Docker и AWS. Это поможет вам лучше понимать и управлять своей инфраструктурой.

Таким образом, подходя к этой проблеме комплексно, вы сможете стабилизировать работу вашего экземпляра EC2 и минимизировать риск непредвиденных остановок и замены экземпляров.

Оцените материал
Добавить комментарий

Капча загружается...