ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于/dev/shm的应用及配置

关于/dev/shm的应用及配置

Linux操作系统 作者:mopnan 时间:2014-06-07 23:12:38 0 删除 编辑
        在linux或unix中使用df命令查看文件系统会发现类似如下信息
       [root@SE-1 ~]# df  -h
        文件系统                容量  已用  可用 已用%% 挂载点
        /dev/sda3             488G   92G  372G  20% /
        tmpfs                  25G  9.6G   16G  39% /dev/shm
       /dev/sda1             194M   32M  153M  18% /boot

    什么是tmpfs?

      
tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,temfs主要存储暂存的文件。

        linux内核中的VM子系统负责在后台管理虚拟内存资源Virtual Memory,即RAM和swap资源,透明地将RAM页移动到交换分区或从交换分区到RAM页,tmpfs文件系统需要VM子系统的页面来存储文件。tmpfs自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。

        tmpfs基于内存,因而速度是相当的,另外tmpfs使用的VM资源是动态的,当删除tmpfs中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,当然在其中创建文件时也会动态的分配VM资源。另外,tmpfs不具备持久性,重启后数据不保留,原因很明显,它是基于内存的。
       编译内核时,启用“Virtual memory file system support”就可以使用tmpfs,linux kernel从2.4以后都开始支持tmpfs。目前主流的linux系统默认已启用tmpfs,如Redhat。

    什么是/dev/shm?

       看到dev大家都使知道它是一个设备文件。使用tmpfs文件系统,在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。如果虚拟机装的是CentOS6.0,分配内存为1G,所以/dev/shm为500M左右。
       tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为512M.
      如何在LINUX系统中更改/dev/shm文件大大小
      1) 用 vi 或 其它文本编辑器打开 /etc/fstab,
       2) 找到 /dev/shm 所在行,然后使用 tmpfs 的 size 设置项设定一个你需要的大小,
        tmpfs                   /dev/shm                tmpfs   defaults,size=30G    0 0
      3) 要让设置立即生效,运行 mount 命令重新装入 /dev/shm 文件系统:
       mount -o remount /dev/shm
     也可以将/dev/shm挂接到其他目录
     
我们先在/dev/shm建一个tmp目前,并与/tmp绑定。

      [root@GoGo shm]# mkdir /dev/shm/tmp

      [root@GoGo shm]# chmod 1777 /dev/shm/tmp  //注意一下权限

      [root@GoGo shm]# mount –bind /dev/shm/tmp /tmp

      [root@GoGo tmp]# ls -ld /tmp

      drwxrwxrwt 2 root root 40 Aug 29 23:58 /tmp

      当然您也可以不绑定,直接mount在现有的安装点上使用tmpfs,如:

      #umount   /tmp

      #mount  tmpfs  /tmp   -t tmpfs   -o size=512M


      也很方便吧,不需要使用mkfs等命令创建。


      以下/tmp使用tmpfs文件系统。

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

      cache_dir ufs /tmp 256 16 256

      重启一下squid服务,这样缓存目录都放在了tmpfs文件中了,速度不用说吧。

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

      通过phpinfo测试文件查看你的php session存储位置,如果不在/tmp下,修改php.ini文件,修改如下:

      session.save_path = “/tmp”

      当然如果您的网站访问量比较大,可/tmp下设置分层目录存储session,语法如下:

      session.save_path=”N;/save_path”,N 为分级的级数,save_path 为开始目录。

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

      如nginx.socket和mysql.sock

      Oracle 中的Automatic Memory Management特性就使用了/dev/shm。

     当oracle的memory_max_target设置超过了/dev/shm的大小就出现下面这个错误:
     ORA-00845: MEMORY_TARGET not supported on this system

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24107336/viewspace-1177891/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-06-17

  • 博文量
    13
  • 访问量
    98548