在 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
├── [email protected]
├── car[email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

=> 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