Назад | Перейти на главную страницу

AWS EC2 Amazon Linux использует подкачку, даже если не должен

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

Факты:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 434948  83616  73468 818316  580    0   580     0  883 1453  5  1 93  1  0
 2  0 429060  65308  73468 818320 17760    0 17760    76 5927 6318 15 21 52 12  1
 0  3 440660  81180  73464 817208 4352 12880  4352 12880 5791 2672  8 39  0 52  0
 1  1 443164  78080  73452 816304 10104 3272 10104  3272 3850 3807  7 34  0 58  1
 1  1 438456  63944  73460 816356 13168  156 13216   212 3673 3686 12 34 21 32  0
 1  1 449472  72748  73460 815872 1600 11016  1600 11016 3815 1445  1 23  0 74  1
 0  4 453592  59728  73460 815964 3324 8748  4080  8752 4891 2881 10 34  1 54  0
 1  2 462724  68380  73456 815152 1704 10412  1704 10412 5381 2195  7 35  1 55  0
 0  2 473444  81148  73456 815108 1024 10976  1024 10976 4637 1608  2 34  2 63  1
 0  1 483124  87432  73444 818604 2352 9684  6136  9684 4526 1800  8 28  8 54  1
 0  1 480308  66860  73452 824476 13656    0 19536    36 3982 4103 11 27 39 22  0
 0  3 483744  75016  73448 825132 5016 7532  5860  7532 5645 4748 14 33  6 47  0
 2  2 493140  80348  73448 825068 1888 10164  1888 10164 4128 1993  2 34  0 62  0
 1  0 497544  78488  73440 824976 6248 6452  6364  6452 4192 2916  3 39 16 41  1
 0  1 494216  65096  73440 825068 12488    0 12616     0 4070 4620  7 26 42 24  1
 0  2 503856  69436  73452 824760 1968 10152  1968 10192 4885 1821  4 28  2 65  0
 1  0 514264  88532  73440 824188 1332 10668  1332 10672 4749 1622  2 25  1 71  0
 0  1 512984  76628  73440 824120 12844    0 12844     0 3653 3517  6 26 48 20  0
 1  3 479192  65220  73440 824556 12484    0 12832     0 3729 4821  6 29 34 31  0
 0  5 462680  78612  73440 824824 6120 6784  6532  6784 4111 3582  5 45  0 49  1
 0  2 433376  99148  73448 824992 5884 7560  6024  7596 3954 3407  3 33  1 62  0

Выход cat /proc/meminfo на 2 одинаковых (один с, другой без свопа) стоит

с отключенным SWAP:

MemTotal:        2004488 kB
MemFree:          178976 kB
MemAvailable:     489360 kB
Buffers:          136892 kB
Cached:           290396 kB
SwapCached:            0 kB
Active:          1063520 kB
Inactive:         612900 kB
Active(anon):     817380 kB
Inactive(anon):   436892 kB
Active(file):     246140 kB
Inactive(file):   176008 kB
Unevictable:       17620 kB
Mlocked:           17620 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                20 kB
Writeback:             0 kB
AnonPages:       1262220 kB
Mapped:           140336 kB
Shmem:               252 kB
Slab:              73448 kB
SReclaimable:      39612 kB
SUnreclaim:        33836 kB
KernelStack:        6944 kB
PageTables:        15300 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1002244 kB
Committed_AS:    3076324 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      182248 kB
DirectMap2M:     1875968 kB
DirectMap1G:           0 kB

и с включенным SWAP:

MemTotal:        2004488 kB
MemFree:          116220 kB
MemAvailable:     925764 kB
Buffers:           73472 kB
Cached:           827312 kB
SwapCached:       136268 kB
Active:           653736 kB
Inactive:        1041616 kB
Active(anon):     375736 kB
Inactive(anon):   424652 kB
Active(file):     278000 kB
Inactive(file):   616964 kB
Unevictable:       17620 kB
Mlocked:           17620 kB
SwapTotal:       1499132 kB
SwapFree:        1061032 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:        749004 kB
Mapped:           180880 kB
Shmem:               252 kB
Slab:             118940 kB
SReclaimable:      92304 kB
SUnreclaim:        26636 kB
KernelStack:        6784 kB
PageTables:        14212 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2501376 kB
Committed_AS:    2881136 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      110568 kB
DirectMap2M:     1947648 kB
DirectMap1G:           0 kB

Что пробовал:

Чего я ожидаю:

Почему это происходит? Что мне не хватает? Что мне делать иначе? К сожалению, AFAIK невозможно использовать Instance Store (и поставить SWAP на этот том) с t2/t3 Банкомат.

В настоящий момент мои машины работают с выключенным SWAP, и им это нравится; только я немного волнуюсь. (Редактировать:) Моя главная цель - убедить систему касаться SWAP только в крайнем случае.

Другие мои простые машины EC2 Ubuntu ведут себя так, как должны.

в моем воображении с моими настройками SWAP должен оставаться все время свободным, за исключением некоторых неудачных случаев, когда общее использование памяти превысит доступную память

Состояние нехватки памяти слишком поздно. Восстановление путем разбиения на страницы происходит очень медленно, и Linux VMM пытается держаться подальше от OOM.

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

Чтобы узнать, какая документация есть по алгоритмам, просмотрите MM wiki, статьи LWN и некоторые ссылки на UNIX Stack Exchange: Какие алгоритмы замены страниц используются в ядре Linux для кеширования файлов ОС?


На вашем хосте общая выделенная (Committed_AS) составляет около 3 ГБ, а MemTotalсоставляет 2 ГБ. 150% не обязательно плохо, некоторые из них неактивны или не используются. Но Linux выйдет на страницу там, где это возможно, потому что в худшем консервативном случае все не поместится в RAM. Размер безопасной памяти будет меньше Committed_AS, но сколько меньше, немного сложно определить количественно.

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