love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

Linux信号量设置不当导致Sys cpu%过高(Oracle 19c版本)

近期某客户的环境出现了不正常的一幕,Linux sys% cpu消耗过高,高峰期间甚至高达30%+,比usr%还要高。

在早高峰到来之前可以看到sys高达25,这是不正常的。在后续的分析过程中通过多次top 抓取发现大量的scmn进程消耗cpu过多:

通过perf top可以抓取到相关的堆栈信息:

scmn进程本身是Oracle 12c 引入新特性Multi-Threaded architecture of processes 时所带来的新特性,尽管改新特性在19c中默认仍然是关闭的;可以通过如下如下参数设置为true来进行启用:

threaded_execution = true

对于此类新特性,我个人建议暂时先不要使用,毕竟Oracle 默认仍然将其关闭,可见目前并不稳定。

最后根据High SYS CPU Usage ON LMS Thread (SCMN/CR00/RS01) During High Workload (Doc ID 2707048.1) 的描述来看,配合我们后续perf top 抓取的堆栈,基本上是符合的。

最终还是将信号量做了调整;将

kernel.sem =12000 1536000 12000 128
调整为:
kernel.sem =1024  66666  1024  256
从目前来看,该问题仅存在18c+的版本中,至少我们在现有客户环境中12.2环境中没有发现该问题(同样环境压力也很大,process设置也非常高,均超过5000-单节点).
总结:
1、18c+版本,尤其是现在大家使用19c版本,需要注意信号量的设置,并非越大越好;够用即可;否则可能命中sys%消耗过高的问题;
2、经过19c默认并没有启用多线程进程特性,然而部分进程仍然使用了多线程,猜测这是触发该问题的关键。99% 是Bug导致。

Leave a Reply

You must be logged in to post a comment.