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

5

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

我理解这可能很大程度上取决于它如何部署。 但是,您如何基本了解其使用了多少内存?


1
可以使用 tophtop 命令并加上进程 ID 来查看进程信息。 - Viren
2个回答

2
如果你正在使用Passenger,你可以尝试使用 passenger-memory-stats 命令,它会给你一个漂亮的概览,并根据站点进行划分。否则,你可以使用 top 命令来查看内存使用情况,使用 shift-M 键可以将进程按照内存使用量进行排序,然后查找 Ruby 进程即可。请注意保留 HTML 标签。

1
尽管它的名字如此,但我已经成功地在Padrino(基于Sinatra)应用程序中使用derailed_benchmarks gem动态测试内存使用情况。文档描述了如何在非Rails Rack应用程序中执行此操作 - 你只需要在简单Rake任务中定义DERAILED_APP以告诉它如何引导你的应用程序。
它可以在本地主机上使用实际服务器(我使用Unicorn)运行,甚至可以使用您的生产数据库(定义DATABASE_URL)。如果需要,还可以用来测试任何端点并绕过身份验证。使用案例包括随时间推移的内存使用情况(查找泄漏)和针对给定端点在启动时对Gem /所需库内存进行分析(启动时有大量内存使用)。
作为一个例子,命令bundle exec derailed exec perf:mem在我的应用程序的根目录下启动时会产生以下输出(此处隐藏了< 3 MiB的使用情况)。约70 MiB与Heroku在我的生产服务器上提供的统计数据相符。顺便说一下,我的应用程序名为'padfoot'。

顶部: 71.75 MiB mechanize: 19.0898 MiB (也被以下文件所需:/Users/me/dev/padfoot/lib/parsers/transaction_table_parser.rb, /Users/me/dev/padfoot/lib/scrapers/app_details_scraper.rb 和其他4个) mechanize/pluggable_parsers: 11.1055 MiB mime/types: 10.9766 MiB (也被以下文件所需:/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 (也被padrino-cache、padrino-admin所需) padrino-core/application: 3.3555 MiB sinatra/base: 3.1406 MiB (也被padrino-core/ext/sinatra、sinatra/main所需) padrino-helpers: 3.707 MiB (也被padrino-cache、padrino-admin所需) padrino/rendering: 3.3203 MiB (也被/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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接