一、/dev/shm/介绍:

/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。 
/dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的,否则谁还敢往里头存文件呢? 
默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。

为当/dev/shm空间不够时可以占用swap的空间,所以不用担心存储空间不够用。想想看,从磁盘IO操作到内存操作,php读写SESSION的速度会快多少?只是需要注意,存储在/dev/shm的数据,在服务器重启后会全部丢失。

默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。
  tmpfs有以下优势:
  1,动态文件系统的大小。
  2,tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
  3,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。
  好了讲了一些大道理,还是讲讲应用吧:
  首先在/dev/stm建个tmp文件夹,然后与实际/tmp绑定
  mkdir /dev/shm/tmp
  chmod 1777 /dev/shm/tmp
  mount --bind /dev/shm/tmp /tmp(--bind )
  在使用mount --bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性,除了名称。
巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放squid的缓存文件和php的seesion。速度快不少哦! 
默 认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。 
tmpfs有以下优势: 
1。动态文件系统的大小, 
2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。 
3。tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。 
好了讲了一些大道理,大家看的烦了吧,还是讲讲我的应用吧:) 
首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定 
mkdir /dev/shm/tmp 
chmod 1777 /dev/shm/tmp 
mount --bind /dev/shm/tmp /tmp 
1. squid的缓存目录设置 
vi /etc/squid/squid.conf 
修改成 
cache_dir ufs /tmp 256 16 256 
这 里的第一个256表示使用256M内存,我觉得http://www.linuxaid.com.cn/articles/4/4 /441672019.shtml里使用ramdisk的方法还不如直接使用tmpfs,至少每次启动不用mkfs,还可以动态改变大小。这时的/tmp 实际就是/dev/shm/tmp 
然后重启一下服务,ok,现在所有的squid缓存文件都保存倒tmpfs文件系统里了,很快哦。 
2. 对php性能的优化 
对于一个访问量大的以apache+php的网站,可能tmp下的临时文件都会很多,比如seesion或者一些缓存文件,那么你可以把它保存到tmpfs文件。 
保存seesion的方法很简单了只要修改php.ini就行了,由于我已经把/dev/stm/tmp与/tmp绑定,所以不改写也行,至于php程序产生的缓存文件那只能改自己的php程序了:) 
至于tmpfs的其他应用,我想大家可能通过这篇文章会有所启发。

二、与swap的区别:
/dev/shm
首先可以看出来/dev/shm是一个设备文件, 可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,
一个tmp filesystem, 你可以通过这个设备向内存中读写文件, 以加快某些I/O高的操作,比如对一个大型文件频繁的open, write, read,
据说oracle就利用了/dev/shm(shitou没用过oracle), 可以通过mount命令列出当前的/dev/shm的挂载的文件系统,
你可以直接对/dev/shm进行读写操作, 例如:
#touch /dev/shm/file1
既然是基于内存的文件系统,系统重启后/dev/shm下的文件就不存在了
 
Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多,
但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), 可以通过ls /dev/shm查看下面是否有文件, 如果没有就说明当前系统并没有使用该设备.
 
swap
而swap是Linux的虚拟内存, 即在硬盘上开辟空间当内存不够时充当内存使用, 因此可以理解为当/dev/shm空间不够时可以占用swap的空间

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

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

[root@AY1212111202285f63122 ~]# mkdir  /dev/shm/tmp

[root@AY1212111202285f63122 ~]# chmod  1777  /dev/shm/tmp         //注意权限

[root@AY1212111202285f63122 ~]# mount --bind  /dev/shm/tmp  /tmp

[root@AY1212111202285f63122 ~]# ls -ld /tmp

drwxrwxrwt 2 root root 40 May 29 21:46 /tmp

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

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

vi /etc/squid/squid.conf 修改成 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文件,修改如下:

session.save_path = “/tmp”

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

如nginx.socket和mysql.sock

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

http://www.tmtpost.com/43815.html

/dev/shm对Oracle 11g的影响:

ORACLE 从11g版本开始,引入了一个自动内存管理(Automatic Memory Management)特性,该特性需要更多的共享内存(/dev/shm),因此如果决定应用该特性的话, 必须要确保共享内存大于ORACLE 中初始化参数MEMORY_MAX_TARGET 和MEMORY_TARGET(特别提示,这两个参数即自动内存管理特性对应的初始化参数)的值。

如果在初始化参数中设置了MEMORY_MAX_TARGET 和MEMORY_TARGET 两参数为非0值,并且不符合系统共享内存,则ORACLE 数据库启动时,就会触发ORA-00845:MEMORY_TARGET not supported on this system 错误。

Oracle 11g的Linux版本在修改了MEMORY_TARGET或者SGA_TARGET后启动可能会报错:

SQL> shutdown immediate

Database closed.

SQL> startup

ORA-00845: MEMORY_TARGET not supported on this system

在数据库的alert日志中将有下面的报错:

Starting ORACLE instance (normal)

WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 10536091648 bytes. /dev/shm is either not mounted or is mounted with available space less than this size. Please fix this so that MEMORY_TARGET can work as expected. Current available is 8589852672 and used is 81920 bytes.

memory_target needs larger /dev/shm

问题很明显:是因为/dev/shm的可用空间(非shm的总大小)小于了参数文件中设置的MEMORY_TARGET值。

解决办法就是增大/dev/shm或是减小MEMORY_TARGET,下面是通过增加/dev/shm来解决:

修改前:

osedb01:~ # cat /etc/fstab | grep shm

shm                  /dev/shm             tmpfs      size=11g               0 0

osedb01:~ # df -h /dev/shm

Filesystem            Size  Used Avail Use% Mounted on

shm                    11G  6.5G   4.5G  59% /dev/shm

MEMORY_TARGET 设置为10G,而/dev/shm可用空间的只有4.5G。

修改/dev/shm大小:

osedb01:~ # cat /etc/fstab | grep shm

shm                  /dev/shm             tmpfs      size=18g               0 0

修改完后,需要重新挂载/dev/shm生效:

osedb01:~ # mount -o remount /dev/shm

osedb01:~ # df -h /dev/shm

Filesystem            Size  Used Avail Use% Mounted on

shm                    18G  6.5G   12G  36% /dev/shm

再次重启数据库,正常!!

linux下的/dev/shm/及对Oracle 的影响的更多相关文章

  1. linux下的/dev/shm目录

    linux下的/dev/shm目录 linux中/dev目录下一般都是一些设备文件,例如磁盘.内存.摄像头等. /dev/shm这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都 ...

  2. linux下的/dev/shm/ 以及与swap目录的区别【转】

    /dev/shm 概念 首先可以看出来/dev/shm是一个设备文件, 可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,一个tmp filesystem, 你可以通过这个 ...

  3. linux下修改/dev/shm tmpfs文件系统大小

    默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样.象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储.而且传统的 ...

  4. 用linux服务器下的/dev/shm/来释放磁盘的压力

    巧用linux服务器下的/dev/shm/来释放磁盘的压力 浏览:646 | 更新:2013-06-18 18:08 | 标签: 磁盘 tmpfs是Linux/Unix系统上的一种基于内存的文件系统. ...

  5. linux概念之/dev/shm

    Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多,但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), ...

  6. 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。

    巧用linux服务器的/dev/shm/ 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? ...

  7. 巧用linux服务器的/dev/shm/

    巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的 ...

  8. Linux下使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

  9. Linux下可以使用ps命令来查看Oracle相关的进程

    Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...

随机推荐

  1. Keras实现Self-Attention

    本文转载自:https://blog.csdn.net/xiaosongshine/article/details/90600028 一.Self-Attention概念详解 对于self-atten ...

  2. 移动魔百和PTV-8098可以免拆直接安装第三方的软件

    前言:江苏用户的福音啊!当地移动魔百和PTV-8098可以免拆直接安装第三方的软件,其他地区的PTV-8098未做测试,可以自己根据教程步骤进行测试: 准备工具:8G或4G的U盘(太大无法识别).电脑 ...

  3. unity 之 背包系统

    此方法只是用于学习和实验所以细节不必要求 一.Ui设置. 画布配置如下: 布局: 说明: 画布里面首先建立一个panel命名为weapon1,在其内部再建立4个panel用于装备的卡槽,装备以imag ...

  4. Keras神经网络data generators解决数据内存

    在使用kears训练model的时候,一般会将所有的训练数据加载到内存中,然后喂给网络,但当内存有限,且数据量过大时,此方法则不再可用.此博客,将介绍如何在多核(多线程)上实时的生成数据,并立即的送入 ...

  5. 【Python学习】Python3 基础语法

    ==================================================================================================== ...

  6. Jinja2 笔记

    注释: {# haha #} 对象引用 : {{data.name}}  或者 {{data['name]}} 控制语句放到{%  %}中 {% if not has_in_gifts and not ...

  7. 完成一个springboot项目的完整总结-------二

    我们接着上篇继续写,继续进行springboot项目 一. swagger2 接口描述,测试每个接口是否有效 1. 添加依赖 pom.xml 在编辑pom.xml之前,要先关闭spring-boot项 ...

  8. attention speech recognition

    Attention:是一种权重向量或矩阵,其往往用在Encoder-Decoder架构中,其权重越大,表示的context对输出越重要.计算方式有很多变种,但是核心都是通过神经网络学习而得到对应的权重 ...

  9. Linux - 运行 django 时 :django.db.utils.Notsupportederror: urls not supported

    运行 django 是异常:django.db.utils.Notsupportederror: urls not supported 原因:sqlite3版本3.7的问题 解决:直接改源码 1. p ...

  10. Storage事件及综合案例

    说到Storage事件,那么就得先给大家说一下localstorage和sessionstorage: 1.localStorage和sessionStorage一样都是用来存储客户端临时信息的对象. ...