阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux上设置大内存页解决kswapd0进程过渡消耗cpusys的问题

452次阅读
没有评论

共计 3401 个字符,预计需要花费 9 分钟才能阅读完成。

环境:SLES11 SP4 + Oracle 11.2.0.4

新搭建测试数据库,跑了两天左右发现一个名为 kswapd0 的进程竟然占用了 1 个 cpu 资源 (该主机一共只有 2 个 cpu),而且几乎都耗在 cpusys 上。
如下图所示:
图 1

网上搜索得知 kswapd0 是一个内核进程,用来处理页的交换,当 OS 的可用内存小于阀值时,kswapd 会将部分进程的页从物理内存交换到 swap 上,这个阀值如何确定,颇费周折的找寻了一番仍然没有结果,至少在 SLES 11 这个版本下打消了我通过修改阀值来阻止 kswapd0 进程过渡活跃地消耗 cpusys 的解决思路。

从数据库层面入手,首先检查 SGA 是否被 lock 在了内存里
SQL> show parameter lock_sga

NAME                                 TYPE                   VALUE
———————————— ———————- ——————————
lock_sga                             boolean                TRUE
SQL> 

OS 层面再 double check 一下,确实 lock 住了
oracle@cspdb1:~> ipcs -m

—— Shared Memory Segments ——–
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 196611     oracle     640        16777216   29                locked   <– 确实 lock 住了
0x00000000 229380     oracle     640        1560281088 29                locked
0xf8e2566c 262149     oracle     640        2097152    29                locked

OS 层面检查物理内存尚有空闲,而真正的 swap 动作发生的次数并不多,不然应用早就来投诉了

图 4
Linux 上设置大内存页解决 kswapd0 进程过渡消耗 cpusys 的问题


图 5

从上述检查结果我们初步可以判断: 数据库的 SGA 确被锁定在了物理内存里,kswapd0 虽然辛勤劳作 (占去了一个 cpu 资源) 但产出却很少(被 swap 出来的页很少)

该服务器上除了 oracle db 外,并没有其它应用,db 上的会话数也只有几十个,因此最大的内存空间还是 SGA,想起之前曾经在 AIX 上启用过大内存页,最大的好处当然是提供更大 size 的连续页块,减少页表在内存里的占用空间,加快页表的搜索速度,还有一个好处就是大内存页永远不会被 swap out

为排除 SGA 可能会被换出物理内存或者至少避免 kswapd0 进程对 SGA 区域进行的无谓扫描来检测是否有能被 swap out 的页,我们按照如下步骤启用大内存页

###1、设定 /etc/security/limits.conf 以及设定后的检查
*   soft   memlock    unlimited
*   hard   memlock    unlimited

— 以 oracle 登录主机运行检查上述设定是否生效
oracle@cspdb1:~> ulimit -Hl
unlimited
oracle@cspdb1:~> ulimit -Sl
unlimited      

###2、确认没有启用 AMM,因为 AMM 和 lock_sga 不兼容
set linesize 100
col name format a30
col value format a30
select name,value from v$system_parameter where name in (‘memory_target’,’memory_max_target’,’lock_sga’);

NAME                           VALUE
—————————— ——————————
lock_sga                       TRUE
memory_target                  0
memory_max_target              0

— 如果 AMM 参数或者 lock_sga 设置不符合要求,可以按照如下步骤重设
SQL> alter system reset memory_max_target;

SQL> alter system reset memory_target;

SQL> alter system set lock_sga=true scope=spfile;

###3、设置大内存页
— 计算大内存页的数量,注意执行这一步的时候必须保证实例至少启动到 nomount 状态
oracle@cspdb1:~> ipcs -m

—— Shared Memory Segments ——–
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 196611     oracle     640        16777216   29                locked
0x00000000 229380     oracle     640        1560281088 29                locked
0xf8e2566c 262149     oracle     640        2097152    29                locked

oracle@cspdb1:~> cat /proc/meminfo | grep Hugepagesize
Hugepagesize:       2048 kB

最终需要的 hugepages=(16777216/2048/1024+1)+(1560281088/2048/1024+1)+(2097152/2048/1024+1)=756

— 在 /etc/sysctl.conf 里加入
vm.nr_hugepages=756

###4、重启数据库实例与主机,检查大内存页设置是否生效
sqlplus ‘/as sysdba’
shutdown immediate

init 6

cspdb1:~ # sysctl -n vm.nr_hugepages
756

oracle@cspdb1:~> grep HugePages /proc/meminfo
AnonHugePages:     45056 kB
HugePages_Total:     756
HugePages_Free:      756
HugePages_Rsvd:        0
HugePages_Surp:        0

startup

oracle@cspdb1:~> ipcs -m

—— Shared Memory Segments ——–
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 196611     oracle     640        16777216   27                     <— 状态从 locked 变为空值了,说明大页天生不会被 swapout,所以不 care lock_sga 的设置:)
0x00000000 229380     oracle     640        1560281088 27                      
0xf8e2566c 262149     oracle     640        2097152    27    

cspdb1:~ # grep HugePages /proc/meminfo
AnonHugePages:     67584 kB
HugePages_Total:     756
HugePages_Free:      623                    <—Free < Total,说明已经有 huge page 被使用了
HugePages_Rsvd:      620
HugePages_Surp:        0

过去一周了 kswapd0 进程没有再冒泡上来,详见下图
图 6

以下是我对这个现象原因的猜测:当 SGA 以普通页的形式存在于内存中的时候,虽然 lock_sga=TRUE,但仍然无法阻止 kswapd0 进程对于 sga 内存区域的不断扫描当然结果是不会有 page 会被 swap out,因为 lock_sga=TRUE。但这一过程中存在较多的内核级调用所以 kswapd0 进程会占用大量的 cpusys 资源。所以彻底的方法就是启用大内存页 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133124.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3401字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7802800
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...