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个内存页。




相关文章
|
27天前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
24天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
存储 Oracle 关系型数据库
Oracle同一台服务器创建多个数据库
【8月更文挑战第30天】在 Oracle 中,可在同一服务器上创建多个数据库。首先确保已安装 Oracle 软件并具有足够资源,然后使用 DBCA 工具按步骤创建,包括选择模板、配置存储及字符集等。重复此过程可创建多个数据库,需确保名称、SID 和存储位置唯一。创建后,可通过 Oracle Enterprise Manager 进行管理,注意服务器资源分配与规划。
26 10
|
19天前
|
存储 Oracle 关系型数据库
分享几个Oracle数据库日常维护中常见的问题
分享几个Oracle数据库日常维护中常见的问题
68 1
|
21天前
|
存储 缓存 NoSQL
Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!
【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。
35 2
|
1月前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
|
1月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
85 2
|
14天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之Oracle数据库是集群部署的,怎么进行数据同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
19天前
|
Oracle 关系型数据库 数据库
Oracle数据库备份脚本分享-Python
Oracle数据库备份脚本分享-Python
21 0
|
27天前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决

热门文章

最新文章