Centos--内存及对Oracle数据库的影响

简介: Centos的内存及对Oracle数据库的影响,文中命令的输出根据需要做了裁剪

1 共享内存段配置

1.1 使用sysctl命令查看当前内存共享段配置

[root@my_ob ~]# sysctl -p|grep kernel        sysctl: cannot stat /proc/sys/vm_nrhugepages: No such file or directory
        kernel.shmall =2097152        kernel.shmmax =536870912        kernel.shmmni =4096        kernel.sem =25032000100128

1.2 使用ipcs命令查看当前内存共享段配置

[oracle@my_ob ~]$ ipcs-ml------ Shared Memory Limits --------        max number of segments =4096        max seg size (kbytes) =524288        max total shared memory (kbytes) =8388608        min seg size (bytes) =1

1.3 比较和分析

      sysctl 命令可以显示当前内核的内存共享段配置,ipcs显示的当前用户的共享段限制,这两个命令的显示结果是相同的,但是显示的名称和单位不同,sysctl命令中shmall显示的共享内存总大小,同ipcs命令中max total shared memory相同,但是显示的单位是页,Centos中内存页的大小是4K,2097152X4=8388608,与ipcs中的值相同。shmmax是最大共享段的大小,单位是字节,536870912/1024=524288,也与ipcs中的值相同。这两个参数之所以重要是因为它们和Oracle数据库的内存参数设置有关,shmall的值小于Oracle的SGA_MAX,在数据库启动时会报“out of memory”错误,shmmax的值小于Oracle 的SGA_TARGET,数据库的SGA会被分为多个共享内存段,可能会影响性能。

     Oracle数据库报“out of memory”,也可能/dev/shm小于SGA_MAX所致,/dev/shm的大小默认时内存的一半,如下图:

[root@my_ob ~]# df -h    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 6.1G     06.1G   0% /dev
    tmpfs                    6.1G     06.1G   0% /dev/shm

1.4 查看已分配共享内存段信息

[oracle@my_ob ~]$ ipcs-m------ Shared Memory Segments --------key        shmid      owner      perms      bytes      nattch     status
0x00000000 1          oracle     64012582912270x00000000 2          oracle     640524288000270x5d3c8684 3          oracle     640209715227

shmid为2的是oracle的SGA最大的一个段,值非常接近段最大大小值。

2 内存信息查看

2.1 内存汇总信息

[root@iZ2ze0t8khaprrpfvmevjiZ ~]# vmstat -s1881892 K total memory
99084 K used memory
753964 K active memory
374664 K inactive memory
633768 K free memory
154952 K buffer memory
994088 K swap cache
0 K total swap
0 K used swap
0 K free swap
743859 non-nice user cpu ticks
216 nice user cpu ticks
1017159 system cpu ticks
126196509 idle cpu ticks
12813 IO-wait cpu ticks
0 IRQ cpu ticks
321 softirq cpu ticks
0 stolen cpu ticks
280188 pages paged in3055140 pages paged out
0 pages swapped in0 pages swapped out
1755214231 interrupts
3848532284 CPU context switches
1666665031 boot time
37239 forks

      vmstat查询的是系统启动以来的汇总信息,也可以使用下面命令查看系统当前内存使用情况。

[root@iZ2ze0t8khaprrpfvmevjiZ ~]# cat /proc/meminfo        MemTotal:        1881892 kB
        MemFree:          633560 kB
        MemAvailable:    1619912 kB    ##不用换页新应用可以使用的内存空间          Buffers:          154952 kB
        Cached:           932172 kB
        SwapCached:            0 kB
        Active:           753576 kB
        Inactive:         374544 kB
        Active(file):     712344 kB
        Inactive(file):   374332 kB
        Unevictable:           0 kB
        Mlocked:               0 kB
        SwapTotal:             0 kB
        SwapFree:              0 kB
        Dirty:               520 kB
        Writeback:             0 kB
        AnonPages:         41012 kB
        Mapped:            53488 kB
        Shmem:               452 kB
        Slab:              72632 kB

2.2 如何分析

      MemFree是系统当前空闲的物理内存,MemTotal是系统总的物理内存,MemAvailable是系统当前可用内存,是指不用进行换页就可以分配给应用的物理内存。这个值有可能小于空闲物理内存,主要是受wmark_low的影响,wmark有三个值high,low,min。

      high当剩余内存在high以上时,系统认为当前内存使用压力不大,kswapd内核线程进入睡眠状态。

      low当剩余内存降低到low时,系统就认为内存已经不足了,会触发kswapd内核线程进行内存回收处理

      min当剩余内存在min以下时,则系统内存压力非常大。一般情况下min以下的内存是不会被分配的,min以下的内存默认是保留给特殊用途使用,属于保留的页框,用于原子的内存请求操作。

       这三个值会对页面回收的产生影响,从上面对三种水位的介绍,high水位时内存很充足,内核不用特意做回收的动作,实际上,当内存降低到low watermark时,内核线程kswapd开始进行回收页面,这个回收是异步的,不会阻塞应用程序,但回收页面要回收到什么程度为止呢?这时high watermark存在的意义就体现出来了,当kswapd回收页面

发现此时内存终于达到了high水位,那么系统认为内存已经不再紧张了,所以将会停止进一步的操作。

      如果内存达到或者低于min watermark时,会触发内核直接回收操作(direct reclaim),这时会阻塞应用程序。

      这三个值的设置可以用下面的命令查看

[root@iZ2ze0t8khaprrpfvmevjiZ ~]# cat /proc/zoneinfo            Node 0, zone      DMA
              pages free     1939                    min      95                    low      118                    high     142                    scanned  0                    spanned  4095                    present  3998                    managed  3977            Node 0, zone    DMA32
              pages free     156505                    min      11168                    low      13960                    high     16752                    scanned  0                    spanned  520160                    present  520160                    managed  466496

3 linux操作系统内存管理

      linux操作系统使用伙伴系统(buddy allocator)来管理内存,伙伴系统对内存的管理是基于系统内存页的(页大小为4k),同时使用slab系统来管理内核小对象使用的内存,这些小对象使用几个至几十个字节的内存,如果使用页来管理会导致大量内存浪费,效率页也低。

     查看系统 buddy使用情况

[root@iZ2ze0t8khaprrpfvmevjiZ ~]# cat /proc/buddyinfo                      Node 0, zone      DMA      68343102220                      Node 0, zone    DMA32    1072271844112630317842200

   查看slab使用情况

[root@iZ2ze0t8khaprrpfvmevjiZ ~]# cat /proc/slabinfo          slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>          ext4_groupinfo_4k    330330136301 : tunables               000 : slabdata             11110

这里以名字为ext4_groupinfo_4k的slab进行说明,共有对象330个,活跃对象330个,对象大小136字节,每个slab有30个对象,每个slab个内存页。




相关文章
|
29天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
153 64
|
8天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
9天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
16天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
50 3
|
19天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
22 6
|
19天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
17天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
32 2
|
19天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2
|
26天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。