如何快速杀死占用过多资源(CPU,内存)的数据库进程(来自eygle)

原创 2007年10月15日 14:01:00
很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令Kill进程:
alter system kill session 'sid,serial#';

但是此命令释放资源极为缓慢,具体可以参考:Oracle中Kill session的研究.
为了更快速的释放资源,通常我们使用如下步骤来Kill进程:
1.首先在操作系统级kill进程
2.在数据库内部kill session
这样通常可以快速中止进程,释放资源。

今天就遇到这样一个案例,其他朋友在数据库里kill session,可是长时间仍无效果:
[oracle@danaly ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 27 11:09:50 2005

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL> select sid,username,status from v$session;

       SID USERNAME                       STATUS
---------- ------------------------------ --------
....
       154 SCOTT                          KILLED
...

30 rows selected.

那按照我前面提到的步骤,首先查询得到该session对应的OS进程号:
SQL> select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid);
Enter value for sid: 154
old   1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid)
new   1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=154)

'KILL-9'||SPID
--------------------
kill -9 22702

SQL> !

在操作系统级kill该进程:
[oracle@danaly ~]$ ps -ef|grep 22702
oracle   22702     1  0 Oct25 ?        00:00:02 oracledanaly (LOCAL=NO)
oracle   12082 12063  0 11:12 pts/1    00:00:00 grep 22702
[oracle@danaly ~]$ kill -9 22702
[oracle@danaly ~]$ ps -ef|grep 22702
oracle   12088 12063  0 11:12 pts/1    00:00:00 grep 22702
[oracle@danaly ~]$ exit
exit

SQL> select sid,username,status from v$session;

       SID USERNAME                       STATUS
---------- ------------------------------ --------
...
       154 SCOTT                          KILLED
...

30 rows selected.

SQL> select sid,serial#,username from v$session where sid=154;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       154      56090 SCOTT

再次在数据库中kill该session,并指定immediate选项:
SQL> alter system kill session '154,56090' immediate;

System altered.

SQL> select sid,serial#,username from v$session where sid=154;

no rows selected

此时该进程被迅速清除。
 

Ubuntu查看系统资源占用(内存,cpu和进程)

1. top 实时地对系统处理器的状态进行监视。 TOP前五行统计信息:
  • we_shell
  • we_shell
  • 2014年07月04日 15:47
  • 6711

php-fpm占用系统资源分析

故障检测 1.别的先不管,先top看一下cpu、ram、swap哪个比较紧张。     由上图分析,可以看出共有602个进程,其中有601个进程休眠了。这好像有点不对劲,内核进...
  • xhjcehust
  • xhjcehust
  • 2016年08月02日 17:01
  • 1351

查看进程的内存和CPU占用

方法1: ps -p pid> -o %cpu,%mem,cmd 例子: $ ps -p 12902 -o %cpu,%mem,cmd %CPU %MEM CMD 36.1 10.0 /...
  • CaspianSea
  • CaspianSea
  • 2016年10月28日 22:11
  • 457

Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程

作者:eygle出处:http://www.eygle.com/blog日期:October 27, 2005本文链接:http://www.eygle.com/archives/2005/10/or...
  • eygle
  • eygle
  • 2005年11月10日 23:19
  • 5432

如何快速杀死占用过多资源(CPU,内存)的数据库进程

  • zgqtxwd
  • zgqtxwd
  • 2008年04月30日 17:49
  • 180

查看Android 系统单个进程内存、CPU使用情况的几种方法

一、利用Android API函数查看 1.1 ActivityManager查看可用内存。 ActivityManager.MemoryInfo outInfo = new ActivityMa...
  • sergeycao
  • sergeycao
  • 2015年05月20日 17:19
  • 1832

Centos6下通过pidstat查看各进程资源(CPU、Memory、Disk)占用情况

环境说明 Centos6.8 x86_64 使用说明 很多时候我们需要查看各进行对于硬件资源的占用情况,譬如说CPU、Memory、Disk,在Centos6下可以通过pidstat可以查看进行...
  • bobpen
  • bobpen
  • 2016年10月13日 11:13
  • 3947

linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现

转自linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现?快速清理木马流程。 假设木马的名字是xysbqaxjqy,如果top看不到,可以在/etc/ini...
  • qq_32642039
  • qq_32642039
  • 2017年08月14日 18:57
  • 186

linux如何查看当前占用CPU或内存最多的5个进程

可以使用一下命令查使用内存最多的5个进程ps -aux | sort -k4nr | head 5 或者top (然后按下M,注意大写) 可以使用一下命令查使用CPU最多的5个进程ps -aux | ...
  • huoyin
  • huoyin
  • 2010年07月28日 16:42
  • 3854

进程和cpu的优化

资讯 安全 论坛 下载 读书 程序开发 数据库 系统 网络 电子书 微信学院 站长学院 QQ 手机软件 考试 Linux| Windows| Dos命令行| 浏览器| 虚拟机...
  • llziseweiqiu
  • llziseweiqiu
  • 2016年05月15日 11:21
  • 1019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何快速杀死占用过多资源(CPU,内存)的数据库进程(来自eygle)
举报原因:
原因补充:

(最多只允许输入30个字)