巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!

巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!

一.什么是tmpfs和/dev/shm/? 

tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势:

1)动态文件系统的大小。 

2)tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的。 

同时它也有一个缺点  tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。tmpfs不具备持久性,重启后数据不保留,请务必注意!!!  

/dev/shm/是一个设备文件,它使用就是tmpfs文件系统(注意:在Centos和Redhat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录,可以使用df命令查看),因为 /dev/shm/这个目录不在硬盘上,而是在内存里,它就所谓的tmpfs。在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。 比如我的的Red Hat Enterprise Linux Server 5.4 64(单核,512内存)分配内存为512M,所以/dev/shm为250M左右,查看/dev/shm如下: 


  1. [root@AY1212111202285f63122 ~]# df -h 
  2. Filesystem            Size  Used Avail Use% Mounted on 
  3. /dev/hda1              20G  7.6G   11G  42% / 
  4. tmpfs                 250M     0  250M   0% /dev/shm 

tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为512M,修改/etc/fstab的:


  1. tmpfs       /dev/shm    tmpfs  defaults   0 0 

改为 


  1. tmpfs       /dev/shm    tmpfs  defaults,size=512m    0 0 

然后执行mount -o remount /dev/shm 


  1. [root@AY1212111202285f63122 ]# mount -o remount /dev/shm 
  2. [root@AY1212111202285f63122 ]# df -h 
  3. Filesystem            Size  Used Avail Use% Mounted on 
  4. /dev/hda1              20G  7.6G   11G  42% / 
  5. tmpfs                 512M     0  512M   0% /dev/shm 

怎么样,变成512M啦,使用很方便吧,重启也没有问题的,哈哈。当然在生产环境中你可以把内存加大些,反正现在内存很便宜啦,为了提高性能也需要将/dev/shm加大。  

二.tmpfs(/dev/shm)的使用及应用场景 

tmpfs是基于内存的,速度是不用说的,硬盘和它没法比。Oracle 中的Automatic Memory Management特性就使用了/dev/shm。另外如果在网站运维中好好利用tmpfs,将有意想不到的收获。我们先在/dev/shm建一个tmp目前,并与/tmp绑定。 


  1. [root@AY1212111202285f63122 ~]# mkdir  /dev/shm/tmp 
  2. [root@AY1212111202285f63122 ~]# chmod  1777  /dev/shm/tmp   //注意权限 
  3. [root@AY1212111202285f63122 ~]# mount --bind  /dev/shm/tmp  /tmp 
  4. [root@AY1212111202285f63122 ~]# ls -ld /tmp 
  5. drwxrwxrwt 2 root root 40 May 29 21:46 /tmp 

以下/tmp使用tmpfs文件系统的一些应用示例,一般tmpfs内存文件系统在做web缓存,cache,临时文件存储时会对web访问有很好的加速作用,从而提高网站访问的速度。 

(1)将squid的缓存目录cache_dir放到/tmp下 


  1. vi /etc/squid/squid.conf  

修改成  


  1. cache_dir ufs /tmp 256 16 256  

这里的第一个256表示使用256M内存,重启一下squid服务,这样缓存目录都放在了tmpfs文件中了,速度不用说吧。  

(2)将php的session文件放在/tmp下 

对于一个访问量大的以apache php的网站,可能tmp下的临时文件都会很多,比如seesion或者一些缓存文件,那么你可以把它保存到tmpfs文件。保存seesion的方法很简单了:只要修改php.ini就行了,通过phpinfo测试文件查看你的php session存储位置,如果不在/tmp下,修改php.ini文件,修改如下: 


  1. session.save_path = “/tmp” 

(3)将服务的socket文件放在/tmp下 

如nginx.socket和mysql.sock 。

至于tmpfs的其他应用,我想大家可能通过这篇文章会有所启发。再次强调下:tmpfs 数据在重新启动之后不会保留,重启tmpfs 数据会丢失,所以有必要做一些脚本做诸如加载,绑定的操作! 

原文发布时间:2014-10-19

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-03 20:27:00

巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!的相关文章

阿里云如何远程登录Linux云服务器

  登录 Linux 实例 本地操作系统不同,远程登录云服务器 ECS 实例的工具也不同.登录实例的方式,请参见下表. 本地 OS 实例 OS 登录方式 管理终端 Putty SSH 命令 SSH Control Light Linux Linux     √   Windows √ √     Mac √   √   iPhone 手机       √ Android 手机       √ 本地为 Windows 系统 云服务器 ECS 实例创建好之后,您可以使用以下任意一种方式登录服务器:

【阿里云】 ECS Linux 云服务器中安装 rinetd 进行转发实现本地通过公网访问云数据库 Redis

