您如何测量 Rack 或 Sinatra 应用程序的内存使用情况?
我知道这可能很大程度上取决于它的部署方式。但是您如何基本了解它使用了多少内存呢?
您如何测量 Rack 或 Sinatra 应用程序的内存使用情况?
我知道这可能很大程度上取决于它的部署方式。但是您如何基本了解它使用了多少内存呢?
如果您正在使用乘客,您可以尝试使用乘客内存统计,它可以为您提供按站点划分的很好的概览,否则您可以通过使用 top、shift-M 并查找 ruby 进程来了解内存使用情况。
尽管有它的名字,但我已经成功地使用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