DataStage在正常运行时候有以下两个主要的进程:
$ps -ef | grep dsrpcd
root 1602486 1 0 09:42:17 pts/5 0:00 /app/dsadm/Ascential/DataStage/DSEngine/bin/dsrpcd
$ps -ef | grep JobMon
root 668620 1 0 09:42:22 pts/5 0:02 /app/dsadm/Ascential/DataStage/PXEngine/java/jre/bin/java -classpath /app/dsadm/Ascential/DataStage/PXEngine/java/JobMonApp.jar:/app/dsadm/Ascential/DataStage/PXEngine/java/xerces/xercesImpl.jar:/app/dsadm/Ascential/DataStage/PXEngine/java/xerces/xmlParserAPIs.jar JobMonApp 13400 13401
用netstat -a | grep ds命令可查看当前连接到ds上的用户,如:
tcp4 0 0 *.dsrpc *.* LISTEN
tcp4 0 0 P05_EDW_ETL1.dsrpc 10.202.1.67.rusb-sys ESTABLISHED
tcp4 0 0 P05_EDW_ETL1.dsrpc 10.202.1.67.xtrms ESTABLISHED
tcp4 0 0 P05_EDW_ETL1.dsrpc P05_EDW_ETL1.60218 CLOSE_WAIT
tcp4 0 0 P05_EDW_ETL1.60218 P05_EDW_ETL1.dsrpc FIN_WAIT_2
再用ps -ef | grep dsapi命令查看连接的进程,如:
dsadm 3289402 1450818 0 10:05:25 pts/5 0:00 grep dsapi
dsadm 791408 2630360 0 09:43:47 - 0:01 dsapi_slave 7 6 0
dsadm 1237846 1266584 0 09:45:49 - 0:00 dsapi_slave 7 6 0
重启ds时候需要kill掉这些进程,
ps -ef | grep dsapi | awk '{print "kill "$2}' | sh
执行之后再用ps -ef | grep dsapi 和netstat -a | grep ds查看,如果当前没有用户连接,才可以重启.
如果在没有断开所有用户与ds的连接就重启ds,那么ds的主进程dsrpcd将不能起来.
这样的话,那些用户的连接将成为死进程,需等待系统释放这些死进程之后才可以再次重启.
甚至有可能需要重启操作系统...
cd /p17/dssrv/Ascential/DataStage/DSEngine/bin
uv -admin -stop
在重启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---------
转自:http://blog.csdn.net/qianyuanyuan1212/article/details/6265835