免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 27987 | 回复: 3

/dev/shm共享内存 [复制链接]

论坛徽章:
0
发表于 2011-11-30 16:26 |显示全部楼层
/dev/shm共享内存









最近听说/dev/shm共享内存是天生的memcache,于是在linux中做了一个测试:







测试一:读取100000次数据。





Php代码
  1. 1.//使用memcache   
  2. 2.require_once 'tools/cache/memcached-client.php';   
  3. 3.$mem = new memcached($options);   
  4. 4.$mem->set('x' , '0');   
  5. 5.$time = microtime(TRUE);   
  6. 6.for ($i = 0 ; $i < 100000 ; $i++){   
  7. 7.        $mem->get('x');   
  8. 8.}   
  9. 9.$end = microtime(TRUE);   
  10. 10.echo round($end - $time , 2);  
  11. //使用memcache
  12. require_once 'tools/cache/memcached-client.php';
  13. $mem = new memcached($options);
  14. $mem->set('x' , '0');
  15. $time = microtime(TRUE);
  16. for ($i = 0 ; $i < 100000 ; $i++){
  17.         $mem->get('x');
  18. }
  19. $end = microtime(TRUE);
  20. echo round($end - $time , 2);
复制代码
连续运行三次运行上面的脚本,得到的结果分别为10.5,10.46,10.63。






Php代码
  1. 1.//从文件中读取,test.log的内容只有1字节   
  2. 2.$time = microtime(TRUE);   
  3. 3.for ($i = 0 ; $i < 100000 ; $i++){   
  4. 4.        $data = file_get_contents('test.log');   
  5. 5.}   
  6. 6.$end = microtime(TRUE);   
  7. 7.echo round($end - $time , 2);  
  8. //从文件中读取,test.log的内容只有1字节
  9. $time = microtime(TRUE);
  10. for ($i = 0 ; $i < 100000 ; $i++){
  11.         $data = file_get_contents('test.log');
  12. }
  13. $end = microtime(TRUE);
  14. echo round($end - $time , 2);
复制代码
连续运行三次该脚本,得到的结果分别为4.4,3.16,3.16。




Php代码
  1. 1.//使用共享内存/dev/shm   
  2. 2.$time = microtime(TRUE);   
  3. 3.for ($i = 0 ; $i < 100000 ; $i++){   
  4. 4.        $data = file_get_contents('/dev/shm/php_system/vipcache');   
  5. 5.}   
  6. 6.$end = microtime(TRUE);   
  7. 7.echo round($end - $time , 2);  
  8. //使用共享内存/dev/shm
  9. $time = microtime(TRUE);
  10. for ($i = 0 ; $i < 100000 ; $i++){
  11.         $data = file_get_contents('/dev/shm/php_system/vipcache');
  12. }
  13. $end = microtime(TRUE);
  14. echo round($end - $time , 2);
复制代码
连续运行三次得到的结果分别为3.2,3.25,3.2。



读取实验的结果是:共享内存与读取本地文件的速度差不多,比memcache快。memcache为啥会比文件IO慢,我暂时没搞清楚,听别人说可能是因为memcache还有一层网络操作。







测试二:写100000次数据。


Php代码
  1. 1.//使用memcache   
  2. 2.$mem = new memcached($options);   
  3. 3.$time = microtime(TRUE);   
  4. 4.for ($i = 0 ; $i < 100000 ; $i++){   
  5. 5.        $mem->set('x' , '0');   
  6. 6.}   
  7. 7.$end = microtime(TRUE);   
  8. 8.echo round($end - $time , 2);  
  9. //使用memcache
  10. $mem = new memcached($options);
  11. $time = microtime(TRUE);
  12. for ($i = 0 ; $i < 100000 ; $i++){
  13.         $mem->set('x' , '0');
  14. }
  15. $end = microtime(TRUE);
  16. echo round($end - $time , 2);
复制代码
连续三次运行得到的结果分别是10.93,9.22,9.41,跟读取测试的结果差不多,说明memcache的读与写时间是差不多的。




Php代码
  1. 1.//文件系统   
  2. 2.$time = microtime(TRUE);   
  3. 3.for ($i = 0 ; $i < 100000 ; $i++){   
  4. 4.        $data = file_put_contents('test.log',0);   
  5. 5.}   
  6. 6.$end = microtime(TRUE);   
  7. 7.echo round($end - $time , 2);  
  8. //文件系统
  9. $time = microtime(TRUE);
  10. for ($i = 0 ; $i < 100000 ; $i++){
  11.         $data = file_put_contents('test.log',0);
  12. }
  13. $end = microtime(TRUE);
  14. echo round($end - $time , 2);
复制代码
连续三次运行得到的结果分别是14.12,13.62,13.34。比读取测试的结果差了很多,比memcache慢了一些。我猜测原因可能是读取的时候,由于我读取的是同一块内容,系统可能自动给我做了缓存,所以读比写快了很多。



Php代码
  1. 1.//共享内存   
  2. 2.$time = microtime(TRUE);   
  3. 3.for ($i = 0 ; $i < 100000 ; $i++){   
  4. 4.        $data = file_put_contents('/dev/shm/php_system/vipcache' , '0');   
  5. 5.}   
  6. 6.$end = microtime(TRUE);   
  7. 7.echo round($end - $time , 2);  
  8. //共享内存
  9. $time = microtime(TRUE);
  10. for ($i = 0 ; $i < 100000 ; $i++){
  11.         $data = file_put_contents('/dev/shm/php_system/vipcache' , '0');
  12. }
  13. $end = microtime(TRUE);
  14. echo round($end - $time , 2);
复制代码
连续三次运行得到的结果分别是2.5,2.52,2.53。写跟读的性能一样优越。





从以上的测试可以看出,直接操作本地的共享内存,速度是最快的,比文件操作或者memcache都快。

我总结了一下其优缺点:



优点:读写速度最快。

缺点:只适合单机应用,不适用于分布式应用。重启机器会丢失内容(memcache也会丢)。



在一些特殊的场景中,如果适当使用共享内存,可能会使性能得到非常大的提升。例如缓存,PHP session等。

论坛徽章:
0
发表于 2012-04-21 19:29 |显示全部楼层
在公司用了款美~信CreCloud云网管,挺不错的,属于云计算技术理念和IT监控技术的完美结合,云网管的成功开发和应用,使云计算理念在IT监控领域落地,而且还是永久免费。http://www.mxsoft.com

论坛徽章:
0
发表于 2012-04-26 21:23 |显示全部楼层
  强  强  强   谢谢了

论坛徽章:
0
发表于 2013-04-08 13:20 |显示全部楼层
不错,还没用过这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP