oracle的top命令,TOP命令

top

top 命令可能是 Oracle DBA 在 Linux 上管理数据库时最有用的命令。如果系统很慢,您可能希望查看谁在占用所有 CPU 和/或内存。要显示最大进程,可以使用 top 命令。

注意,与其他命令不同,top 不会产生输出,屏幕内容保持不变。它刷新屏幕以显示新信息。因此,如果您只执行 top 并保持屏幕一直开启,则屏幕始终显示最新信息。要停止并退出 shell,可以按下 Ctrl-C。$ top

18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18

151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped

CPU states: cpu user nice system irq softirq iowait idle

total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%

Mem: 1026912k av, 999548k used, 27364k free, 0k shrd, 116104k buff

758312k actv, 145904k in_d, 16192k in_c

Swap: 2041192k av, 122224k used, 1918968k free 590140k cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND

451 oracle 15 0 6044 4928 4216 S 0.1 0.4 0:20 0 tnslsnr

8991 oracle 15 0 1248 1248 896 R 0.1 0.1 0:00 0 top

1 root 19 0 440 400 372 S 0.0 0.0 0:04 0 init

2 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd

3 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kapmd

4 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0

7 root 15 0 0 0 0 SW 0.0 0.0 0:01 0 bdflush

5 root 15 0 0 0 0 SW 0.0 0.0 0:33 0 kswapd

6 root 15 0 0 0 0 SW 0.0 0.0 0:14 0 kscand

8 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kupdated

9 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd

... output snipped ...

让我们来看看产生的不同类型的信息。第一行:18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18

显示当前时间 (18:46:13),该系统已经运行了 11 天;并且已经工作了 21 小时 50 秒。后面显示的分别是最近 1、5、15 分钟的系统平均负载 (0.11、0.19、0.18)。(顺便提一下,您也可以通过执行 uptime 命令来获得这些信息。)

如果不需要平均负载,按下字母 "l"(小写字母 L);它将关闭。要再次将其打开,按下 l。第二行:151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped

显示进程数、运行的进程数、休眠的进程数等。第三行和第四行:CPU states: cpu user nice system irq softirq iowait idle

total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%

显示 CPU 利用率的详细信息。上面一行显示用户进程占用了 CPU 的 12.5%,系统占用了 6.7%。用户进程中包括 Oracle 进程。按下 "t" 可以关闭和打开这三行。如果有多个 CPU,屏幕将在每行显示一个 CPU 的信息。

接下来的两行:Mem: 1026912k av, 1000688k used, 26224k free, 0k shrd, 113624k buff

758668k actv, 146872k in_d, 14460k in_c

Swap: 2041192k av, 122476k used, 1918716k free 591776k cached

显示可用的和已利用的内存。内存总量为 "1026912k av"(大约 1GB),其中只有 26224k(即 26MB)是可用的。交换空间为 2GB;但几乎并未使用。要关闭和打开这两行,可以按下 "m"。

其余的显示内容以表格格式显示进程。下面对各列进行解释:

列描述

PID进程的进程 ID

USER运行该进程的用户

PRI进程的优先级

NInice 值:该值越高,任务的优先级越低

SIZE该进程使用的内存(代码+数据+堆栈)

RSS该进程使用的物理内存

SHARE该进程使用的共享内存

STAT该进程的状态,用代码显示。一些主要的状态代码包括:

R — 正在运行

S — 正在休眠

Z — 迟滞

T — 已停止您还会看到第二个和第三个字符,它们表示:

W — 已换出的进程

N — 正 nice 值

%CPU该进程使用的 CPU 百分比

%MEM该进程使用的内存百分比

TIME该进程使用的总 CPU 时间

CPU如果这是一个多处理器系统,该列指明正在其上运行进程的 CPU 的 ID。

COMMAND该进程发出的命令

显示 top 时,您可以按几个键来设置希望的显示格式。按下大写字母 M 键可根据内存使用情况对输出进行排序。(注意,使用小写字母 m 将在显示屏的顶部打开或关闭内存汇总行。)当您希望了解谁在占用内存时,该键非常有用。示例输出如下:PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND

31903 oracle 15 0 75760 72M 72508 S 0.0 7.2 0:01 0 ora_smon_PRODB2

31909 oracle 15 0 68944 66M 64572 S 0.0 6.6 0:03 0 ora_mmon_PRODB2

31897 oracle 15 0 53788 49M 48652 S 0.0 4.9 0:00 0 ora_dbw0_PRODB2

既然您了解了如何解释输出,我们来看看如何使用命令行参数。

最有用的参数是 -d,它指示两次屏幕刷新之间的延迟。要每秒刷新一次,则使用 top -d 1。

另一个有用的选项是 -p。如果您希望只监视几个进程而并非全部,可以在 -p 选项后指定这几个进程。要监视进程 13609、13608 和 13554,执行以下命令:top -p 13609 -p 13608 -p 13554

这将以和 top 命令相同的格式显示结果,但只显示特定进程的信息。

适用于 Oracle 用户的技巧

众所周知,使用 top 实用程序分析数据库服务器的性能非常方便。下面是部分 top 输出。20:51:14 up 11 days, 23:55, 4 users, load average: 0.88, 0.39, 0.27

113 processes: 110 sleeping, 2 running, 1 zombie, 0 stopped

CPU states: cpu user nice system irq softirq iowait idle

total 1.0% 0.0% 5.6% 2.2% 0.0% 91.2% 0.0%

Mem: 1026912k av, 1008832k used, 18080k free, 0k shrd, 30064k buff

771512k actv, 141348k in_d, 13308k in_c

Swap: 2041192k av, 66776k used, 1974416k free 812652k cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND

16143 oracle 15 0 39280 32M 26608 D 4.0 3.2 0:02 0 oraclePRODB2...

5 root 15 0 0 0 0 SW 1.6 0.0 0:33 0 kswapd

... output snipped ...

我们来仔细分析此输出。首先,您需要注意 CPU states 下面的 "idle" 列;该列为 0.0%,这意味着 CPU 被完全占用来执行某项任务。问题是 CPU 在做什么?将注意力转向 "system" 列,就在左侧不远处;该列显示 5.6%。这说明,系统本身占用的 CPU 并不多。再向左就是 "user" 列,该列显示 1.0%。由于用户进程还包括 Oracle,因此 Oracle 并未占用 CPU 周期。那么,到底是什么占用了整个 CPU?

答案就在同一行右侧 "iowait" 列下面,该列为 91.2%。一切都明白了:91.2% 的 CPU 时间都在等待 IO。

为什么会有这么多的 IO 等待?答案在显示内容中。注意最消耗资源的进程的 PID:16143 您可以使用以下查询来确定该进程在做什么:select s.sid, s.username, s.program

from v$session s, v$process p

where spid = 16143

and p.addr = s.paddr

/

SID USERNAME PROGRAM

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

159 SYS rman@prolin2 (TNS V1-V3)

rman 进程在进行与 CPU 周期相关的 IO 等待。该信息可以帮助您确定接下来的操作流程。

*******************************

转自ORACLE中文技术网

高级 Linux 命令精通指南,第 2 部分

作者:Arup Nanda

