resin每个端口出现两个进程
时间:2010-08-20 来源:skybin090804
先上故障现象图:
# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.238.73:9505 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 31812/java
tcp 0 0 0.0.0.0:35718 0.0.0.0:* LISTEN 31812/java
tcp 0 0 127.0.0.1:6600 0.0.0.0:* LISTEN 31725/java
tcp 0 0 0.0.0.0:35721 0.0.0.0:* LISTEN 31814/java
tcp 0 0 127.0.0.1:6800 0.0.0.0:* LISTEN 31814/java
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1993/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:35710 0.0.0.0:* LISTEN 31726/java
tcp 0 0 0.0.0.0:35711 0.0.0.0:* LISTEN 31725/java
udp 0 0 0.0.0.0:514 0.0.0.0:* 1878/syslogd
udp 0 0 0.0.0.0:161 0.0.0.0:* 1982/snmpd
从top中看到的现象是:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
xx yy 25 0 4844m 4.2g 9.9m S 775 71.6 371:34.21 java
xx yy 25 0 5844m 4.2g 9.9m S 775 71.6 371:34.21 java
最多尝试过同时出现3个java进程。
从现象中可看到,resin9090 6600 6800 端口都让其自己的子进程给占用了,这种情况下还能正常提供服务,但负载就飙升得很厉害。
这个应用是提供搜索服务,在建动态索引和建静态所以的时候resin会比较繁忙。在这过程中对resin发出停止的信号会不成功。
以下是停止resin的脚本:
if [[ -n "$RESIN_USER" && $USER != $RESIN_USER ]]; then
su $RESIN_USER -c "$JAVA $JVM_ARG -jar $RESIN_HOME/lib/resin.jar $ARGS stop" 1>$RESIN_HOME/log/start.info 2>&1
ret=$?
else
$JAVA $JVM_ARG -jar $RESIN_HOME/lib/resin.jar $ARGS stop 1>$RESIN_HOME/log/start.info 2>&1
ret=$?
fi
ps auxwww|grep $SEARCH_STR >/dev/null
if [ $? = 0 ]; then
PID1=`ps auxwww|grep $SEARCH_STR |egrep -v "ResinWatchdogManager|grep" |awk '{ print $2 }'`
PID2=`ps auxwww|grep $SEARCH_STR |grep "ResinWatchdogManager" |grep -v grep |awk '{ print $2 }'`
if [ -n "$PID1" ];then
kill -9 $PID1 $PID2
if [ $? = 0 ];then
action $"Stopping $prog: " /bin/true
else
action $"Stopping $prog: " /bin/false
fi
else
action $"Starting $prog: " /bin/true
fi
else
action $"Starting $prog: " /bin/true
fi
在使用resin。jar停止resin不成功的时候,使用kill -9 对此进行强制关闭,这强制的动作后,特殊情况下会出现,主进程给杀死,由相应主进程派生
出来的子进程接替了主进程的地址,这就造成了图中的现象。
现在的办法是检测到这种情况restart一次resin
# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.238.73:9505 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 31812/java
tcp 0 0 0.0.0.0:35718 0.0.0.0:* LISTEN 31812/java
tcp 0 0 127.0.0.1:6600 0.0.0.0:* LISTEN 31725/java
tcp 0 0 0.0.0.0:35721 0.0.0.0:* LISTEN 31814/java
tcp 0 0 127.0.0.1:6800 0.0.0.0:* LISTEN 31814/java
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1993/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:35710 0.0.0.0:* LISTEN 31726/java
tcp 0 0 0.0.0.0:35711 0.0.0.0:* LISTEN 31725/java
udp 0 0 0.0.0.0:514 0.0.0.0:* 1878/syslogd
udp 0 0 0.0.0.0:161 0.0.0.0:* 1982/snmpd
从top中看到的现象是:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
xx yy 25 0 4844m 4.2g 9.9m S 775 71.6 371:34.21 java
xx yy 25 0 5844m 4.2g 9.9m S 775 71.6 371:34.21 java
最多尝试过同时出现3个java进程。
从现象中可看到,resin9090 6600 6800 端口都让其自己的子进程给占用了,这种情况下还能正常提供服务,但负载就飙升得很厉害。
这个应用是提供搜索服务,在建动态索引和建静态所以的时候resin会比较繁忙。在这过程中对resin发出停止的信号会不成功。
以下是停止resin的脚本:
if [[ -n "$RESIN_USER" && $USER != $RESIN_USER ]]; then
su $RESIN_USER -c "$JAVA $JVM_ARG -jar $RESIN_HOME/lib/resin.jar $ARGS stop" 1>$RESIN_HOME/log/start.info 2>&1
ret=$?
else
$JAVA $JVM_ARG -jar $RESIN_HOME/lib/resin.jar $ARGS stop 1>$RESIN_HOME/log/start.info 2>&1
ret=$?
fi
ps auxwww|grep $SEARCH_STR >/dev/null
if [ $? = 0 ]; then
PID1=`ps auxwww|grep $SEARCH_STR |egrep -v "ResinWatchdogManager|grep" |awk '{ print $2 }'`
PID2=`ps auxwww|grep $SEARCH_STR |grep "ResinWatchdogManager" |grep -v grep |awk '{ print $2 }'`
if [ -n "$PID1" ];then
kill -9 $PID1 $PID2
if [ $? = 0 ];then
action $"Stopping $prog: " /bin/true
else
action $"Stopping $prog: " /bin/false
fi
else
action $"Starting $prog: " /bin/true
fi
else
action $"Starting $prog: " /bin/true
fi
在使用resin。jar停止resin不成功的时候,使用kill -9 对此进行强制关闭,这强制的动作后,特殊情况下会出现,主进程给杀死,由相应主进程派生
出来的子进程接替了主进程的地址,这就造成了图中的现象。
现在的办法是检测到这种情况restart一次resin
相关阅读 更多 +