温馨提示×

linux oracle如何监控进程

小樊
35
2026-10-16 04:07:28
栏目: 云计算

在 Linux + Oracle 环境下,“监控进程”通常分两类:
1️⃣ 操作系统层面(Linux 进程)
2️⃣ Oracle 数据库内部进程(后台进程 / 用户会话)

下面按实际使用场景系统说明。


一、Linux 层面监控 Oracle 相关进程

1️⃣ 查看 Oracle 进程是否存在

ps -ef | grep oracle
ps -ef | grep ora_

常见进程:

  • ora_pmon_实例名
  • ora_dbw0_实例名
  • ora_lgwr_实例名
  • ora_ckpt_实例名
  • ora_smon_实例名

2️⃣ 查看监听进程

ps -ef | grep tnslsnr
lsnrctl status

3️⃣ 实时监控进程资源占用

top -u oracle
htop        # 需安装

按 CPU / 内存排序,关注:

  • oracle 用户进程
  • 异常高 CPU 的 ora_* 进程

4️⃣ 查看进程打开的文件 / 连接

lsof -u oracle
lsof -p <PID>

二、Oracle 数据库内部进程监控(重点)

1️⃣ 查看数据库后台进程

SELECT name, description
FROM v$bgprocess
WHERE paddr <> '00';

2️⃣ 查看所有会话(用户进程)

SELECT
  sid,
  serial#,
  username,
  status,
  program,
  machine,
  osuser
FROM v$session
WHERE type != 'BACKGROUND';

3️⃣ 查看正在执行的 SQL

SELECT s.sid, s.serial#, s.username, q.sql_text
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'ACTIVE';

三、监控异常 / 阻塞进程(DBA 常用)

1️⃣ 查看被锁会话

SELECT
  l.session_id,
  s.username,
  o.object_name,
  l.locked_mode
FROM v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid;

2️⃣ 查看阻塞关系

SELECT
  blocking_session,
  sid,
  serial#,
  username,
  event
FROM v$session
WHERE blocking_session IS NOT NULL;

3️⃣ 杀掉异常会话

ALTER SYSTEM KILL SESSION 'sid,serial#';

系统层面(慎用):

kill -9 <PID>

四、自动化 / 长期监控方案

✅ Oracle 自带

  • AWR
@?/rdbms/admin/awrrpt.sql
  • ASH
@?/rdbms/admin/ashrpt.sql

✅ 操作系统工具

  • crontab + shell 定期记录进程
  • Prometheus + node_exporter + oracle_exporter
  • Zabbix(带 Oracle 模板)

五、常见排查思路总结

问题 排查方式
数据库卡 top → v$session → v$sql
连接不上 lsnrctl status + ps -ef
锁表 v$locked_object
CPU 高 top + v$session + AWR

如果你能告诉我:

  • 是 单机 / RAC
  • 想监控 系统进程还是数据库会话
  • 是 实时还是历史

我可以给你更精确的脚本或方案。

0 踩