sudo su
sysctl -w vm.swappiness=10
Я создал тестовый сценарий, в котором я могу воспроизвести эту ошибку 10/10 раз. Это просто создание большего образа напрямую через командную строку, а не через CI.
Как уже упоминалось, обходной путь, который я знал, был
echo 1 > /proc/sys/vm/drop_caches
, поэтому я попытался сопоставить его со значениями DirectMap
. Поскольку я узнал, что эти значения представляют нагрузку TLB и не могут быть настроены напрямую, я просмотрел значение предпочтения, чтобы использовать их, и это swappiness.
Документы RHLE 7 объясняют swappiness:
swappiness
Значение swappiness в диапазоне от 0 до 100 определяет степень что система отдает предпочтение анонимной памяти или кэшу страниц. Высота значение улучшает производительность файловой системы при агрессивной подкачке менее активные процессы вне оперативной памяти. Низкое значение позволяет избежать замены процессов из памяти, что обычно уменьшает задержку за счет производительности ввода-вывода. Значение по умолчанию равно 60.
ПРЕДУПРЕЖДЕНИЕ
Установка swappiness==0 очень агрессивно избегает выгрузки, что > увеличивает риск уничтожения OOM при большой нагрузке на память и ввод-вывод.
Таким образом, его уменьшение снижает зависимость от страниц кэша памяти. По умолчанию изображения EC2 Centos 7, которые мы используем, установили его на 30, поэтому, уменьшив его до 10, большой образ был успешно создан 10/10 раз.
Я обнаружил, что проблема связана с коммутатором TCP, и обнаружил, что сервер резервного копирования был перестроен, и они не связывали порты, поэтому для всех соединений nfs по умолчанию использовался UDP, как MOUNTD поднял заблокированный порт. Если вы не привяжете порты при перезагрузке машины, это изменит порт для следующих компонентов nfs.
Для привязки портов;
Раскомментируйте или добавьте эти строки в / etc / sysconfig / nfs с портами, которые вы хотите использовать:
- RQUOTAD_PORT = 875
- LOCKD_TCPPORT = 32803
- LOCKD_UDPPORT = 32769
- MOUNTD_PORT = 892
- STATD_PORT = 662
не забудьте перезапустить службу nfs.