5

您如何测量 Rack 或 Sinatra 应用程序的内存使用情况?

我知道这可能很大程度上取决于它的部署方式。但是您如何基本了解它使用了多少内存呢?

4

2 回答 2

2

如果您正在使用乘客,您可以尝试使用乘客内存统计,它可以为您提供按站点划分的很好的概览,否则您可以通过使用 top、shift-M 并查找 ruby​​ 进程来了解内存使用情况。

于 2012-08-30T16:08:47.307 回答
1

尽管有它的名字,但我已经成功地使用derailed_benchmarks gem在 Padrino(基于 Sinatra 构建)应用程序中动态地对内存使用情况进行基准测试。文档描述了如何为非 Rails Rack 应用程序执行此操作 - 您只需DERAILED_APP在一个简单的 Rake 任务中定义以告诉它如何启动您的应用程序。

它可以在您的本地主机上使用真实服务器(我使用 Unicorn)运行,甚至可以使用您的生产数据库(定义DATABASE_URL)运行。如有必要,它还可用于测试任何端点并绕过身份验证。用例包括一段时间内的内存使用(以查找泄漏)和在启动时为给定端点分析 gems/所需的库内存(在启动时使用大量内存)。

例如,该命令bundle exec derailed exec perf:mem在启动时为我的应用程序的根目录提供以下输出(此处隐藏 < 3 MiB 使用量)。大约 70 MiB 与 Heroku 的统计数据在我的生产服务器上告诉我的相符。顺便说一句,我的应用程序被称为“padfoot”。

TOP: 71.75 MiB mechanize: 19.0898 MiB (Also required by: /Users/me/dev/padfoot/lib/parsers/transaction_table_parser.rb, /Users/me/dev/padfoot/lib/scrapers/app_details_scraper.rb, and 4 others) mechanize/pluggable_parsers: 11.1055 MiB mime/types: 10.9766 MiB (Also required by: /Users/me/.rvm/gems/ruby-2.3.1/gems/rest-client-1.8.0/lib/restclient/request, /Users/me/.rvm/gems/ruby-2.3.1/gems/rest-client-1.8.0/lib/restclient/payload) padrino: 13.1016 MiB padrino-core: 8.0273 MiB (Also required by: padrino-cache, padrino-admin) padrino-core/application: 3.3555 MiB sinatra/base: 3.1406 MiB (Also required by: padrino-core/ext/sinatra, sinatra/main) padrino-helpers: 3.707 MiB (Also required by: padrino-cache, padrino-admin) padrino/rendering: 3.3203 MiB (Also required by: /Users/me/dev/padfoot/app/app.rb) /Users/me/dev/padfoot/config/apps.rb: 6.9805 MiB /Users/me/dev/padfoot/app/app.rb: 6.8906 MiB aws-sdk-core/s3: 6.3711 MiB /Users/me/dev/padfoot/lib/scrapers/gps/gps_scraper.rb: 4.25 MiB linguistics/en: 4.1523 MiB /Users/me/dev/padfoot/lib/scrapers/digimap/digimap_scraper.rb: 3.0547 MiB

于 2016-08-22T20:31:18.933 回答