lsnrctl 是 Oracle 数据库监听(Listener) 的管理工具,本身不是 Debian 特有的,但在 Debian / Debian 系 Linux(如 Ubuntu) 上运行 Oracle 时,可以从 系统层 + Oracle 监听层 两方面进行优化。
下面按 实用优先级 给你一个完整优化思路。
lsnrctl status
确认:
LISTENER)oracle)防止高并发连接被拒绝:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)(QUEUESIZE = 512))
)
)
✅ 推荐值:
DIAG_ADR_ENABLED_LISTENER = ON
便于日志分析,避免 listener.log 无限增长。
如果数据库实例固定,不依赖动态注册:
DYNAMIC_REGISTRATION_LISTENER = OFF
✅ 优点:减少监听负担
❌ 注意:需手动配置 SERVICE_NAMES
Oracle 监听依赖大量 socket fd。
ulimit -n
建议:
* soft nofile 65536
* hard nofile 65536
编辑:
/etc/security/limits.conf
sudo vi /etc/sysctl.conf
添加:
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_reuse = 1
生效:
sudo sysctl -p
✅ 减少连接建立延迟和 TIME_WAIT 问题
Oracle 监听在 IPv6 环境下可能变慢:
net.ipv6.conf.all.disable_ipv6 = 1
减少连接握手时间:
SQLNET.INBOUND_CONNECT_TIMEOUT = 30
SQLNET.EXPIRE_TIME = 10
✅ 防止死连接占用资源
监听日志可能非常大:
lsnrctl set log_status off
或定期轮转:
logrotate
adrci
show homes
purge -age 1440
LISTENER1 =
(ADDRESS = (PROTOCOL = TCP)(PORT = 1521))
LISTENER2 =
(ADDRESS = (PROTOCOL = TCP)(PORT = 1522))
应用端配置多个地址,提高并发能力。
如果你在 Debian 上跑 RAC(少见),需配合 SCAN Listener。
nslookup your_host
✅ 确保 DNS 反向解析关闭或正确
# listener.ora
HOST = 127.0.0.1 # 不建议用 hostname
lsnrctl reload
或:
lsnrctl stop
lsnrctl start
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)(QUEUESIZE = 512))
)
)
DIAG_ADR_ENABLED_LISTENER = ON
DYNAMIC_REGISTRATION_LISTENER = OFF
✅ 优先做这些:
QUEUESIZE如果你愿意,可以告诉我:
我可以给你 针对你环境的精确优化方案。