今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不上数据库,经查看,数据库在晚上10点的时候挂掉,告警日志报错如下:
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 7868514304 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 7857356800 and used is 562315264 bytes. Ensure that the mount point is /dev/shm for this directory.
memory_target needs larger /dev/shm
启动数据库,报ORA-00845错误。
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
原因是昨天下午3点多,测试人员说SHARED_POOL不够,要求增大SHARED_POOL,我们的数据库是11gR2,内存自动管理,MEMORY_TARGET的值为5GB,可是观察AWR报告的内存建议,1.8GB的SHARED_POOL应该是够用的,可是测试的有需求,只好将MEMORY_TARGET改成8GB,我们的服务器是16GB的内存的RHEL 5.4操作系统,昨天下午测试人员一直在这套系统上工作,没有问题,晚上10点,数据库自动收集统计信息时,数据库挂掉。导致数据库挂掉的原因是MEMORY_TARGET超过了/dev/shm的大小。
/dev/shm是LINUX的tmpfs,一般都被理解为虚拟磁盘,但是它和虚拟磁盘还不一样,tmpfs是个文件系统,并不像虚拟磁盘是个块设备,tmpfs可以使用内存,内存不足时使用交换分区,也不需要使用mkfs命令创建,典型的 tmpfs 文件系统会完全驻留在内存中,所以对tmpfs的操作速度非常快,但是由于数据会保留在内存中,所以,当服务器关闭或重启后,这里面的数据会丢失。ORACLE使用的也是tmpfs,所以,MEMORY_TARGET不能超过/dev/shm的大小,就像MEMORY_TARGET不能超过MEMORY_MAX_TARGET和SGA_TARGET不能超过SGA_MAX_SIZE的大小一样。
我们的服务器16GB内存,/dev/shm的大小默认是操作系统内存的一半,但是由于16G的内存实际达不到16GB,所以/dev/shm的默认大小达不到8GB,如下:
[oracle@dbserver1 ~]$ cat /proc/meminfo | grep MemTotal
MemTotal: 16444672 kB
可以看到内存15.68GB,并没有达到16GB。
[oracle@dbserver1 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_dbserver1-lv_root
50G 19G 29G 40% /
tmpfs 7.9G 4.6G 3.3G 59% /dev/shm
/dev/sda1 485M 48M 412M 11% /boot
/dev/mapper/vg_dbserver1-lv_home
2.7T 268G 2.3T 11% /home
tmpfs为7.9GB,也没有达到8GB,当MEMORY_TARGE=8GB而tmpfs没有完全被使用的情况下,数据库可以正常运行,但是当tmpfs完全被使用,数据库分不到新的内存,就挂掉了,解决方法是增大tmpfs的大小,或者将MEMORY_TARGE调小,为满足测试人员的需求,只好调整tmpfs的大小。
[root@dbserver2 ~]# mount -o size=15000M -o nr_inodes=1000000 -o noatime,nodirat
ime -o remount /dev/shm
注意:利用这种方式增大tmpfs大小,需要在tmpfs没有使用的情况下才可以,否则会因为无法remount而报错。
[oracle@dbserver1 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_dbserver1-lv_root
50G 19G 29G 40% /
tmpfs 15G 0 15G 0% /dev/shm
/dev/sda1 485M 48M 412M 11% /boot
/dev/mapper/vg_dbserver1-lv_home
2.7T 268G 2.3T 11% /home
此时,tmpfs被改为15GB,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件,当/dev/shm使用内存空间不够时可以占用swap的空间,所以不用担心存储空间不够用的问题。
启动数据库,问题解决。
在之后的测试中,如果修改MEMORY_TARGET大于SHM数据库无法启动,但之前为什么可以启动很奇怪。
分享到:
相关推荐
【传奇2】DB数据库操作例子。@lovekaipig。
linux下内存管理shm封装库 自己写的
系统V共享内存是已知的Unix /Linux系统中最快的进程间通信方式,那么要想采用SHM方式申请共享内存需要做哪些操作呢?
利用系统五共享内存实现进程间数据共享 shm_read.c shm_write.c
实现了从通达信软件的数据文件中提取数据保存至MySQL的功能,每运行一次就同步到最新状态
photoshare.db-shm
通达信股票代码文件名由shex.tnf,szex.tnf变更为shm.tnf,szm.tnf,每条记录的长度由250字节增加到314字节,相应字段的地址偏移量发生变化
linux 进程间通信 系统调用 sharememory 实现 。(此为博客代码下载)
springmvc4+hibernate4+mybatis3框架整合,maven架构
Watch.SHM.MOD.1.1.0.215.dante63.apk
tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件。 Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页...
这是H.265/SHVC的测试软件,未经任何更改,官网直接下载的!
shm_container, 高性能服务器的共享内存容器集合 shm容器文档简介共享内存最好是一种有效的IPC方法,而且它是一个强大的服务器架构设计 Pattern,具有进程重新启动而没有丢失内存数据通过分离的流程实现模块化在一个...
Dahua大华DH-SHM1063B 使用说明书.pdf
通达信的股票代码放在shm.tnf和szm.tnf 新版的略有变化,解析后直接存入数据 结合上期数据采集,可以看到完整的股票数据了 用到存储过程 BEGIN select count(*) into @code from codes where code=st_code; if ...
226564221339008Watch4.SHM.MOD.1.1.0.175.apk
traffic-shm (Anna)一个基于Java的无锁IPC库,其设计用于在同一服务器上的进程间通信(IPC)。
wl-camera-shm 基于weston-simple-shm的Wayland相机抓拍程序 依赖关系 Wayland-客户 建造 $ git clone https://github.com/faith0x7dc/wl-camera-shm.git $ cd wl-camera-shm $ make 跑步 $ ./wl-camera-shm 或者...