2016-10-02 12 views
1

Node.jsスクリプトを実行するのにforeverパッケージを使用しています。 (Webサーバーではありません)。しかし、それのために、私はメモリリークを持ち、さらにはすべてのプロセスを停止した後、私の記憶がまだ取られている:永遠にせずにローカルで実行したときにノードの永久(npmパッケージ)メモリリーク

[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]:~# 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 

は、私もそれを言及したいと思います(と、それは最終的にはありません):

[email protected]:~# reboot 

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

The system is going down for reboot NOW! 

私のRAMは再び自由のようになります。そして、私は今、サーバーを再起動するかどう私はdb.closeprocess.exitを持っており、すべてがスクリプトの側から殺されていることを確認しています。しかし、それ以降もRAMは取り除かれます。今、私は永遠にそれが殺された後にスクリプトを実行することに気付いています。だから私の質問は次のとおりです。

  • 終了したらもう一度スクリプトを実行しないように永遠に教えてください。
  • 私はそれを停止した後にRAMを使用しないように、永久に正しく停止するにはどうすればよいですか?

私はこのスクリプトを永久に使用しているのは、スクリプトの実行に時間がかかり、SSHセッションが終了するため、通常の方法で実行したNodeスクリプトだからです。

+0

あなたはしかし、私は本当に手動のプロセスを殺すためにしたくないあなたのRAMとCPUが利用場所を確認した後、あなたがそのプロセス –

+0

@ArifKhanを殺すかもしれ 'top'と' htop'コマンドを使用したいことがあります。私はパッケージが永遠にそれを使用しないものを殺すための方法を探しています。 – Kunok

答えて

1

私の見ているところでは、RAMは取り除かれず、Linuxでファイルシステムキャッシュとして使用されています(使用されていないRAMはRAMを浪費しているためです)。

6900メガの「使用済み」RAMから、5469がバッファキャッシュとして使用されます。プロセスがメモリを要求すると、Linuxは自動的にこの量を減らします。

あなたがログアウト(またはあなたのSSHセッションが殺された後)の後に実行し続けるために、長時間実行プロセスが必要な場合は、foreverを必要としない様々なオプションがあります。

  • 背景プロセス、任意の「ログアウト」の信号を無視していることを確認すること:

    $ nohup node script.js & 
    
  • tmuxまたはscreenのようなターミナルマルチプレクサを使用してください。