Heroku dynos何时使用交换内存?

Sam*_*ang 9 performance heroku unicorn ruby-on-rails-4

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

在此输入图像描述

» 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
Run Code Online (Sandbox Code Playgroud)

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

小智 14

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

在运行时,Ubuntu的默认值为60,包括PX dynos.

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

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