论坛首页 综合技术论坛

通过ramdisk设置将内存作为磁盘,加速网络资源访问

浏览 6024 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-17   最后修改:2010-05-18
    由于我们的互联网产品中有需要给用户呈现大量的碎小图片,而且访问量非常大,这就非常让我们感到头疼。我因此想过很多办法,用apache的alias来做图片资源的映射?用lighttpd缓存图片?还有传说中nginx,我们也试过。也许是我们配置得不是很好,反正效果看上去区别不大。甚至我们都把图片放到tomcat里面,感觉也没什么差距。但是当产品上线的时候,用户量一上来我们就傻眼了,程序响应到是响应了,就是图出来得很慢。后来无意中发现windows中有个Ramdisk的工具,能把内存作为磁盘的一个分区使用,这下子让我们high了不少,马上把图片放到这个虚拟分区中,试了一把,不错,好使!于是我在想,看看linux有没有这个玩意儿。(不好意思,linux我很不熟)
    Ramdisk,即将内存作为磁盘用。内存的速度之快,是电脑存储设备中仅次于CPU缓存和显示卡显存的,当然比磁盘的IO读写要快很多了;
1、大家可以先通过ls /dev/ram*来查看有多少可供使用的Ramdisk。
2、使用其中一个来创建 mke2fs /dev/ram4,我这选用的是ram4,一般来说总共有16个
执行下来可以看到有一行1024 inodes, 4096 blocks,默认就是4M,这肯定不够的
3、 设置虚拟磁盘的大小,我装的是Red Hat Enterprise Linux Server,所以我在/etc/grub.conf中直接修改
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet ramdisk_size=102400;这样,1G应该差不多了
4、加载ramdisk, mount /dev/ram4 /tmp/your real directory;如果想取消,直接umount /dev/ram4 /tmp/your real directory
5、用df -k /dev/ram4查看你用了多少虚拟磁盘了,如果不是0%或者1%,那就说明生效了
6、我的图片放tomcat下做测试的,所以在server.xml的Host标签中加上
<Context path="/images" docBase="/tmp/ramdisk4/images"/>
最后,自己通过url试一下吧
这个东西我只是抛砖引玉一下,大家如果是用apache或者lighttpd做静态资源的服务器的话,可以按照我这种方式来配置;但是有一点,这个东西当系统reboot以后,就什么都没有了,需要重新设置,所以说用户上传的东西,最好是写个shell来控制一下,及时备份;不过对于我们的生产环境,我们暂时没有把用户上传的路径做虚拟磁盘,没敢去尝试;当linux都reboot了,那就说明我们整个业务都停掉需要做调整,所以无所谓的。
   发表时间:2009-07-22  
搞那么复杂,直接用tmpfs不行么?
0 请登录后投票
   发表时间:2009-07-22  
恩,刚看了一下,tmpfs的方式,是要简单一些,不过都是通过挂载文件系统的方式做的,我想2者应该没什么本质的区别
0 请登录后投票
   发表时间:2009-07-22  
这个,最好前面加squid.

如果图片太多,楼主这种方法就不灵了
0 请登录后投票
   发表时间:2009-07-22   最后修改:2009-07-22
xieye 写道
这个,最好前面加squid.

如果图片太多,楼主这种方法就不灵了


为什么图片太多就不太好了?squid我没试过,我只知道cdn是这么干的,请问你有没有在生产环境中
使用squid来做加速,或者能否告诉我,图片为什么太多就不好,是文件寻址速度受到影响了吗?如果
是这样的话,那我可以划分多个ram挂载文件系统,我想应该也没问题吧
0 请登录后投票
   发表时间:2009-07-22  
这个用Squid、 NCache、 Varnish 来做确实更适合。
0 请登录后投票
   发表时间:2009-07-22  
forthelichking 写道
恩,刚看了一下,tmpfs的方式,是要简单一些,不过都是通过挂载文件系统的方式做的,我想2者应该没什么本质的区别


mount -t tmpfs tmpfs /tmp/your_dir

一个命令搞定,而且tmpfs是动态增长,按需分配内存,不仅是“简单一些”而已。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics