Чтобы защитить процессы systemd от завершения в Ubuntu (или любой системе на базе systemd), включая ваш VPS, можно использовать несколько методов для управления ограничениями на уровень памяти и поведения "оживления" процессов.
Вот шаги, которые могут помочь вам настроить систему так, чтобы процессы, критически важные для работы, оставались запущенными:
### 1. Настройка `oom_score_adj` для ваших процессов
Вы можете изменить `oom_score_adj` для ваших пользовательских процессов, чтобы указать, что их следует завершать в первую очередь в случае нехватки памяти. Это можно сделать в конфигурации службы, если ваши процессы работают как системные службы.
Например, если у вас есть служба для `php`:
```ini
[Service]
OOMScoreAdjust=-1000
```
Это значение уменьшит вероятность завершения данной службы в случае нехватки памяти.
### 2. Установка `MemoryLimit` для пользовательских процессов
Вы можете задать максимально допустимый объём памяти для ваших пользовательских процессов с помощью `MemoryLimit` в конфигурационных файлах `systemd`.
Пример:
```ini
[Service]
MemoryLimit=500M
```
В этом случае, если процесс превышает указанный лимит, он будет завершён, но системные служби с более высоким приоритетом не будут затронуты.
### 3. Создание файла конфигурации cgroup
Вы можете использовать cgroups для управления приоритетом памяти. Создайте новый cgroup и задайте ему ограничения:
```bash
sudo cgcreate -g memory:/mygroup
echo 500M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
```
Добавьте процессы в вашу группу, используя `cgclassify` или путём задания в конфигурациях systemd.
### 4. Изменение настроек systemd
Для улучшения защиты процессов, вы можете использовать параметры `ProtectSystem`, `ProtectHome`, и другие, чтобы существенно ограничить доступ к важным системным функциям и файловой системе, если это необходимо.
### 5. Рассмотрение параметров системы
Убедитесь, что у вас правильная конфигурация для `swap`. Если памяти недостаточно, система может выполнить свопирование, что может помочь предотвратить завершение процессов.
### 6. Мониторинг и автоматизация
Используйте средства мониторинга, например, `monit` или `systemd` таймеры, чтобы следить за использованием памяти и сообщать вам, когда память недостаточна, чтобы вы могли предпринять превентивные меры.
### Рекомендации по тестированию
После внесения изменений важно протестировать их в безопасной среде или на тестовом VPS, чтобы убедиться, что система работает так, как вы ожидаете.
Эти шаги помогут защитить системные процессы от завершения и управлять пользовательскими процессами более эффективно при недостатке памяти.