Утечка памяти в приложении api express.js - PullRequest
0 голосов
/ 17 сентября 2018

Я запускаю приложение express.js, которое используется в качестве REST API.Одна конечная точка запускает кукловода и тестирует мой веб-сайт с помощью нескольких процедур.

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

Memory usage of this app

Сначала я подумал, что у меня утечка памяти в моем кукловоде / безголовом хроме, но затем я контролировал использование памяти процессами, нет и памятиУтечка видна, как вы можете видеть здесь:

     0.00 Mb COMMAND 
   384.67 Mb /var/express/node_modules/puppeteer/.local
   157.41 Mb node /var/express/bin/www 
   101.76 Mb node /usr/local/bin/pm2
     4.34 Mb /var/express/node_modules/puppeteer/.local
     1.06 Mb ps 
     0.65 Mb bash 
     0.65 Mb bash 
     0.31 Mb cut 
     0.31 Mb cut 
     0.13 Mb dumb

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

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

У меня проблема решена. Это было вызвано базовой системой Kubernetes, которая не была настроена с ограничением ресурсов для этого конкретного контейнера. Следовательно, контейнер может использовать столько памяти, сколько возможно.

Теперь я ограничился 2 ГБ, и это выглядит так: enter image description here

0 голосов
/ 17 сентября 2018

Проанализируйте проблему подробнее

Вам необходимо отслеживать действия в режиме реального времени.

У нас нет кода, поэтому мы даже не можем знать, что происходит.Однако вы можете использовать более продвинутый инструмент, такой как htop , gtop , netdata и другие, чем top или ps.

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

pm2 logs

Каждый вызов API обойдется вам

Рассчитайте стоимость заранее и подготовьтесь соответственно,

  • Если у вас 1 вызов, будьте готовы к тому, чтобы каждый раз иметь 100 МБ-1 ГБ или более.Это будет стоить вам как вкладка браузера.Стоимость будет там, пока открыта вкладка.
  • Если целевой сайт тяжелый, то он будет стоить дороже.Некоторые сайты, такие как Youtube, очевидно, будут стоить вам дороже.
  • Любой скрипт, работающий на вкладке браузера, будет стоить процессора и использования памяти.
  • Скажем, каждый процесс вызывает ОЗУ 300 МБ, если вы не закрываетепроцесс правильно и начать делать вызовы API, тогда только 10 вызовов API смогут довольно легко использовать оперативную память 3 ГБ.Он может сложиться довольно быстро.

Убедитесь, что закрыты вкладки

Независимо от того, успешно ли выполнена задача автоматизации, убедитесь, что правильно используете browser.close(), чтобы обеспечить ее ресурсиспользует получает бесплатно.Большую часть времени мы забываем о таких мелких вещах, и это стоит нам.

Применить dumb init на докер, чтобы избежать призрачного процесса

Что-то вроде dumb-init или tini может использоваться, если у вас есть процесс, который порождает новые процессы, и у вас не реализованы хорошие обработчики сигналов для перехвата дочерних сигналов и остановки вашего ребенка, если ваш процесс должен быть остановлен и т. д.

Подробнеена этот ТАК ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...