转载请注明出处http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 今天在阿里云买了一个月的云数据库Redis试试水一开始因为我选择的云数据库Redis是经典网络所以搭建好之后设置键值对会超时. (注意ECS服务器和Redis数据库在一个地区很重要) 注意的事项是 redis是经典网络的, ecs是专有网络的,这两者内网不通, 所以需要在redis控制台, 实例信息,基本信息,将redis切换到专有网络下即可连接. 注意: 1. redis切换到专有

linux云服务器如何安装nginx?

注意,请先到阿里云官网领取幸运券,除了价格上有很多优惠外,还可以参与抽奖.详见:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=2a7uv47d&utm_source=2a7uv47d 首先,我们得从网站上,下载nginx软件,以及nginx软件依赖的相关工具.这里的安装的nginx软件版本为1.9.15. 接下来,当然要从网站上,下载另外一个工具,用于远程连接linux服务器,以及上传文件到l

系统-请教大神:我win7电脑Java开发程序,部署到Linux云服务器,如何实现调用另一套VB开发的程序

问题描述 请教大神:我win7电脑Java开发程序,部署到Linux云服务器,如何实现调用另一套VB开发的程序 我win7电脑Java开发程序,部署到Linux云服务器,如何实现调用另一套VB开发的程序: 这套VB开发的程序是win平台的.急! 比如以下情况:比如门房有台电脑,win系统的,联网,打开我的系统,扫码,调用 VB,也就是说,在同一台电脑里面去实现, 可能不?? 解决方案 只能把VB程序放到另一台win的机器上,然后Linux云服务器通过http等,发送请求给VB的机器

阿里云如何部署Linux云服务器实例环境

示例:部署环境 您可以根据业务需要,选择下列任意一种方式部署云服务器 ECS 实例的使用环境: 镜像部署 手动部署 下表列出了两种部署方式的特点.一般推荐镜像部署.如果您需要个性化定制部署,建议使用手动部署. 对比项 镜像部署 手动部署 部署所需时间 3-5分钟,快速部署上云 1-2天.选择适合的操作系统.中间件.数据库.各类软件.插件.脚本,再进行安装和配置 专业性 IOPS 由运维过万级用户的优质服务商提供 依赖开发人员的开发水平 个性化 支持主流应用场景 可满足个性化的部署要求 安全性 经

云服务器下搭建ASP.NET Core环境_实用技巧

最近.net core如火如荼,国内这方面环境搭建方面的文档也非常多,但是不少已经是过时的,就算按照那个流程走下去也避免不了一些地方早就不一样了.所以下面我将从头到尾的教大家搭建一次环境,并且成功运行官网的demo. 一.系统环境 本次笔者因为懒的去做虚拟机,所以注册了一个云提供商的试用账户作为本次的主机. 系统: Ubuntu Server 14.04.2 LTS 64bit Mono: 1.0.0-rc1-update1 Coreclr: 1.0.0-rc1-update1 二.正文 1.首

阿里云 ECS Ubuntu 14.04 无法访问之磁盘 IO 跑满问题排查

1. 现象 服务器 ip 能 ping 通,但部署的两个网站都无法访问,ssh 也连接不上,打开阿里云手机监控看了下,磁盘读 IOPS 达到了 1000 次/秒,并持续了近半个小时,IO 跑满导致无法处理其他任何请求,只能将服务器重启. PS:DigitalOcean 全固定硬盘,比起来阿里云的普通硬盘速度实在是渣到爆. 2. 排查 查看 syslog,看系统之前的运行情况 Java 1 sudo more /var/log/syslog 发现: Java 1 2 3 Jan 15 22:32:

阿里云服务器CentOS 6.3下快速安装部署 LAMP 、vsftpd 环境的方法_Linux

阿里云论坛上的资源很丰富,查了下安装LAMP环境,很多基础性的东西已经内置了,比如防火墙的配置和端口的开启,统统不需要再做操作,所以安装下来也很简单: 1.MySQL的安装 MySQL安装涉及到的软件包: mysql: MySQL客户端以及基础库文件. mysql-libs: MySQL客户端所必需的库文件. mysql-server: MySQL服务器端以及相关文件. 安装命令: yum intall mysql mysql-libs mysql-server 2.PHP的安装 预备工作: 同

云服务器做负载均衡需要用户做额外的配置吗?

  原则上不需要对您的云服务器做特别的配置.对关联到TCP类型 VIP的Linux云服务器,需要修改系统配置文件/etc/sysctl.conf以下三项为0: net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0 如果部署在同一内网网段下的云服务器之间有通信需求,且发现有无法通信的情况存在,那么需要检查如下参数的配置是否正确: net.ipv4.co