【问题标题】:When do Heroku dynos use swap memory?Heroku dynos 什么时候使用交换内存?
【发布时间】:2014-10-10 11:28:08
【问题描述】:

我正在为我的开发服务器在免费测功机上托管我的 Rails 4.1.4 项目和 2 个 Unicorn 进程。应用程序运行一段时间后,有时我会感觉变慢。我添加了 New relic、logentries 并启用了 log-runtime-metrics。然后我看看新的遗物和日志

» 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 的内存(免费 dyno 为 512 Mb),它应该切换到交换内存。

【问题讨论】:

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


    【解决方案1】:

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

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

    值 60 可确保您的应用在达到最大内存之前就开始进行交换。 Linux 内核参数vm.swappiness 的取值范围为 0 到 100,其中 0 表示不交换,100 表示总是交换。

    因此,在 Heroku 上运行时,即使您的应用程序占用的内存远小于您的测功机宣传的 RAM,您也应该期望您的应用程序进行交换。

    【讨论】:

    • 那么你如何决定修复它?因为使用交换空间会降低应用程序的性能。
    • @Samnang 用户无法修复。这需要 Heroku 解决。
    • 根据 Heroku 的说法,这不应该影响应用程序的性能。 “30-50MB 的交换空间,只要您的应用程序仍有可用内存,就不会影响您的性能。这个被 linux 放入交换的内存是未使用的。它被系统移动到那里,因为它没有被使用相当长的一段时间,并允许释放内存中的一些内存。”
    • @Lev 的回复有点不屑一顾。对于接近最大内存的任何人来说,这都是一个潜在的性能问题,即使是偶尔。您引用的回复可以改写为“只要您不接近 RAM 限制,性能就很好”。 60 的交换设置假定应用程序交换更好,这对于注重性能的系统来说很少见。
    • @BrianPO'Rourke 有什么建议或想法吗?
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2012-06-30
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多