Затянуть существующие правила брандмауэльда

Судя по вашему комментарию, система просто меняет местами.

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

Поскольку для параметра overcommit_memory установлено значение 0 (автоматический режим), ядро ​​выполняет переопределение памяти.Итак, из вашего объясненного поведения, похоже, что система просто сильно меняет местами.

Отсюда есть 2 варианта.

Уменьшить своп

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

Ваша первоначальная идея - убить процесс вручную.

Вы можете вручную убить процесс, если считаете, что система слишком много меняет местами и что-то должно умереть. Это можно сделать с помощью триггеров ядра SysRq.

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

Если в вашем ядре включен волшебный SysRq (параметр ядра CONFIG_MAGIC_SYSRQ ), вы можете сделать это двумя способами.

  1. Alt + SysRq + f
    Просто нажмите эти 3 клавиши на клавиатуре.
  2. echo f> / proc / sysrq-trigger
    Это будет выполнять ту же задачу, что и метод клавиатуры, но выполняет это программно.

Вы также можете полностью отключить своп, и это то, что я делаю в большинстве своих систем, и именно по этой причине. Своп выгоден тем, что ядро ​​будет вытеснять данные, которые не используются, позволяя использовать большую часть вашей оперативной памяти для кэширования. Но это приводит к этой проблеме с принудительной заменой, которую вы видите.

Лично я считаю, что лучшим решением является какая-то опция ядра, вызывающая убийцу OOM при принудительной подкачке. В основном пусть работает вытесняющий своп, но если ядро ​​вынуждено переместить что-то в своп из-за нехватки оперативной памяти, то вызовите OOM killer.
К сожалению, это всего лишь мое личное желание. Он этого не делает.

0
23.01.2019, 23:20
2 ответа

Вместо того, чтобы возиться с сложными для понимания правилами, вы можете создать новую зону firewalld. Зона определяется либо сетевыми интерфейсами, либо исходными адресами. В этом случае вы определите его только с исходными адресами:

firewall-cmd --new-zone=smtp
firewall-cmd --zone=smtp --add-source=192.0.2.85
firewall-cmd --zone=smtp --add-service=smtp

firewall-cmd --zone=net1 --remove-service=smtp

firewall-cmd --runtime-to-permanent

Таким образом, входящие соединения с SMTP будут ограничены только исходящими с адреса 192.0.2.85. Вы также можете легко добавить или удалить IP-адреса позже, если это необходимо, гораздо проще, чем с расширенными правилами.

2
28.01.2020, 02:41

Нашел. Мне нужно было использовать «расширенные правила»:

firewall-cmd --remove-service=smtp
firewall-cmd --add-rich-rule='rule family="ipv4" source address="x.x.x.x" service name="smtp" accept'
0
28.01.2020, 02:41

Теги

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