When you look at your New Relic memory consumption graphs, it shows less memory use than your Heroku memory metrics.
NewRelic and other monitors may not be capturing metrics for all the process being run
Our charts take into consideration all memory use in the dyno, as seen by the operating system through the dyno's statistics. These values are read every 20s, and reported to us. We then do our computations (really just sum, min, max, sum of squares, count) grouped by process type (e.g. all the
web metrics together) and appropriately return the data for the charts.
New Relic is not taking into consideration other processes that are running in the lxc container. You can see this for yourself by running:
$ heroku run bash heroku $ top -n 1 ...
bash isn't the only process that is running. At the very least you'll see
ps-run, which takes a small amount of memory. New Relic won't take that into consideration because it's not asking the operating system how much memory is being used, it's asking the JVM/Node.js/etc.
Additionally, there's a known discrepancy between the memory stats that lxc containers provide within the container and what is observed outside of the container.