在 nodejs 手動 garbage collection 的方法

前陣子因為在 Heroku 上面跑的 nodejs 程式開始不斷出現記憶體使用超量的訊息:
R14 - Memory Quota Exceeded ,加錢升 dyno (Heroku 上的 instance) 也不見好轉,只好想看看有沒有什麼方法可以改善,後來作法是手動執行 garbage collection,記憶體使用量就掉下去了 …

cdnjs 的 api / web server 為例,沒做 gc 的話大概要吃 410 MB 的記憶體,一模一樣的程式,有做 gc 的話只要吃 230 MB的記憶體,相差甚大,其中原由大概只能等高手指教或是等很閒的時候才有空追了 …

作法滿簡單的,執行 nodejs 的時候加上 --expose-gc 的參數,並且在你想要執行 garbage collection 的地方加入 global.gc(); 即可。

node.js v4.0.0 released, merged with io.js

node.js 4.0 released few days ago:
https://nodejs.org/en/blog/release/v4.0.0/
https://github.com/nodejs/node/releases/

node.js now migrated/merged with io.js and has new engine, features and may also have performance increase, see:

I just did a very very simple test use npm test on cdnjs/cdnjs

繼續閱讀

Use ‘nvm’ to manage/install nodejs with multiple versions!

NVM stands for Node Version Manager, just like its name, it’ll help us manage nodejs environment in a easy way.

NVM didn’t support Windows officially, but on Mac and Linux.

If you want to compile nodejs from sure(not requried), you should have c++ compiler, on Ubuntu(I’m using Ubuntu 14.01.2 LTS), try:
$ sudo apt-get install libssl-dev build-essential

Use the install script to install nvm is the easiest way(should have bash, if not, try manual install):
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.3/install.sh | bash

NVM will be installed in few seconds:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7149 100 7149 0 0 6475 0 0:00:01 0:00:01 –:–:– 6481
=> Downloading nvm as script to ‘/home/peter/.nvm’

=> Appending source string to /home/peter/.bashrc
=> You currently have modules installed globally with npm. These will no
=> longer be linked to the active version of Node when you install a new node
=> with nvm; and they may (depending on how you construct your $PATH)
=> override the binaries of modules installed with nvm:

/usr/lib
├── bower@1.3.12
├── carto@0.14.0
├── cdnjs-importer@1.1.0
├── gh-contributions@1.1.1
├── ghcal@1.1.0
├── git-stats@1.4.0
├── grunt-cli@0.1.13
├── npm-check@3.2.10
├── npm-check-updates@1.5.1
└── stackvis@0.2.0

=> If you wish to uninstall them at a later point (or re-install them under your
=> nvm Nodes), you can remove them from the system Node as follows:

$ nvm use system
$ npm uninstall -g a_module

=> Close and reopen your terminal to start using nvm

That’s all … should reload your shell’s rc file or re-login, and try nvm now:

How to use a specified version of nodejs?

Install it by nvm(for the first time, add parameter -s if you want to install from source):
$ nvm install 0.11

Should be done in few secs:

######################################################################## 100.0%
Now using node v0.11.16 (npm v2.3.0)

And you can use nvm use to change to the version you want, like this:
$ nvm use 0.12

Now using node v0.12.3 (npm v2.9.1)

How to know current nodejs versions?
$ nvm current

v0.10.38

How to list installed nodejs versions?
$ nvm ls

-> v0.10.38
v0.11.16
v0.12.3
system

How to list the nodejs versions available?
$ nvm ls-remote
It’ll give a very long version list like above but longer and longer ….

run nvm without parameter will print you the usage, very easy to understand like this:

Node Version Manager

Usage:
nvm help Show this message
nvm –version Print out the latest released version of nvm
nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available
nvm uninstall Uninstall a version
nvm use Modify PATH to use . Uses .nvmrc if available
nvm run [] Run with as arguments. Uses .nvmrc if available for
nvm current Display currently activated version
nvm ls List installed versions
nvm ls List versions matching a given description
nvm ls-remote List remote versions available for install
nvm deactivate Undo effects of nvm on current shell
nvm alias [] Show all aliases beginning with nvm alias Set an alias named pointing to
nvm unalias Deletes the alias named
nvm reinstall-packages Reinstall global npm packages contained in to current version
nvm unload Unload nvm from shell
nvm which [] Display path to installed node version. Uses .nvmrc if available

Example:
nvm install v0.10.32 Install a specific version number
nvm use 0.10 Use the latest available 0.10.x release
nvm run 0.10.32 app.js Run app.js using node v0.10.32
nvm exec 0.10.32 node app.js Run node app.js with the PATH pointing to node v0.10.32
nvm alias default 0.10.32 Set default node version on a shell

Note:
to remove, delete, or uninstall nvm – just remove ~/.nvm, ~/.npm, and ~/.bower folders

Read the readme file for more details:
https://github.com/creationix/nvm/blob/master/README.markdown