客户反馈安装Oracle 19c数据库以后,应用程序无法启动,报错提示:
Address already in use.
根据提示判断报错是应用端口被占用造成。跟踪应用程序执行过程,并与客户确认可知,应用使用端口为9002。接下来需要确认9002端口为何种应用程序所占用,这可以使用lsof/rmsock/kdb等多种工具来判断,此处使用lsof进行了确认。lsof的安装方法可以参考:
https://www.talkwithtrend.com/Article/256795
#lsof -n -P -i :9002
lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.2.0.0.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
snmpdv3ne 5505458 root 7u IPv6 0xf100100000165bb8 0t0 TCP *:9002 (LISTEN)
#lsof -n -P -p 5505458
lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.2.0.0.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
snmpdv3ne 5505458 root cwd VDIR 10,4 4096 2 / (/dev/hd4)
snmpdv3ne 5505458 root 0u unix 10,4 0t0 12293 /dev/.SRC-unix/SRC0000590202uIcqed
snmpdv3ne 5505458 root 1w VMPC 4,0 0t0 4189 /dev/console/0
snmpdv3ne 5505458 root 2w VMPC 4,0 0t0 4189 /dev/console/0
snmpdv3ne 5505458 root 3r VREG 10,4 10200 379 / (/dev/hd4)
snmpdv3ne 5505458 root 4r VREG 10,5 21056 58118 /usr (/dev/hd2)
snmpdv3ne 5505458 root 5r VREG 10,4 10200 379 / (/dev/hd4)
snmpdv3ne 5505458 root 6u IPv6 0xf100100000160200 0t0 UDP *:161
snmpdv3ne 5505458 root 7u IPv6 0xf100100000165bb8 0t0 TCP *:9002 (LISTEN)
snmpdv3ne 5505458 root 8u unix 10,7 0t0 10 /tmp/dpi_socket
snmpdv3ne 5505458 root 9u IPv6 0xf1001000001653b8 0t0 TCP *:199 (LISTEN)
可以判断9002端口号为SNMP服务占用,其进程id为5505458。检查SNMP daemon进程打开文件句柄可以看到,除了默认的知名端口号161,SNMP也在私有端口9002上进行监听。9002应该是来自临时分配的端口号。
AIX环境的临时端口范围由no网络参数tcp_ephemeral_low、tcp_ephemeral_high界定。
#no -L tcp_ephemeral_low
--------------------------------------------------------------------------------
NAME CUR DEF BOOT MIN MAX UNIT TYPE
DEPENDENCIES
--------------------------------------------------------------------------------
tcp_ephemeral_low 9000 32K 9000 1K 65534 numeric D
tcp_ephemeral_high
--------------------------------------------------------------------------------
可以看到,tcp_ephemeral_low由默认的32768改为了9000,这应当是SNMP占用9002端口的直接原因。
检查Oracle Installation Guide for AIX,可以看到:
https://docs.oracle.com/en/database/oracle/oracle-database/19/axdbi/setting-udp-and-tcp-kernel-parameters-manually.html#GUID-95D08EE7-7C40-44CB-8973-F8A31569FB2E
文档中建议了对tcp_ephemeral_low、tcp_ephemeral_high进行修改以应对高并发查询或节点数量较多的场景。
但很明显此处的修改触发了与应用的冲突,因此需要将tcp_ephemeral_low适当提高.
将tcp_ephemeral_low由9000提高到9100,重启SNMP服务,问题解决。
#no -p -o tcp_ephemeral_low=9100
Setting tcp_ephemeral_low to 9100
Setting tcp_ephemeral_low to 9100 in nextboot file
#stopsrc -s snmpd
0513-044 The snmpd Subsystem was requested to stop.
#startsrc -s snmpd
0513-059 The snmpd Subsystem has been started. Subsystem PID is 33882370.
#lsof -n -P -p 5964230
lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.2.0.0.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
snmpdv3ne 5964230 root cwd VDIR 10,4 4096 2 / (/dev/hd4)
snmpdv3ne 5964230 root 0u unix 10,4 0t0 12290 /dev/.SRC-unix/SRC0006291946_Eyaed
snmpdv3ne 5964230 root 1w VMPC 4,0 0t0 4189 /dev/console/0
snmpdv3ne 5964230 root 2w VMPC 4,0 0t0 4189 /dev/console/0
snmpdv3ne 5964230 root 3r VREG 10,4 10200 379 / (/dev/hd4)
snmpdv3ne 5964230 root 4r VREG 10,5 21056 58118 /usr (/dev/hd2)
snmpdv3ne 5964230 root 5r VREG 10,4 10200 379 / (/dev/hd4)
snmpdv3ne 5964230 root 6u IPv6 0xf100100000b62400 0t0 UDP *:161
snmpdv3ne 5964230 root 7u IPv6 0xf100100000b673b8 0t0 TCP *:9102 (LISTEN)
snmpdv3ne 5964230 root 8u unix 10,7 0t0 10 /tmp/dpi_socket
snmpdv3ne 5964230 root 9u IPv6 0xf100100000b67bb8 0t0 TCP *:199 (LISTEN)
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论