`
凉粉仔
  • 浏览: 40677 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

/dev/shm共享内存

阅读更多

 

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

 

 

 

测试一:读取100000次数据。

 

 

//使用memcache
require_once 'tools/cache/memcached-client.php';
$mem = new memcached($options);
$mem->set('x' , '0');
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
        $mem->get('x');
}
$end = microtime(TRUE);
echo round($end - $time , 2);

 

连续运行三次运行上面的脚本,得到的结果分别为10.5,10.46,10.63。

 

 

//从文件中读取,test.log的内容只有1字节
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
        $data = file_get_contents('test.log');
}
$end = microtime(TRUE);
echo round($end - $time , 2);

 连续运行三次该脚本,得到的结果分别为4.4,3.16,3.16。

 

//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
        $data = file_get_contents('/dev/shm/php_system/vipcache');
}
$end = microtime(TRUE);
echo round($end - $time , 2);

 连续运行三次得到的结果分别为3.2,3.25,3.2。

 

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

 

 

 

测试二:写100000次数据。

//使用memcache
$mem = new memcached($options);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
        $mem->set('x' , '0');
}
$end = microtime(TRUE);
echo round($end - $time , 2);

 连续三次运行得到的结果分别是10.93,9.22,9.41,跟读取测试的结果差不多,说明memcache的读与写时间是差不多的。

 

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

 

//共享内存
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
        $data = file_put_contents('/dev/shm/php_system/vipcache' , '0');
}
$end = microtime(TRUE);
echo round($end - $time , 2);

 连续三次运行得到的结果分别是2.5,2.52,2.53。写跟读的性能一样优越。

 

 

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

我总结了一下其优缺点:

 

优点:读写速度最快。

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

 

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

 

 

分享到:
评论

相关推荐

    configure /dev/shm before Install Oracle 11gR2 on Ubuntu 11.10 server (64-bit)

    在Oracle数据库环境中,`/dev/shm`用于存储数据库的共享内存区域,以提高性能。 首先,理解Oracle为何需要`/dev/shm`的原因。Oracle数据库在运行时会创建大量的内存结构,如数据缓冲区、重做日志缓冲区等,这些都...

    Centos7运用/dev/shm进行网站优化

    其中一个有效的优化策略是利用 `/dev/shm`(共享内存)作为临时文件存储区域,以此提高数据读写速度。本文将深入探讨 `/dev/shm` 的原理、配置以及如何在CentOS 7中应用它来优化网站性能。 首先,了解 `/dev/shm` ...

    如何修改和限制shm的大小

    在Linux系统中,`/dev/shm`是一个特殊文件系统,称为临时文件系统或tmpfs,它被设计用于实现进程间的共享内存。共享内存是一种高效的数据通信方式,允许多个进程直接访问同一块内存区域,无需通过传统的I/O操作。...

    详解Linux系统中的tempfs与/dev/shm

    /dev/shm是tmpfs的一个实例,通常作为一个挂载点存在于Linux系统中,它的设计目的是提供一个共享内存区域,供不同进程之间高效地交换数据。这个目录下的文件实际上是内存中的数据,可以被多个进程同时访问和修改,...

    ICEORYX.pptx

    共享内存是通过映射 /dev/shm 共享内存中的共性文件到当前进程来完成的。 内存配置 ICEORYX 系统提供了多种内存配置选项,包括 chunkSize 和 chunkCount。这些选项可以根据实际情况进行调整,以满足不同的应用需求...

    shm共享内存 - 动态链接库

    在Linux中,`shm`是共享内存的主要接口,通过`/dev/shm`目录进行操作。`shmget`、`shmat`、`shmdt`和`shmctl`是四个主要的系统调用来管理共享内存段。 1. `shmget`函数用于创建或获取一个共享内存段。它需要三个...

    ora-00845 ora-00845

    这意味着在当前配置下,Oracle 数据库试图分配比 `/dev/shm` 文件系统所能支持的更大的共享内存区域,从而引发了 ORA-00845 错误。 #### 解决方案 解决 ORA-00845 错误通常涉及两个主要步骤:确认系统是否支持 ...

    linux 查看磁盘空间命令详解

    /dev/shm 236M 0 236M 0% /dev/shm /dev/sda1 56G 22G 35G 39% /mnt/sda1 ``` 在这个示例中,我们可以通过以下列来了解磁盘使用情况: 1. **Filesystem**:指定了磁盘分区或者挂载点。 2. **容量**:表示该分区总的...

    docker-protractor:预先安装量角器的Docker映像设置

    必需品链接主机进行测试-v attach / dev / shm为chrome提供共享内存(可选,这是针对perfomance) -v附加项目位置运行图像docker run -it --name protractor-runner \ --link observation-public:observation-public...

    自己做个迷你型linux内核.pdf

    - `/dev/shm`:共享内存设备。 - `/dev/systty`:指向系统tty设备的符号链接。 - `/dev/tty`:当前TTY设备。 - `/dev/tty[0-7]`:虚拟控制台。 - `/dev/ttyp[0-7]`:伪终端从设备。 - `/dev/ttyS0`:串口(COM1...

    linux下安装oracle安装手册.pdf

    - Oracle数据库需要足够的共享内存来运行,所以可能需要调整 `/dev/shm` 的大小。 - 使用`df -h /dev/shm`查看当前大小,如果不足,需编辑`/etc/fstab`文件,在`tmpfs`行添加`size=12000M`(根据实际内存调整)。 ...

    XXX_16xxx65_xxx898_共享内存_xxxbb12345_内存共享_

    1. **创建共享内存**:在C++中,首先需要创建一块共享内存,这可以通过调用`shm_open()`函数完成。这个函数需要一个唯一的名称,通常是在"/dev/shm"目录下,以及指定的访问模式和权限。 ```cpp int shm_fd = shm_...

    服务器安装配置记录资料.doc

    - 分配最大共享内存:1 - 设备数量:20 - 最大在线引擎:1 **数据库设备与大小:** - master:100M - model:2M - tempdb:2M - sybsystemprocs:50M - sybsystemdb:1000M - qbyshop_dat_dev:2000M - qbyshop_log...

    shm-size-system:检索devshm的大小

    `/dev/shm`是Linux内核提供的一种内存映射文件系统,用于实现进程间共享内存。这个工具主要关注的是如何获取并分析这个特殊文件系统的可用空间。 在描述中提到,“一个检查/dev/shm大小的简单系统”,暗示了这个...

    linux 查看磁盘空间

    - `/dev/shm`(共享内存文件系统)总共有236M,目前未使用任何空间,故使用率为0%。 - `/dev/sda1`的总容量为56G,已用22G,剩余35G,使用率为39%。 #### 实践应用 在实际操作中,理解这些信息对于系统管理员至关...

    服务器安装配置记录资料.docx

    而`/dev/shm`则为共享内存区域,常用于进程间通信。 ### 2. 服务器项目信息 - **项目目标**:文档重复提到了“江苏商学院正式服务器”,推测这是指该服务器将用于支持江苏商学院的相关业务操作。 - **安装日期与...

    oracle11gR2安装

    Oracle 11gR2 引入了自动内存管理(Automatic Memory Management)特性,这需要足够的共享内存(`/dev/shm`)。为了支持MEMORY_MAX_TARGET和MEMORY_TARGET参数,共享内存必须大于这些参数的值。若共享内存不足,数据库...

Global site tag (gtag.js) - Google Analytics