Heroku dynos何时使用交换内存?

时间:2014-08-17 10:14:20

标签: performance heroku ruby-on-rails-4 unicorn

我正在托管我的Rails 4.1.4项目,在我的开发服务器上使用免费dyno上的2个Unicorn进程。应用程序运行一段时间后,有时我觉得变慢。我添加了New relic,logentries,并启用了log-runtime-metrics。然后我看一下New relic and logentries

enter image description here

» heroku web.1  - - source=web.1 dyno=heroku.21274089.82eb32b4-c547-4041-b452-d3fedae05ee9 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.01
» heroku web.1  - - source=web.1 dyno=heroku.21274089.82eb32b4-c547-4041-b452-d3fedae05ee9 sample#memory_total=393.41MB sample#memory_rss=368.38MB sample#memory_cache=4.47MB sample#memory_swap=20.56MB sample#memory_pgpgin=121244pages sample#memory_pgpgout=25796pages

我不明白的是我的dyno的内存只有sample#memory_rss=368.38MB,但为什么它已经使用了交换内存sample#memory_swap=20.56MB?因为根据我对heroku文章https://devcenter.heroku.com/articles/dynos#memory-behavior的看法,它应该切换到交换内存,如果它达到dyno的内存,这是512 Mb的免费dyno。

1 个答案:

答案 0 :(得分:14)

即使在我的应用程序中仅使用50%的可用RAM,我也看到了显着的交换,所以我问道。以下是他们的支持团队的一句话:

  

我们在运行时将Ubuntu的默认值保留为默认值60,包括PX dynos。

值为60可确保您的应用在达到最大内存之前开始交换。 Linux内核参数vm.swappiness的范围为0到100,其中0表示没有交换,100表示​​始终交换。

因此,当在Heroku上运行时,即使您的应用程序的占用空间远小于您的dyno的广告RAM,您也应该期望应用程序进行交换。