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

本文介绍了一个实用的Rails性能监控技巧,通过在Rails应用中添加特定的过滤器,可以实现在Linux的top命令中直接查看到每个Rails进程正在处理的具体请求路径,从而更方便地定位性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://robbin.iteye.com/blog/283992

 

这是一个从PragDave的博客上面学来的技巧,很实用,很cool!

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




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

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

Ruby代码 复制代码
  1. before_filter :set_process_name_from_request  
  2. after_filter :unset_process_name_from_request  
  3.   
  4. def set_process_name_from_request   
  5.   $0 = request.path[0,16]    
  6. end      
  7.   
  8. def unset_process_name_from_request   
  9.   $0 = request.path[0,15] + "*"  
  10. end    
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* ,再来一个全一点的,给大家过过瘾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值