没有看到DCD起任何作用的迹象,使用truss跟踪其他多个空闲Oracle也是如此。
那么TCP keep-alive呢,怎么样来判断有没有起作用?在AIX上其答案是使用kdb(这个需要root用户权限)。
在笔记本电脑上使用sqlplus连接到,在主机上使用netstat -Aan | grep 1521 | grep “你的IP地址”,以获得sqlplus连接的TCP连接信息,显示的第1列是一串16数据,然后使用kdb:
#kdb
The specified kernel file is a 64-bit kernel
Preserving 1418178 bytes of symbol table
First symbol __mulh
START END <name >
0000000000001000 0000000003E5C050 start+000FD8
F00000002FF47600 F00000002FFDC940 __ublock+000000
000000002FF22FF4 000000002FF22FF8 environ+000000
000000002FF22FF8 000000002FF22FFC errno+000000
F100070F00000000 F100070F10000000 pvproc+000000
F100070F10000000 F100070F18000000 pvthread+000000
PFT:
PVT:
id....................0002
raddr.....0000000002000000 eaddr.....F200800090000000
size..............00080000 align.............00001000
valid..1 ros....0 fixlmb.1 seg....0 wimg...2
Command enhancement entry point is called.
Welcome to VXDRV subcommands
Command enhancement entry for vxodmdb called.called.
Welcome to vxdrv subcommands
(0)> sockinfo f100060009b04398 tcpcb | egrep "KEEP|opts"
t_timer....... 00000000 (TCPT_KEEP)
timewait.prv@0000000000000000 inp_v6opts @0000000000000000
opts........ 0004 (REUSEADDR)
可以看到,这个TCP连接没有KEEPALIVE选项(属性),keep-alive对应的timer(TCPT_KEEP)数值为0,表示没有设置timer时间。
会不会是DCD功能屏蔽了TCP keep-alive?

将sqlnet.ora中expire_time设置去掉,然后重复上述步骤,这次有了变化:
#kdb
The specified kernel file is a 64-bit kernel
Preserving 1418178 bytes of symbol table
First symbol __mulh
START END <name >
0000000000001000 0000000003E5C050 start+000FD8
F00000002FF47600 F00000002FFDC940 __ublock+000000
000000002FF22FF4 000000002FF22FF8 environ+000000
000000002FF22FF8 000000002FF22FFC errno+000000
F100070F00000000 F100070F10000000 pvproc+000000
F100070F10000000 F100070F18000000 pvthread+000000
PFT:
PVT:
id....................0002
raddr.....0000000002000000 eaddr.....F200800090000000
size..............00080000 align.............00001000
valid..1 ros....0 fixlmb.1 seg....0 wimg...2
Command enhancement entry point is called.
Welcome to VXDRV subcommands
Command enhancement entry for vxodmdb called.called.
Welcome to vxdrv subcommands
(0)> sockinfo f100060009c1b398 tcpcb | egrep "KEEP|opts"
t_timer....... 00000464 (TCPT_KEEP)
timewait.prv@0000000000000000 inp_v6opts @0000000000000000
opts........ 000C (REUSEADDR|KEEPALIVE)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30053-9.html
kyrstal好美啊啊啊