偶遇 smon 进程cpu 开销高异常分析

今天突然发现线上一台oracle 数据库 服务器cpu 跑的很高,感觉不是很正常,仔细看了下;发现是smon 进程吃掉了一个cpu。

那么这个smon 进程到底在倒腾啥玩意

对smon 进程开启10046 跟下不就全明了了么

分析trace 文件就这么一个sql语句 ,这玩意在删smon_scn_time

delete from smon_scn_time where thread=0 and scn =  (select min(scn) from smon_scn_time where thread=0)

SQL> select count (*) from sys.smon_scn_time;

COUNT(*)

----------

57123

SQL> select object_id from dba_objects where object_name = ‘SMON_SCN_TIME‘;

OBJECT_ID

----------

575

SQL> select * from v$locked_object where object_id = 575;

XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID

---------- ---------- ---------- ---------- ----------

ORACLE_USERNAME                OS_USER_NAME                   PROCESS

------------------------------ ------------------------------ ------------

LOCKED_MODE

-----------

27         15      33429        575        164

oracle                         30801

3---行独占锁

查了下mos,找到一个文档 LOCK ON SYS.SMON_SCN_TIME (文档 ID 747745.1)

本故障的现象:

smon 进程在数据库一启动后就会对smon_scn_time 加一个锁,并且永远都不会释放

根本原因是表和索引不一致。每次删除记录为0条,因此删除操作会一直持续,为了保证表中记录小于

最大映射范围值。

With the Partitioning, OLAP and Data Mining options

[[email protected] adump]$ sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jul 15 09:25:26 2015

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

----限制smon更新 smon_scn_time 表

SQL> alter system set events ‘12500 trace name context forever, level 10 ‘;

System altered.

---手动清理表记录

SQL> delete from smon_scn_time;

2452 rows deleted.

SQL> commit;

Commit complete.

----关闭限制

SQL> alter system set events ‘12500 trace name context off ‘;

System altered.

这里留了一个疑惑?

为什么smon_scn_time 表和索引会不一致呢?

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 11:59:27

偶遇 smon 进程cpu 开销高异常分析的相关文章

Java虚拟机六:Java进程占用cpu过高问题分析

在平时开发过程中,经常会碰到Java进程占用cpu过高的现象,本篇将简单记录一下自己分析该类问题的步骤. 1.使用 top -p <pid> 命令(<pid>为Java进程的id号)查看Java进程的cpu占用: 该Java进程占用cpu达到92.2%. 2.使用 top -Hp <pid>  命令(<pid>为Java进程的id号)查看该Java进程内所有线程的资源占用情况(按shft+p按照cpu占用进行排序,按shift+m按照内存占用进行排序)此处按

Java进程CPU使用率高排查

近期java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下. 1.jps 获取Java进程的PID. 2.jstack pid >> java.txt 导出CPU占用高进程的线程栈. 3.top -H -p PID 查看对应进程的哪个线程占用CPU过高. 4.echo "obase=16; PID" | bc 将线程的PID转换为16进制. 5.在第二步导出的Java.txt中查找转换成为16进制的线程PID.找到对应的线程栈. 6.分析负载高

后台服务器CPU使用率高 问题分析方法

一.找出cpu使用率高的进程和线程: a.将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd--sort=%cpu b.对于多线程的服务,通过top命令得到cpu使用率高的进程后,可以使用如下命令查看该进程下各线程cpu使用率 ps -eLo pid,lwp,pcpu | grep PID c.直接使用 ps Hh -eopid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号 二.gdb调试cpu使

java进程CPU飙高

因为这段时间一直在弄监控,但是工作还是在进行中 因为机器不多,所以今天早上巡检了一下,看到一台生产机器上的CPU飙高 top 然后就请出了大神工具JVM 具体JVM的介绍看:http://www.cnblogs.com/smail-bao/p/6027756.html CPU飙高的话,我们就是用jstack的工具 首先我们使用top查出来是哪个进程导致的CPU飙高 这里我们看到是PID号为11506的进程 这个进程对应的项目是哪个(为了后面可以把错误的定位发给相关的开发人员看),使用ps -au

AIX emxp_xcr 进程cpu 开销过大导致db 很慢

topas现象: #powermt version 5.5 FYI: http://www.aixchina.net/club/thread-97079-1-1.html 这个进程是EMC POWERPATH的一个加密进程,出现占用CPU过高的情况,根治的方法是升级版本,但需要重启分区..... 临时解决办法: 1.     Halt the currently running process with kill -9 <pid no. > 2.     To prevent the emcp

Java进程CPU占用高导致的网页请求超时的故障排查

一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多. 二.定位故障 根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下: 2.1.根据思路查看高占用的"进程中"占用高的"线程",追踪发现7163的进程中16298的线程占用较高,使用命令: top -Hbp 7163 | a

Linux 线程占用CPU过高定位分析

今天朋友问我一个Linux程序CPU占用涨停了,该如何分析, CPU占用过高,模拟CPU占用过高的情况 先上一段代码: 1 #include <iostream> 2 #include <thread> 3 #include <vector> 4 5 6 int main(int argc, char **argv) { 7 8 std::vector<std::thread> test_threads; 9 for(int i = 0; i < 9;

查看Linux进程CPU过高具体的线程堆栈(不中断程序)

1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 up 850 days,  1:18,  3 users,  load average: 1.04, 1.01, 0.99 Tasks:  61 total,   1 running,  60 sleeping,   0 stopped,   0 zombie Cpu(s):  1.4% us,  0.1% sy,  0.0% ni, 98.3% id,  0.1% wa,  0.0% hi,  0.2% si 

CentOS进程资源占用高原因分析命令

1.查看进程的线程:ps -eLf|egrep 'gateserver|UID' 2.跟踪线程调用: strace  -p 15530 3.统计线程中函数的调用小号CPU时间:strace  -p 16334 -c IT网.cn,http://www.it.net.cn strace  -p 15530 -o out.file #输出到out.file文件 4.只显示recv函数的调用:strace  -p 5314 -f -F -e recv 5.gdb调试线程:gdb  -p  pid 6.