Недавно у меня возникла проблема, когда из-за мошеннического процесса у некоторых экземпляров ec2 не хватало памяти и происходил сбой. Вероятно, это не должно было быть проблемой, за исключением того, что я использовал экземпляры t2.small, которые довольно ограничены памятью, и у них закончилась память, прежде чем кто-то мог ответить на наши предупреждения мониторинга.
Очевидно, что лучше по возможности избегать использования подкачки, но если бы я включил подкачку, мои экземпляры, вероятно, остались бы в сети, хотя и с ухудшенной производительностью.
Учитывая, что на жестком диске обычно много места, кажется хорошей идеей включить подкачку, даже если это требуется только в исключительных обстоятельствах.
По умолчанию OpsWorks разрешает обмен только для микро-экземпляров, а не для малых экземпляров. Почему они были так консервативны при включении свопа, есть ли причина, по которой я могу не включать своп, если он мне не нужен для нормальной работы?
У вас закончилась физическая память или у вас закончились резервные хранилища? В последнем случае своп позволил бы вашей системе продолжать нормально работать даже без записи в нее каких-либо данных!
«[Я] есть ли причина, по которой я мог бы не захотеть включать своп, если он мне не нужен для нормальной работы?»
Да. Наличие подкачки необходимо для того, чтобы ОС эффективно использовала физическую оперативную память.
Например, предположим, что процесс создает частное, доступное для записи отображение файла размером 256 МБ. Если подкачки нет, ОС должна зарезервировать 256 МБ физической ОЗУ для этого сопоставления, даже если ни одна из этих ОЗУ никогда не понадобится, потому что сопоставление никогда не изменяется на случай, если процесс решит изменить каждый байт этого сопоставления.
По сути, без подкачки каждая чистая доступная для записи страница, не поддерживаемая файлом, означает одну страницу физической ОЗУ, которая не может содержать измененные данные, даже если эти страницы остаются удаляемыми в течение всего срока службы.
Вы действительно хотите, чтобы своп был доступен, даже если он вам не нужен.
Я думаю, дело в том, что вам нужно знать, какая память ваш процесс будет нуждаться. Если вы используете EC2, это означает, что вы выбрали размер инстанса, который покроет некоторую рабочую нагрузку; часто я видел, что рабочая нагрузка - это только один процесс / служба. Добавление кучи свопа обходится недорого, но вам нужно знать, когда и почему он использует этот своп. Слишком часто я вижу здесь ответы, в которых говорится: «Добавить подкачку на случай, если некоторые неактивные процессы съедают немного ОЗУ», что имеет смысл для настольного компьютера, но на вашем экземпляре EC2 вы должны знать рабочие характеристики вашего процесса (ов) - это особенно актуально, когда вы: повторная разработка приложения - узнайте, как оно обычно работает, отключив подкачку во время разработки, затем добавьте подкачку и увеличьте подкачку до высокого значения (90+) в процессе производства.
С другой стороны, в серверной среде и особенно в облаке, где вы можете адаптировать свой экземпляр к своей рабочей нагрузке, вы действительно хотите, чтобы процесс подкачивался? Это нормально для производительности? Вы не станете счастливым туристом, когда получите на один размер меньше, чем на 2 ГБ ОЗУ, на котором выполняется процесс, которому для комфортной работы требовалось 3 ГБ для комфортной непрерывной перестановки страниц на диск.
YMMV, но для интерактивных рабочих нагрузок мой опыт показывает, что если вы когда-нибудь начнете использовать файл подкачки, общая производительность системы все равно остановится, и это обычно вызвано каким-то неконтролируемым процессом, поэтому я бы предпочел, чтобы эта программа вылетела (из-за нехватки памяти), чем убить производительность всех остальных моих программ. Итак, я настроил свою домашнюю общую семейную машину без файла подкачки и с множеством дополнительной оперативной памяти. Жалобы жены на плохую работу значительно снизились. Когда позже в прошлом году я добавил SSD, все стало еще лучше.