2016-10-02 3 views
1

Я использую пакет forever для запуска моего сценария Node.js. (а не веб-сервер). Тем не менее, из-за этого, у меня есть утечка памяти и даже после остановки всех процессов, моя память еще берутся:Узел утечки памяти на сервере nnet на сервере

[email protected]:~# forever stopall 
info: No forever processes running 
[email protected]:~# forever list 
info: No forever processes running 
[email protected]:~# free -lm 
      total  used  free  shared buffers  cached 
Mem:   11721  6900  4821   5  188  1242 
Low:   11721  6900  4821 
High:   0   0   0 
-/+ buffers/cache:  5469  6252 
Swap:   0   0   0 

Также говоря, нет никакой утечки памяти из сценария, когда бежал на место без навсегда. Я запускаю его на сервере Ubuntu. И если бы я перезагружать сервер в настоящее время:

[email protected]:~# reboot 

Broadcast message from [email protected] 
     (/dev/pts/0) at 3:19 ... 

The system is going down for reboot NOW! 

Моя RAM будет снова свободен:

[email protected]:~# free -lm 
      total  used  free  shared buffers  cached 
Mem:   11721  1259  10462   5   64  288 
Low:   11721  1259  10462 
High:   0   0   0 
-/+ buffers/cache:  905  10816 
Swap:   0   0   0 

Я также хочу отметить, что, когда мой сценарий заканчивает то, что он делает (и это делает в конце концов) У меня есть db.close и process.exit звонки, чтобы убедиться, что все убито со стороны моего скрипта. Однако даже после того, как оперативная память отнимается. Теперь я знаю, что навсегда снова запустит этот сценарий после его убийства. So мои вопросы таковы:

  • Как я могу навсегда навсегда не выполнить сценарий, если он закончен?
  • Как мне остановить вечно, чтобы он не принимал ОЗУ после того, как я его остановил?

Причина, по которой я использую пакет forever для этого, заключается в том, что моему сценарию требуется много времени, чтобы выполнить то, что он делает, и мой сеанс SSH завершится, и так будет выполняться сценарий Node, который я запускал обычным способом.

+0

Вы можете, как использовать '' top' и команду htop', чтобы увидеть, где используется оперативная память и центральный процессор, а затем вы можете убить этот процесс –

+0

@ArifKhan Однако я не хочу, чтобы убить процессы вручную. Я ищу способ для пакета 'forever', чтобы убить то, что он больше не использует. – Kunok

ответ

1

Из того, что я вижу, оперативная память не удаляется или не протекает, она используется Linux в качестве кеша файловой системы (поскольку неиспользуемая RAM - это потерянное ОЗУ).

Из 6900 мегабайт «использованной» ОЗУ в качестве буферного кеша используется 5469. Linux автоматически уменьшит эту сумму, когда процессы запросят память.

Если вы хотите, затянувшийся процесс продолжает работать после выхода (или после того, как ваш SSH сессии погибает), у вас есть различные варианты, которые не требуют forever:

  • Фоновые процесс , убедившись в том, что любые «Выход» сигналы игнорируются:

    $ nohup node script.js & 
    
  • Используйте терминальный мультиплексор, как tmux или screen.

Смежные вопросы