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




相关文章
|
30天前
|
缓存 监控 Linux
CentOS系统如何查看当前内存容量。
以上方法都不需要特殊软件或者复杂配置即可执行,在CentOS或其他Linux发行版中都适合运行,并且它们各自透露出不同角度对待问题解答方式:从简单快速到深入详尽;从用户态到核心态;从操作层数到硬件层数;满足不同用户需求与偏好。
196 8
|
3月前
|
Oracle 关系型数据库 Linux
MyEMS开源系统安装之CentOS/RHEL/Rocky/AlmaLinux/Oracle Linux
本指南介绍如何在CentOS/RHEL/Rocky/AlmaLinux/Oracle Linux服务器上部署MyEMS开源能源管理系统。内容涵盖系统准备、数据库配置、多个MyEMS服务(如myems-api、myems-admin、myems-modbus-tcp等)的安装与配置,以及Nginx服务器设置和防火墙规则调整。通过完成所有步骤,您将能够访问MyEMS Admin UI和Web UI,默认端口分别为8001和80,初始登录凭据已提供。
136 0
|
7月前
|
监控 Linux
centos 中查看 内存及磁盘使用率
通过这些命令,您可以全面了解系统资源的使用情况,从而更好地管理和优化系统。
1283 22
|
6月前
|
SQL 存储 缓存
【赵渝强老师】达梦数据库的内存结构
本文介绍了达梦数据库管理系统的内存结构,包括内存池、缓冲区、排序区和哈希区。内存池分为共享内存池和运行时内存池,能够提高内存申请与释放效率,并便于监控内存使用情况。缓冲区涵盖数据缓冲区、日志缓冲区、字典缓冲区和SQL缓冲区,用于优化数据读写和查询性能。排序区和哈希区分别提供排序和哈希连接所需的内存空间,通过合理配置参数可提升系统效率。文内附有具体配置示例及视频讲解,帮助用户深入理解达梦数据库的内存管理机制。
161 0
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
474 4
|
10月前
|
Oracle 关系型数据库 MySQL
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
419 1
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
348 1
|
10月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
4585 2
|
11月前
|
存储 缓存 API
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
141 6

热门文章

最新文章