NodeJS Обработка большого количества соединений CLOSE_WAIT TCP и уничтожение из-за недостатка памяти - PullRequest
0 голосов
/ 18 марта 2020

Я использую Nginx в качестве обратного прокси с Nodejs за обратным прокси, но в настоящее время у меня возникла проблема. В какой-то момент использование оперативной памяти процесса Nodejs резко увеличивается, а также общее количество используемых файлов дескрипторов. Когда я отображаю использованные, у меня много CLOSE_WAIT.

Возвращение lsof | grep 'node':

node 9945 9946 root 104u IPv6 3419932363 0t0 TCP localhost:3000->localhost:44834 (CLOSE_WAIT)
node 9945 9946 root 105u IPv6 3419932370 0t0 TCP localhost:3000->localhost:44836 (CLOSE_WAIT)
node 9945 9946 root 106u IPv6 3419932374 0t0 TCP localhost:3000->localhost:44838 (CLOSE_WAIT)
node 9945 9946 root 107u IPv6 3419932379 0t0 TCP localhost:3000->localhost:44840 (CLOSE_WAIT)
node 9945 9946 root 108u IPv6 3419932396 0t0 TCP localhost:3000->localhost:44852 (CLOSE_WAIT)
node 9945 9946 root 109u IPv6 3419932401 0t0 TCP localhost:3000->localhost:44854 (CLOSE_WAIT)
node 9945 9946 root 110u IPv6 3419932405 0t0 TCP localhost:3000->localhost:44856 (CLOSE_WAIT)
node 9945 9946 root 111u IPv6 3419932410 0t0 TCP localhost:3000->localhost:44858 (CLOSE_WAIT)

Другой журнал, показывающий распределение файловых дескрипторов по процессам:

 18/03/2020 04:37:09 fd=138059 fdNode=73442 fd3000=10016 cbPid=24374 cbFd=19 cbFd2=33 cbCpu=3.4 cbRam=37.5 cbRss=1518032
Monitor Error Detected => 18/03/2020 04:37:09 ram=37.5 fd_limit=0
pid= 9945 with18863 fds: PM2 v3.5.1: God => fullCmd=PM2 v3.5.1: God Daemon (/root/.pm2)
pid=23496 with 243 fds: nginx => fullCmd=nginx: worker process
pid=    1 with  73 fds: systemd => fullCmd=/lib/systemd/systemd--system--deserialize35
pid= 6241 with  72 fds: nginx => fullCmd=nginx: worker process
pid= 6262 with  32 fds: systemd-journal => fullCmd=/lib/systemd/systemd-journald
pid= 1924 with  25 fds: systemd => fullCmd=/lib/systemd/systemd--user
pid=  900 with  19 fds: lxcfs => fullCmd=/usr/bin/lxcfs/var/lib/lxcfs/
pid=24374 with  18 fds: node /opt/zebri => fullCmd=node **/server.js
pid=  906 with  17 fds: systemd-logind => fullCmd=/lib/systemd/systemd-logind
pid= 6169 with  14 fds: systemd-udevd => fullCmd=/lib/systemd/systemd-udevd

где

  • fd => lsof | wc -l
  • fdNode => lsof | grep "node" | wc -l
  • fd3000 => lsof -i:3000 | wc -l
  • cbFd => ls /proc/$PID_OF_THE_NODE_PROCESS/fd | wc -l
  • cbFd2 => lsof -a -p $PID_OF_THE_NODE_PROCESS | wc -l

Для HTTP-запросов, поступающих в процесс, существует только один GET, который вызывается каждые 15 секунд всеми устройства на нем, которые позволяют только проверить, что процесс активен.

В конце запускается механизм OOM killer.

 Out of memory: Kill process 6572 (node /**/server.js) score 190 or sacrifice child

Я не понимаю проблему, так как Это происходит случайно, поэтому я прошу вашей помощи, если вы уже сталкивались с этой проблемой.

Заранее спасибо

...