ace_2.gif[@more@]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、功能 A、获取top前10个Oracle的进程,并打印出(根据实际进程情况列出 R/S 状态) B、对这些进行进行PS检查资源占有情况,并确定是那个数据库实例的进程 C、根据当前目录下的connect.json配置数据库连接数据库访问,打印执行SQL 2、作用 A、避免手工操作的多个代码输入检查 传统检查操作如下: X、通过top找出占用资源的Oracle进程 Y、通过ps确定这个Oracle进程所说实例 Z、连接对应的Oracle实例找出执行SQL B、进行了占用内存大小自动转换,快速查看占有大小是G、M、K 3、将来版本 A、提供Socket侦听,使用telnet直接可以查看 B、提供telnet扩展命令,直接查看性能与语句 C、支持远程进行的直接Kill功能 D、支持SQL直接执行相关请求,并返回结果 E、提供REST外部请求服务功能 [root@fj43 tmp]# ./RunApp.sh /var/tmp/connect.json Config loaded... cpu used:98.0% 11362 oracle 20 0 2231m 485m 482m R 98.4 1.6 2737:26 oracle <----top输出 12780 oracle 20 0 2230m 30m 27m S 1.9 0.1 27:33.12 oracle <----top输出 13673 oracle 20 0 2248m 78m 75m S 1.9 0.3 0:01.29 oracle <----top输出 13980 oracle 20 0 2248m 93m 90m S 1.9 0.3 0:01.55 oracle <----top输出 18135 oracle 20 0 2251m 364m 357m S 1.9 1.2 2:20.23 oracle <----top输出 25677 oracle 20 0 2231m 31m 31m S 1.9 0.1 8:27.59 oracle <----top输出 PROC=11362 PerCPU=99.4 PerMEM=1.6 VMEM=2.0G RMEM=485.0M TIME=2737:26 CMD=[ora_j002_MG01] <----ps输出 PROC=12780 PerCPU=0.0 PerMEM=0.1 VMEM=2.0G RMEM=30.0M TIME=27:33 CMD=[ora_dia0_CSHQ] <----ps输出 PROC=13673 PerCPU=0.1 PerMEM=0.2 VMEM=2.0G RMEM=78.0M TIME=0:01 CMD=[ora_j001_CSGFC] <----ps输出 PROC=13980 PerCPU=0.2 PerMEM=0.3 VMEM=2.0G RMEM=93.0M TIME=0:01 CMD=[ora_j000_CSGFC] <----ps输出 PROC=18135 PerCPU=0.0 PerMEM=1.2 VMEM=2.0G RMEM=364.0M TIME=2:20 CMD=[ora_cjq0_FTFIN] <----ps输出 PROC=25677 PerCPU=0.0 PerMEM=0.1 VMEM=2.0G RMEM=31.0M TIME=8:27 CMD=[ora_pmon_CENTER] <----ps输出 jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CSHQ username=DBUSRBMS password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:MG01 username=DBUSROMS1 password=**** count=1 <----数据库连接 DELETE FROM SELLMAIL WHERE SMKEY = :B1 <----当前正执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CENTER username=DBUSRDAT password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:CSGFC username=DBUSRDMS password=**** count=2 <----数据库连接 not sql runing <----当前未执行SQL not sql runing <----当前未执行SQL jdbcUrl=jdbc:oracle:thin:@193.0.10.110:1521:FTFIN username=DBUSRFIN password=**** count=1 <----数据库连接 not sql runing <----当前未执行SQL [root@fj43 tmp]# 改进版输出情况: [root@dxs1 tmp]# RunApp.sh /var/tmp/connect.json Config loaded... cpu used:99.1% 12041 oracle 25 0 3467m 157m 152m R 99.0 1.0 2:03.69 oracle 12144 oracle 15 0 3463m 95m 93m S 9.9 0.6 0:00.38 oracle 12167 oracle 15 0 3463m 37m 34m S 4.0 0.2 0:00.04 oracle PROC=12041 PerCPU=87.1 PerMEM=0.9 VMEM=3.0G RMEM=157.0M TIME=2:03 CMD=[oracleMG01 (LOCAL=NO)] PROC=12144 PerCPU=9.5 PerMEM=0.6 VMEM=3.0G RMEM=96.0M TIME=0:00 CMD=[oracleMG01 (LOCAL=NO)] PROC=12167 PerCPU=4.0 PerMEM=0.2 VMEM=3.0G RMEM=37.0M TIME=0:00 CMD=[oracleMG01 (LOCAL=NO)] jdbcUrl=jdbc:oracle:thin:@193.0.0.77:1521:MG01 username=DBUSROMS1 password=**** count=3 SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12167' AND TB.sql_address!='00' not sql runing SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12041' AND TB.sql_address!='00' session id=13 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C9641F0') AND HASH_VALUE = 2890562617 ORDER BY PIECE /* concatenate */ Update goods a Set (goodsid,obligatestr1,goodsflag,fgoodsid,code number,codegrade)= (Select goodsid,obligatestr1,goodsflag,fgood sid,codenumber,codegrade From goods_20130720 b Where a.goodsid=b .goodsid) SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12144' AND TB.sql_address!='00' session id=475 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C973940') AND HASH_VALUE = 3246036779 ORDER BY PIECE /* concatenate */ INSERT INTO "DBUSROTHER"."FJ_SALEDETAIL" ("SDMKTNO","SDCOUNTER" ,"SDBILLNO","SDROWNO","SDPOSNO","SDINVNO","SDDATE","SDSWAPDATE", "SDSELLER","SDSELLERNM","SDGDID","SDBARCODE","SDGNM","SDUID","SD UNIT","SDSPEC","SDSALEQNT","SDSALEPRICE","SDSALEAMT","SDSWAPPRIC E","SDSWAPAMT","SDPOPDISAMT","SDPOPDISPARTAKE","SDPOPBILLNO","SD CUSTDISAMT","SDGRANTZK","SDGRANTNO","SDSORT","SDANALCODE","SDOLD DATE","SDOLDPOSNO","SDOLDINVNO","SDRETREASON","SDTAXRATE","SDINP BARCODE","SDDISTOTAL","SDMULTOTAL","SDKJKCBZ","SDSPML","SDBATCHN O","SDPROMPRICE") SELECT "A2"."SDMKTNO","A2"."SDCOUNTER",TO_CHAR ("A2"."SDSWAPDATE",'yymmdd')||SUBSTRB("A2"."SDMKTNO",(-3))||SUBS TRB("A2"."SDPOSNO",(-2))||SUBSTRB(TO_CHAR("A2"."SDINVNO",'000000 00'),(-4)),"A2"."SDROWNO","A2"."SDPOSNO","A2"."SDINVNO","A2"."SD DATE","A2"."SDSWAPDATE","A2"."SDSELLER","A2"."SDSELLERNM","A2"." SDGDID","A2"."SDBARCODE","A2"."SDGNM","A2"."SDUID","A2"."SDUNIT" ,"A2"."SDSPEC","A2"."SDSALEQNT","A2"."SDSALEPRICE","A2"."SDSALEA MT","A2"."SDSWAPPRICE","A2"."SDSWAPAMT","A2"."SDPOPDISAMT","A2". "SDPOPDISPARTAKE","A2"."SDPOPBILLNO","A2"."SDCUSTDISAMT","A2"."S DGRANTZK","A2"."SDGRANTNO","A2"."SDSORT","A2"."SDANALCODE","A2". "SDOLDDATE","A2"."SDOLDPOSNO","A2"."SDOLDINVNO","A2"."SDRETREASO N","A2"."SDTAXRATE","A2"."SDINPBARCODE","A2"."SDDISTOTAL","A2"." SDMULTOTAL","A2"."SDKJKCBZ","A2"."SDSPML",DECODE(TRIM("A2"."SDBA TCHNO"),'N',NULL,"A2"."SDBATCHNO"),"A2"."SDPROMPRICE" FROM "POS" ."SALEDETAIL"@! "A2" WHERE TO_CHAR("A2"."SDSWAPDATE",'yymmdd')|| SUBSTRB("A2"."SDMKTNO",(-3))||SUBSTRB("A2"."SDPOSNO",(-2))||SUBS TRB(TO_CHAR("A2"."SDINVNO",'00000000'),(-4))='130720002043323' [root@dxs1 tmp]# RunApp.sh /var/tmp/connect.json Config loaded... cpu used:196.6% 12041 oracle 25 0 3467m 168m 163m R 98.9 1.1 5:10.29 oracle 12287 oracle 19 0 3465m 102m 97m R 98.9 0.6 0:05.46 oracle PROC=12041 PerCPU=94.3 PerMEM=1.0 VMEM=3.0G RMEM=168.0M TIME=5:10 CMD=[oracleMG01 (LOCAL=NO)] PROC=12287 PerCPU=91.8 PerMEM=0.6 VMEM=3.0G RMEM=102.0M TIME=0:05 CMD=[ora_j001_MG01] jdbcUrl=jdbc:oracle:thin:@193.0.0.77:1521:MG01 username=DBUSROMS1 password=**** count=2 SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12041' AND TB.sql_address!='00' session id=13 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('000000007C9641F0') AND HASH_VALUE = 2890562617 ORDER BY PIECE /* concatenate */ Update goods a Set (goodsid,obligatestr1,goodsflag,fgoodsid,code number,codegrade)= (Select goodsid,obligatestr1,goodsflag,fgood sid,codenumber,codegrade From goods_20130720 b Where a.goodsid=b .goodsid) SELECT RAWTOHEX(TB.SQL_ADDRESS) SQL_ADDRESS,TB.SQL_HASH_VALUE,TB.SID FROM v$process TA INNER JOIN v$session TB ON TA.addr=TB.paddr WHERE TA.spid='12287' AND TB.sql_address!='00' session id=327 SELECT SQL_TEXT FROM V$SQLTEXT_WITH_NEWLINES WHERE ADDRESS = HEXTORAW('0000000081A93490') AND HASH_VALUE = 2457621776 ORDER BY PIECE /* concatenate */ INSERT INTO SELLPAYMENT SELECT TO_NUMBER(SPBILLNO), SPPAYCODE, S UM(SPPAYMENTAMT), SPRATE, SPNO, SPPAYERID FROM SALEPAYMENT WHERE SPBILLNO = :B3 AND SPPOSNO = :B2 AND SPINVNO = :B1 GROUP BY SPB ILLNO, SPPAYCODE, SPRATE, SPNO, SPPAYERID [root@dxs1 tmp]#

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值