我们的一个tomcat 7运行应用本来在测试环境运行良好,最近突然应用就自动退出停服,有点奇怪,查看了启动(tailf -n 200 catalina.out)日志获得一段有效的日志信息:

ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:750]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

如何解决呢?我们可以从这段日志下手分析。

这段日志信息反馈是在tomcat运行时,debug时由于debug端口已经被占用,刚好我们部署该服务器上的还有另外一个tomcat应用在运行。所以,只能修改当前的tomcat的debug接口,具体的修改位置在tomcat的catalina.sh脚本中。如何操作如下:
找到catalina.sh中如下启动 脚本:
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; then
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="8000"
fi
if [ -z "$JPDA_SUSPEND" ]; then
JPDA_SUSPEND="n"
fi
if [ -z "$JPDA_OPTS" ]; then
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
fi
CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
shift
fi

改一下address默认端口号8000,为其他空闲端口号,重启即可。