`
robbin
  • 浏览: 4821435 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137063
社区版块
存档分类
最新评论

在top监视窗口显示Rails当前正在执行的请求URL

    博客分类:
  • Ruby
阅读更多
这是一个从PragDave的博客上面学来的技巧,很实用,很cool!

话说在一个运行着Rails的网站上面,我们可以用Linux的top命令来监控Rails应用程序实例的运行状况,占用的内存,消耗的CPU等等,例如JavaEye网站的某一刻的截图:




在这个截图里面,我们可以了解Rails进程实例的运行状况,但是我们无法确切的知道,某个当前时刻消耗CPU很高的fcgi进程究竟在执行哪个请求,如果能够确切的了解这个信息,对于寻找性能瓶颈有极大的帮助,所以下面看我们来变个魔术:

在你的Rails应用的app/controllers/application.rb里面增加两个filter,如下:

before_filter :set_process_name_from_request
after_filter :unset_process_name_from_request

def set_process_name_from_request
  $0 = request.path[0,16] 
end   

def unset_process_name_from_request
  $0 = request.path[0,15] + "*"
end  


在ruby语言中$0是应用程序的命令行,因为我们以fcgi方式启动Rails,所以默认显示为dispatch.fcgi,但我们现在要改变$0,把URI强行赋值给$0,然后top就被我们欺骗了:




乖乖的给我显示出来我当前处理请求的URI是 /blog/283416,其实就是我的这篇博客:对领域模型实现的总结性观点

是不是很酷!如果Rails应用正在处理该请求,那么top显示 /blog/283416,如果Rails应用已经处理完该请求,那么top显示 /blog/283416* ,再来一个全一点的,给大家过过瘾





提醒:top命令启动以后,要按“c”,切换到显示完整命令的模式才能显示处理URI。

  • 大小: 28.7 KB
  • 大小: 10.1 KB
  • 大小: 89.5 KB
分享到:
评论
19 楼 magician 2008-12-08  
hu......

算是大致找到了php的做法,不过相当麻烦

-------------------------------------------------------

思路与django大致相当,就是调用/lib/libc.so.6中的prctl方法(直接使用prctl命令不行)。

但是php无法直接dl这个so,因为不是php extendsion,所以先得自己包一个,写写c代码

后面就和django一样了,我就不重复了

django的做法:http://www.iteye.com/topic/286277
18 楼 magician 2008-12-04  
robbin 写道
magician 写道
php有做到这个的可能吗?


如果你是apache mod_php来跑的话,也许你可以试试修改 _ENV["_"] 这个环境变量的值,把它的值改成_SERVER["REQUEST_URI"]看看。但我没有试过行不行。


感谢回复

不过我是用lighttpd+fcgi跑的php,手头上暂时也找不到apache的环境,没法测试

我想深入一下问问

这个方法的原理是通过修改环境变量来试图欺骗top命令对吧,那么理论上我只要知道lighttpd是通过哪个环境变量显示进程名字,然后修改它就可以了,是吗?

或者我理解的有错误,请指正,谢谢!
17 楼 robbin 2008-12-04  
magician 写道
php有做到这个的可能吗?


如果你是apache mod_php来跑的话,也许你可以试试修改 _ENV["_"] 这个环境变量的值,把它的值改成_SERVER["REQUEST_URI"]看看。但我没有试过行不行。
16 楼 airport 2008-12-03  
困扰很多年的问题,今天看到了
15 楼 johnnyhg 2008-12-03  
用JAVA做也应该是这种做法!
14 楼 系统程序 2008-12-03  
:( 没有切换到完整命令的模式
13 楼 系统程序 2008-12-03  
我的好像不行啊? CentOS 5.2 fcgi+lighttpd布署
12 楼 hozaka 2008-12-03  
07年的时候已经有一个类似的插件,不过是针对 mongrel 的一个扩展,实现相同的目的
http://purefiction.net/mongrel_proctitle/
11 楼 FGhost 2008-12-03  
 
好cool..
很实用..
10 楼 fanix 2008-12-02  
这个办法真不错,多谢robin同志,带来的总是这么惊艳的东西
9 楼 magician 2008-12-02  
php有做到这个的可能吗?
8 楼 inosin 2008-12-02  
过瘾的不得了~
7 楼 yangzhihuan 2008-12-01  
这个也想到了,赞一个。
6 楼 richyzhang 2008-12-01  
确实很酷.
脚本语言的天堂.
5 楼 wosmvp 2008-12-01  
相当不错,用在脚本上,就可以知道脚本的运行情况了,哈哈
4 楼 fsword 2008-12-01  
好阿,确实很实用
3 楼 koalant 2008-12-01  
可惜在 BSD 系统上不管用。
2 楼 robbin 2008-12-01  
playcase 写道

很cool. 想了解下加这个filter对性能是否会有影响?

没啥影响。
1 楼 playcase 2008-12-01  
很cool. 想了解下加这个filter对性能是否会有影响?

相关推荐

    Rails项目源代码

    Rails的路由系统将URL映射到控制器的行动上,如`/sign_up`可能对应`users#new`,用于创建新用户。`config/routes.rb`文件定义了所有路由规则,包括资源路由、命名路由和自定义路由。 6. **视图模板**: 视图使用...

    Rails

    Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY(Don't Repeat Yourself)原则和开发效率。 Rails的核心特性包括: 1. **约定优于配置**(Convention Over Configuration):...

    Rails 101 入门电子书

    - **概念介绍**: 路由是连接用户请求URL与应用程序逻辑的关键组件。 - **实现方式**: - 配置文件`config/routes.rb`。 - 常见的路由类型: 默认路由、命名路由、约束路由等。 #### 七、练习作业1-建立Group-CRUD与...

    rails 项目起步示例

    2. **bin**:存放可执行文件,如`rails`脚本,用于启动服务器、运行测试等。 3. **config**:配置文件的集合,包括数据库连接、路由设置、应用环境等。 4. **db**:数据库相关的文件,如迁移(migrations)用于...

    rails指南 中文版

    5. **Gemfile与Bundler**:Rails项目通常使用Gemfile来管理依赖库,Bundler工具则用于安装和管理这些依赖,确保在不同环境下项目的运行一致性。 6. **Scaffolding**:Rails提供了快速生成基本CRUD(Create, Read, ...

    Rails101_by_rails4.0

    路由机制是Web应用中一个非常核心的概念,它定义了不同的URL地址如何映射到特定的控制器和动作上,从而响应用户的请求。 书中详细讲解了CRUD(创建Create、读取Read、更新***e、删除Delete)操作,这是Web开发中...

    rails下载进度条显示样例

    本代码是用jquery+rails实现的大数据下载的进度显示。实现原理是使用ajax方式向服务器提起下载请求,然后根据服务器传回的数据处理结果决定是否还需向服务器发起请求,并根据服务器传回的结果显示下载进度。

    Ruby on Rails入门例子

    通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **ActiveRecord查询接口(Query Interface)**:ActiveRecord提供了丰富的查询API,如`User.find...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    The Rails 4 Way

    - **路由的目的**:路由定义了URL与应用程序内部逻辑之间的映射关系,它是控制请求处理流程的关键部分。 - **routes.rb文件**:这是Rails应用程序中配置路由规则的地方,通过编写不同的路由规则可以实现复杂的应用...

    一个可以在windowsXP和windows7里面运行Rails程序

    本资源是在Rails开发先行的时候确定可以运行的Rails工程,可以直接用此代码运行画面

    Rails相关电子书汇总

    4. **路由(Routes)**:Rails的路由系统将URL请求映射到特定的控制器动作,实现了URL和应用逻辑之间的解耦。 5. **辅助方法(Helper Methods)**:为视图提供便利的功能,如链接生成、样式辅助等。 6. **Scaffold...

    Ruby+for+Rails

    Rails的路由系统将URL映射到控制器的动作上,定义在`config/routes.rb`文件中。例如,`resources :books`会生成CRUD(创建、读取、更新、删除)相关的路由。 8. **ActiveRecord** Rails的ORM(对象关系映射)层,...

    中文版rails教程

    3. **路由(Routing)**:Rails的路由系统根据URL映射到特定的控制器和动作,定义了应用的导航结构。 4. **测试驱动开发(Test-Driven Development, TDD)**:Rails鼓励使用TDD,提供了Rspec和Capybara等强大的测试...

    rails2.3.2

    6. 开发者工具:Rails 2.3.x 包含了 Rails Console,一个交互式的命令行工具,以及 Rails Server,用于运行应用程序。此外,还有 Scaffolding 机制,可以自动生成基本的 CRUD(创建、读取、更新、删除)操作的控制器...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    好用的rails 2.0 Api 文档

    Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...

    rails_performance:监视您的Rails应用程序的性能

    一个自托管的工具,用于监视Ruby on Rails应用程序的性能。 这是New Relic APM,Datadog或其他类似服务的简单免费替代品。 它允许您跟踪: 吞吐量报告(请参阅RPM数量(每分钟的请求数)) 平均响应时间 最慢的...

Global site tag (gtag.js) - Google Analytics