温馨提示×

如何优化Debian lsnrctl

小樊
40
2026-07-10 16:13:26
栏目: 智能运维

lsnrctlOracle Database Listener 的管理工具,不是 Debian 自带的系统命令。因此“优化 Debian 上的 lsnrctl”通常指 优化 Oracle Listener 在 Debian / Linux 上的性能、稳定性和资源使用。下面从 系统、Oracle、网络、参数、监控 五个层面给你一套实用优化建议。


一、确认环境(很重要)

先确认你用的是:

lsnrctl version

以及:

uname -a
cat /etc/debian_version

常见问题:

  • Debian 并非 Oracle 官方首选系统(Oracle 更推荐 RHEL / OEL)
  • glibc / kernel 参数可能不合适

二、系统层面优化(Debian)

1️⃣ 内核参数(Oracle 必需)

编辑:

sudo vi /etc/sysctl.conf

推荐参数(示例,按内存调整):

fs.file-max = 6815744
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104

net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

应用:

sudo sysctl -p

2️⃣ 用户限制(oracle 用户)

编辑:

sudo vi /etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768

⚠️ Debian 使用 pam_limits 才生效,确认:

grep pam_limits /etc/pam.d/common-session

三、Oracle Listener 参数优化(重点)

1️⃣ listener.ora 核心优化

路径示例:

$ORACLE_HOME/network/admin/listener.ora

✅ 推荐配置

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME = ORCL)
    )
  )

# 优化参数
DIAG_ADR_ENABLED_LISTENER = OFF
LOGGING_LISTENER = OFF
INBOUND_CONNECT_TIMEOUT_LISTENER = 30

✅ 解释:

  • 关闭 ADR 日志:减少磁盘 IO
  • 关闭 listener 日志(可选):高并发下明显提升
  • 连接超时:防止半连接占用资源

2️⃣ 开启 Oracle 多线程 Listener(12c+)

DEDICATED_THROUGH_BROKER_LISTENER = ON

四、SQLNet & 客户端连接优化

sqlnet.ora 优化

SQLNET.INBOUND_CONNECT_TIMEOUT = 30
SQLNET.EXPIRE_TIME = 10

✅ 作用:

  • 防止 僵死连接
  • 快速释放无效会话

五、Debian 网络层优化(TCP)

1️⃣ TCP 参数

sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_fin_timeout=30

TIME_WAIT 堆积


六、监听服务管理优化

1️⃣ 使用 systemd(推荐)

Debian 10+ 使用 systemd 管理 listener:

sudo vi /etc/systemd/system/oracle-listener.service
[Unit]
Description=Oracle Listener
After=network.target

[Service]
Type=forking
User=oracle
Environment="ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1"
ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/lsnrctl start
ExecStop=/u01/app/oracle/product/19.3.0/dbhome_1/bin/lsnrctl stop

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable oracle-listener

七、监控与排错

1️⃣ 查看监听状态

lsnrctl status

2️⃣ 查看连接数

lsnrctl services

3️⃣ 常见性能问题

问题 原因 解决
连接慢 DNS 反向解析 HOSTNAME_LOOKUP=off
CPU 高 listener 日志过大 关闭日志
连接失败 半连接 调整 INBOUND_CONNECT_TIMEOUT

八、不推荐的做法 ❌

  • 在 Debian 上跑生产 Oracle(官方不支持)
  • 开启大量 listener 日志
  • 一个 listener 管理几十个实例

九、一句话总结

Debian 上优化 lsnrctl = 系统参数 + listener.ora 精简 + 网络调优 + 关闭不必要日志


如果你愿意,可以告诉我:

  • Oracle 版本(11g / 12c / 19c)
  • Debian 版本
  • 本地连接慢 还是 并发连接多

我可以给你一份 针对你环境的精确优化方案

0