易截截图软件、单文件、免安装、纯绿色、仅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 Bignum Dir 学习

Bignum
+        加
-        减
*        乘
/        除
**        指数操作2**2 意思是2的平方
<=>        大于, ......

记录下自己Ubunt 10.04 搭建ruby on rails环境

1、安装ubuntu
一路next,记住安装英文版。待安装完毕后,首先选择“软件源”,系统--系统管理-软件源,国内一般选择的是:http://ubuntu.cn99.com/ubuntu;接着安装中文包,选择软件源就是为了下载软件的速度更快,安装完成后重启ubuntu,重启后会提示是否改变某些文件夹名称,选择“否”,防止系统对 ......

ruby 字符串 理解 "" ''

ruby中单引号和双引号的意义有所不同,双引号包围的字符作变量替换,单引号包围的变量不做替换
也可以使用 %q 和 %Q 来生成字符串对象。%q 相当于单引号,%Q相当于双引号。
举例如下:
irb(main):010:0> "show trsult: #{1*3}"
=> "show trsult: 3"
irb(main):011:0> 'show trsult: #{1*3}'
=> "show trs ......

ruby gem mysql on cygwin

1.    安装Cygwin
运行Cygwin的安装程序。从文见包的的列表中,在DEV里面,确定要选择
• Ruby
• gcc
• subversion
    你需要使用gcc来建立Cygwin版本的MySQL.
2. 在windows上面安装MYSQL:
    download MySQL 5.0 Windows Installer
3.  & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号