This post goes over how to optimize Heroku dyno memory for Node.js applications.
Problem
If your Node.js app is crashing with the error:
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
Or your Heroku memory usage looks like this:

Then you need to check your app for memory leaks or upgrade to a larger dyno size.
max-old-space-size
If your dyno has more than 512 MB RAM, then you’re not making use of all the available memory (depending on your Node.js version, the default memory limit can be 512 MB).
To increase the Node.js memory limit, set --max-old-space-size in the CLI:
node --max-old-space-size=1024 app.js
Or set it as an environment variable with key NODE_OPTIONS and value --max-old-space-size=1024:
NODE_OPTIONS='--max-old-space-size=1024'
1024 MB is equivalent to 1 GB so to set the size to 2 GB, double the number.
See more information on Heroku and Stackoverflow.
Cluster
Fork multiple clusters to take advantage of multiple cores to optimize Node.js concurrency.
Read more on optimizing dyno usage.
Metrics
Enable visibility into memory usage with Heroku Labs log-runtime-metrics.
Librato is an add-on for performance monitoring.