0

我在 Slicehost 的 256 片上运行 Apache 和 Passenger 来托管我的 Rails 应用程序。我不得不经常进行硬重启。当我查看此乘客记忆统计数据时。

--------- Passenger processes ---------
 ** [out :: welcometonewnepal.com] PID   Threads  VMSize    Private  Name
 ** [out :: welcometonewnepal.com] ---------------------------------------
 ** [out :: welcometonewnepal.com] 8246  11       <b>84.1 MB   0.1 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/ApplicationPoolServerExecutable</b> 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/bin/passenger-spawn-server  /usr/bin/ruby1.8  /tmp/passenger.4217
 ** [out :: welcometonewnepal.com] 8247  2        <b>57.1 MB   0.2 MB   Passenger spawn server</b>
 ** [out :: welcometonewnepal.com] 8903  1        <b>185.6 MB  9.6 MB   Passenger ApplicationSpawner:</b> /home/deploy/rails_apps/welcometonewnepal/production/current
 ** [out :: welcometonewnepal.com] 9065  1        <b>195.1 MB  76.6 MB  Rails:</b> /home/deploy/rails_apps/welcometonewnepal/production/current
 ** [out :: welcometonewnepal.com] ### Processes: 4
 ** [out :: welcometonewnepal.com] ### Total private dirty RSS: 86.43 MB

看到粗体的尺寸,为什么它会占用这么多内存?

4

5 回答 5

4

仅根据这些统计数据不能肯定地说。

但为了帮助降低它:

  • 在 Apache 上使用 Nginx
  • 使用 Ruby 企业版——看起来你只是在使用常规的 1.8.6/7 ......这就是浪费内存

另外,您的应用程序中有很多宝石和/或插件吗?

于 2009-06-18T22:52:52.920 回答
4

它并没有占用太多内存……您需要注意的列是标记为“私有”的列。
如果将它们全部加起来(它在底部),您会看到乘客及其相关进程仅占用 86MB 内存。其中大部分也被应用程序的大小(76MB)占用。

您可能需要让我们知道您在服务器上运行的其他内容...安装 htop 并按内存排序以获得一个想法。

于 2009-08-20T22:05:54.810 回答
0

你需要做一些内存分析

于 2009-06-19T08:14:18.103 回答
0

如果您在 64 位环境中运行,请尝试切换到 32 位。Rails/Ruby 倾向于在 32 位环境中使用较少的内存。

于 2009-08-25T14:59:56.663 回答
0

您是否调整过 Apache 或您的数据库设置?我发现一个 Wordpress 博客 + 一个小型 Rails 应用程序对于使用默认 Ubuntu 配置的 256MB 切片来说太多了。

在 Apache (Prefork MPM) 中尝试以下设置:

#KeepAlive On
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 4

<IfModule prefork.c>
StartServers       5
MinSpareServers    5
MaxSpareServers    10
MaxClients         40
MaxRequestsPerChild 1
</IfModule>

在我的情况下,我不得不将 MaxClients 进一步调低到 25。我曾经每周从 Slicehost 收到 2-3 封交换警告电子邮件,但自从我切换设置后的 2 周内我没有收到任何邮件。如果您使用的是 WorkerMPM 分叉,那么您的设置将有所不同。

如果您使用的是 MySQL,如果您不使用 InnoDB,请禁用 InnoDB 表。这可以为您节省相当多的内存。

于 2009-08-25T15:07:16.963 回答