SSH и -bash: fork: невозможно выделить память Ubuntu, rails, Passenger, redis, sidekiq
Я запускаю приложение rails (dev server) с пассажиром в Amazon AWS с экземпляром t2.micro. Но я получаю -bash: fork: Cannot allocate memory
ошибка постоянно.
Я использую сервер redis на нем с параллелизмом 50 sidekiq. Обычно сайты работают нормально, но когда я запускаю 2-3 процесса sidekiq одновременно, делаю какой-то пакетный процесс. Сайт займет время, чтобы перенаправить и в конечном итоге сбой с
502 Bad Gateway
nginx/1.10.0
Затем мне нужно перезагрузить nginx, чтобы сайт снова заработал. Это мой dev-сервер, поэтому я не хочу тратить больше финансовых ресурсов на обновление до t2.small (на данный момент это наш последний вариант), так как это dev servre, и я буду использовать его дважды за 15 дней. Есть ли способ, которым я могу решить это иначе? Раньше у меня был тот же 120 параллелизм, что и на производстве, но потом я изменил на 50. Это немного помогает, но все еще проблемы с памятью.
вот немного статистики с htop
Эта статистика в то время как сервер простаивает. Но когда я запускаю несколько задач с sidekiq, он падает с 502.
Я проверяю несколько постов, предлагающих обмен памяти, но не уверен, что это предпочтительнее с t2.micro. Это целесообразно для настройки этого сервера. Здесь на картинке видно, что я не меняю память. Это нормально, вы можете добавить подкачку памяти для решения этой проблемы или есть какой-то другой лучший вариант.
1 ответ
У вашего сервера недостаточно памяти, чтобы исправить это:
или: купить больше оперативной памяти
или: смонтировать своп
Тогда попробуйте еще раз
В моем случае, redis использовал 2.5G памяти, на сервере всего 4.5G, и используется 3G. 1.5G бесплатно.
и Redis продолжал бросать эту ошибку.
решение:
- добавлять
vm.overcommit_memory=1
в файл:/etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
обратитесь к: redis bgsave не удалось, поскольку fork не может выделить память