Oracle进程“僵尸”究竟是何方妖怪?(oracle 僵尸进程)

Oracle进程“僵尸”究竟是何方妖怪?

Oracle进程“僵尸(zombie)”这个名称来源于电影《虫虫特攻队》,“僵尸”指得是一种状态,通常指的是那些已经停止运行的进程,但又被其他进程引用,以致不能被正确终止的进程。在Orcale中,“僵尸进程”发生通常是由于主进程(parent)意外终止,而僵尸进程未能被系统清理导致的,一旦发生僵尸进程,系统性能会大幅度下降,以致系统无响应。因此,必须及时清理僵尸进程,使系统能够正常运行。

要清理僵尸进程,需要通过 OracleServer Manager来查看,可以执行如下SQL语句:

SELECT obl.oracle_username, bl.sid,

pg.spid, b.program, b.status

FROM v$process pg, v$session bl, v$bgprocess b, v$register ob

WHERE pg.addr (* + *) = bl.paddr

AND b.paddr (* + *) = ob.paddr

AND pg.addr (* + *) = b.paddr

AND b.status = ‘ACTIVE’;

上面这个 SQL 语句用于查询当前 Oracle 中的僵尸进程,其中有两个字段 status 和 program 两个字段需要进行判断,status 为 ACTIVE,program 为 oracle 的进程名称。当查询出的结果中出现这种情况的时候,就意味着僵尸进程发生了。

出现僵尸进程,就需要对僵尸进程进行清理,可以使用系统提供的清理工具来清理,比如Linux系统可以使用 kill 命令来清理僵尸进程,例如,执行以下命令:

kill -9 PID

PID是僵尸进程的进程号,当然还可以使用Oracle的一些工具,比如Oracle的服务管理器、服务器参数文件等来清理僵尸进程。

总之,Oracle 进程“僵尸”是由于主进程意外终止而导致不能被正确终止的进程,一旦发生僵尸进程,系统性能会大幅度下降,以致系统无响应,因此,必须及时清理僵尸进程,从而保证系统正常工作。


数据运维技术 » Oracle进程“僵尸”究竟是何方妖怪?(oracle 僵尸进程)