在重启DS时,不少人肯定会说,一定要在重启之前确认没有人连接DS了。但有时会忘的。虽然说,等一些时间,系统可能会释放死进程,但也有可能,不会。而重启服务器,对于生产系统,可不是那么容易,想重启就能重启的。
于下,就是我通宵一晚的成果。
1,确认dsrpcd不能启动的原因:
bin/dsrpcd -d9 > /tmp/dsrpcd.log 2>&1 &
日志信息如下:
RPCPID=1601624 - 03:34:16 - uvrpc_debugflag=9 (Debugging level)
RPCPID=1601624 - 03:34:16 - In rpc_init()
RPCPID=1601624 - 03:34:16 - bind bombed errno=67
RPCPID=1601624 - 03:34:16 - listen failed
联系之前知识,如在用户没有登陆时,就重启ds,会导致dsrpcd无法启动。于是确认是因为某一端口被占用。
2,找出无反应的网络连接
$ netstat -Aa | grep dsr
f10002000204d398 tcp4 0 0 *.dsrpc *.* LISTEN
f1000200001e9398 tcp4 0 0 blade25.dsrpc 10.207.42.24.tlisr ESTABLISHED
f100020001f74398 tcp4 0 0 blade25.dsrpc 10.207.42.24.oracl ESTABLISHED
如状态为close_wait,则 表示此为死进程对应的网络连接
3,确认对应进程(rmsock需要root权限):
rmsock f1000d0005b4b390 tcpcb
output: The socket f1000d0005b4b390 is being held by proccess 332008 (inetd).
4,kill进程
kill -9 332008
总结:此方法可以省去重启这一步骤。但rmsock需要有root权限,生产环境我们不见得能有的。
--add------------------------------------------------------------------------------------------------------------------------------------------------
今天在测试环境 ,执行了uv -admin -start 无法启动dsrpcd,
之后,执行了下 uv -admin -stop , 再 uvregen ,再 uv -admin -start
dsrpcd就启动好了,也不知道是不是真的就是这个步骤搞好的,,,下次生产有问题,这样试下吧。
------------------------------------------------------------------------------------------------------------------------------2011-11-18---------
--add------------------------------------------------------------------------------------------------------------------------------------------------
今天发现,如果DS服务器长时间没有重启,会残留很多死进程,会导致“Project is locked",
可如下执行,而对不用重启DS。
ps -ef | grep dsapi | awk '{print "kill "$2}' | sh
------------------------------------------------------------------------------------------------------------------------------2011-11-19---------