/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等。

 

 

### 修改或配置 `/dev/shm` 的方法 #### 配置持久化设置 为了使对 `/dev/shm` 的修改在系统重启后仍然生效,在统信操作系统中可以通过编辑 `fstab` 文件来实现。具体操作如下: 打开终端并使用管理员权限编辑 `/etc/fstab` 文件: ```bash sudo vi /etc/fstab ``` 向文件末尾追加一行,指定新的挂载参数以覆盖默认设置[^1]: ```text tmpfs /dev/shm tmpfs defaults,size=2G 0 0 ``` 这行配置表示将 `tmpfs` 类型的虚拟文件系统挂载至 `/dev/shm` 路径下,并设定其容量上限为2GB。 #### 动态调整当前会话中的 `/dev/shm` 如果仅需临时更改而不希望影响后续启动,则可以直接运行带有适当选项的 `mount` 命令来进行即时调整: ```bash sudo mount -o remount,size=4G /dev/shm ``` 上述命令重新挂载现有的 `/dev/shm` 并将其大小更改为4GB。 #### 绑定其他路径到 `/dev/shm` 对于某些特定需求,可能还需要创建子目录或将外部位置绑定到这里面。例如先建立一个名为 `tmp` 的新文件夹再做绑定[^2]: ```bash mkdir /dev/shm/tmp sudo mount --bind /path/to/source /dev/shm/tmp ``` 这里假设源路径位于 `/path/to/source` 下;此方式允许应用程序透明地访问该共享内存区域内的资源而无需改变原有逻辑。 #### 检查改动效果 完成以上任一形式的操作之后,建议立即验证结果是否符合预期。可以借助于 `df -h` 工具查看最新的空间分配情况[^3]: ```bash df -h /dev/shm ``` 这条指令能清晰展示出目标分区的实际可用存储量以及已占用比例等重要信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值