易截截图软件、单文件、免安装、纯绿色、仅160KB

对Ruby VM的GC的思考

Ruby虽然是动态脚本语言,但是和Java一样,带有VM,有自己的内存堆,创建对象的时候在堆里面分配内存,对象使用完毕由GC进行回收。但是通过我们运营Rails网站两年多的实践来看,Ruby VM的GC还是存在很大的问题。简单的来说,就是GC之后,尽管对象已经完全回收,但是物理内存释放不够充分,有泄漏的现象。通过pmap来dump ruby进程物理内存地址映射表进行分析,观察到ruby的内存堆总是在不停的扩张,GC之后回收不干净。而我对比观察Java VM,其Full GC之后,物理内存释放的非常干净。所以用Ruby做服务器长期的跑,就会发现Ruby进程没有理由的缓慢泄漏内存,内存堆缓慢增长,貌似没有上限。
由于pmap命令可以dump进程的内存映射表,因此我们可以对比RubyVM和JVM在GC前后的内存映射情况。比方说Ruby的内存状况大概是这样的:
下图是一个Ruby进程的物理内存映射表,堆内存占据的空间是我抽取出来的三行:
Ruby代码
00000000005d4000 125260K rwx--    [ anon ]   
0000002a95c23000  23456K rw---    [ anon ]   
0000002a99186000  50980K rw---    [ anon ]  
00000000005d4000 125260K rwx-- [ anon ]
0000002a95c23000 23456K rw--- [ anon ]
0000002a99186000 50980K rw--- [ anon ]
Ruby代码
0000000000400000    760K r-x--  /usr/local/ruby/bin/ruby   
00000000005bd000     92K rw---  /usr/local/ruby/bin/ruby   
00000000005d4000 125260K rwx--    [ anon ]   
0000002a95556000     84K r-x--  /lib64/ld-2.3.3.so   
0000002a9556b000     12K rw---    [ anon ]   
0000002a9556e000     24K r--s-  /usr/lib64/gconv/gconv-modules.cache   
0000002a95574000      4K rw---    [ anon ]   
0000002a95577000


相关文档:

Ruby Ruport实践—中文PDF报表之FPDF

Ruport中pdf_writer对中文的支持并不好,输出的中文显示的是乱码。上网查了很多资料,也没有找到好的解决方案,无奈只好查看源代码,到底为什么Ruport自带的PDF工具不支持中文输出。
Ruport::Formatter::PDF::Writer中找到以下代码
   metrics = load_font_metrics(font)
   metrics = PDF::Writer: ......

ruby和watir学习常用网站整理

转自51testing.com, 原见:http://bbs.51testing.com/thread-171535-1-1.html http://swik.net/Watir+Programming
http://www.pragprog.com/ #很多好的源码哦
http://docs.rubygems.org/ #rubygems
http://www.fxruby.org/  #fxruby
http://groups.google.com/group/watir-general/topics #goog ......

Ruby Ruport实践—报表参数实现

此例子在 Ruby Ruport实践—简单报表系统 及 Ruby Ruport实践—中文PDF报表之PRAWN  的基础上进行完善,添加了对报表参数的设计及实现。
一、创建数据表report_parameters
create table report_parameters
(report_parameter_id integer not null auto_increment,
report_execute_id integer not null, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号