在Weblogic Cluster中启用节点的调试

时间:2013-12-23 22:13:43

标签: java debugging weblogic weblogic-10.x jdwp

我有一个Weblogic(10.3.5)AdminServer实例和两个作为集群一部分运行的节点。

我按照page上的说明操作,并在startweblogic.cmd中添加了一个设置,以便在端口4000启用调试。一切正常,我可以连接到此端口进行调试。

但是当我使用以下命令启动集群中的节点时,我收到一条错误消息,指出4000已用完。这是我用来启动节点的命令和我得到的错误

c:\Oracle\Middleware\user_projects\domains\base_domain\bin\startManagedWebLogic.cmd server1 http://adminServer_host_name:7001

starting weblogic with Java version:
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b50)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)
Starting WLS with line:
C:\Oracle\MIDDLE~1\JDK160~1\bin\java -client   -Xms256m -Xmx512m -XX:CompileThre
shold=8000 -XX:PermSize=1028m  -XX:MaxPermSize=1024m -Dweblogic.Name=myhealth1 -
Djava.security.policy=C:\Oracle\MIDDLE~1\WLSERV~1.3\server\lib\weblogic.policy -
Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n -
Xverify:none  -da -Dplatform.home=C:\Oracle\MIDDLE~1\WLSERV~1.3 -Dwls.home=C:\Or
acle\MIDDLE~1\WLSERV~1.3\server -Dweblogic.home=C:\Oracle\MIDDLE~1\WLSERV~1.3\se
rver   -Dweblogic.management.discover=false -Dweblogic.management.server=http://
DJX09cs1.co.ihc.com:7001  -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw
.logErrorsToConsole=false -Dweblogic.ext.dirs=C:\Oracle\MIDDLE~1\patch_wls1035\p
rofiles\default\sysext_manifest_classpath;C:\Oracle\MIDDLE~1\patch_ocp360\profil
es\default\sysext_manifest_classpath -Dweblogic.management.username=weblogic -Dw
eblogic.management.password=weblogic1  weblogic.Server
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:690]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_E
RROR_TRANSPORT_INIT(197)

这很疯狂,因为节点可能正在尝试在adminserver设置的同一端口4000上启用调试。如何设置它以便我可以在节点上启用调试功能而不是管理服务器?我尝试将以下配置添加到startmanagedserver.cmd等但没有骰子。

set JAVA_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n

4 个答案:

答案 0 :(得分:2)

修改startWebLogic.cmd很好。但问题是你在一个服务器不同于管理服务器的域中运行,这不是你提供的“页面”所涵盖的情况。

要解决此问题,唯一需要做的就是在startWebLogic.cmd中设置JAVA_OPTIONS之前添加一个保护条件。

类似的东西:

if serverName=='managedServer1' then
  JAVA_OPTIONS="....debug_options....normal_options"
else
  JAVA_OPTIONS="normal_options"
endif

OR

if serverName=='managedServer1' then
  JAVA_OPTIONS="....debug_options....%JAVA_OPTIONS%"
endif

抱歉,我无法记住确切的语法规则,请查看Windows平台的详细信息。

答案 1 :(得分:0)

我似乎'似乎得到了工作,所以我有一个懒惰但有效的解决方案,有两个ifs

来自setDomainEnv.cmd的片段

if "%SERVER_NAME%"=="AdminServer" (
    set DEBUG_PORT=8455
)

if "%SERVER_NAME%"=="node1" (
    set DEBUG_PORT=8456
)

答案 2 :(得分:0)

您可以在管理控制台中启用对托管节点的调试....尝试该选项

答案 3 :(得分:0)

我有一个Weblogic(12.1.3.0)AdminServer实例和两个作为集群一部分运行的节点(edu1和edu2)。要调试这些节点,请编辑{my_domain} /bin/setDomainEnv.sh(windows中的setDomainEnv.cmd)文件并在顶部添加这些行。 edu1调试端口为8881,edu2调试端口为8882

if [ "${SERVER_NAME}" = "AdminServer" ] ; then
    JAVA_OPTIONS="$JAVA_OPTIONS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8880,server=y,suspend=n" 
fi

if [ "${SERVER_NAME}" = "edu1" ] ; then
    JAVA_OPTIONS="$JAVA_OPTIONS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8881,server=y,suspend=n" 
fi

if [ "${SERVER_NAME}" = "edu2" ] ; then
    JAVA_OPTIONS="$JAVA_OPTIONS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8882,server=y,suspend=n" 
fi
相关问题