【问题标题】:Address already in use: JVM_Bind地址已在使用中:JVM_Bind
【发布时间】:2010-09-15 05:43:14
【问题描述】:

我在 Windows XP Pro 上使用 Glassfish 3.0.1、JVM 1.6.0_21;

我不确切知道我的环境发生了什么变化,但我一尝试部署企业应用程序(ejb 模块 + 应用程序客户端模块)就会得到这个堆栈跟踪。

除了 Glassfish 之外,端口 3820 上没有运行任何东西...我用 netstat 检查了服务器停止和服务器启动的情况。

这可能是什么原因?一些内部流程冲突?

关于如何进一步调试的任何提示?

WARNING: Can not find resource bundle for this logger.  class name that failed: org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory
SEVERE: iiop.createsocket_exception
WARNING: Can not find resource bundle for this logger.  class name that failed: org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory
SEVERE: java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at javax.net.ssl.SSLServerSocket.<init>(SSLServerSocket.java:106)
        at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.<init>(SSLServerSocketImpl.java:106)
        at com.sun.net.ssl.internal.ssl.SSLServerSocketFactoryImpl.createServerSocket(SSLServerSocketFactoryImpl.java:72)
        at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSSLServerSocket(IIOPSSLSocketFactory.java:402)
        at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createServerSocket(IIOPSSLSocketFactory.java:281)
        at com.sun.corba.ee.impl.transport.SocketOrChannelAcceptorImpl.initialize(SocketOrChannelAcceptorImpl.java:91)
        at com.sun.corba.ee.impl.transport.CorbaTransportManagerImpl.getAcceptors(CorbaTransportManagerImpl.java:247)
        at com.sun.corba.ee.impl.transport.CorbaTransportManagerImpl.addToIORTemplate(CorbaTransportManagerImpl.java:264)
        at com.sun.corba.ee.spi.oa.ObjectAdapterBase.initializeTemplate(ObjectAdapterBase.java:131)
        at com.sun.corba.ee.impl.oa.poa.POAImpl.initialize(POAImpl.java:474)
        at com.sun.corba.ee.impl.oa.poa.POAImpl.makeRootPOA(POAImpl.java:323)
        at com.sun.corba.ee.impl.oa.poa.POAFactory$1.evaluate(POAFactory.java:279)
        at com.sun.corba.ee.impl.orbutil.closure.Future.evaluate(Future.java:57)
        at com.sun.corba.ee.impl.resolver.LocalResolverImpl.resolve(LocalResolverImpl.java:51)
        at com.sun.corba.ee.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:55)
        at com.sun.corba.ee.impl.orb.ORBImpl.resolve_initial_references(ORBImpl.java:1289)
        at com.sun.corba.ee.impl.naming.cosnaming.TransientNameService.initialize(TransientNameService.java:122)
        at com.sun.corba.ee.impl.naming.cosnaming.TransientNameService.<init>(TransientNameService.java:90)
        at org.glassfish.enterprise.iiop.impl.PEORBConfigurator.configure(PEORBConfigurator.java:154)
        at com.sun.corba.ee.impl.orb.ORBConfiguratorImpl.runUserConfigurators(ORBConfiguratorImpl.java:191)
        at com.sun.corba.ee.impl.orb.ORBConfiguratorImpl.configure(ORBConfiguratorImpl.java:176)
        at com.sun.corba.ee.impl.orb.ORBImpl.postInit(ORBImpl.java:579)
        at com.sun.corba.ee.impl.orb.ORBImpl.set_parameters(ORBImpl.java:680)
        at com.sun.corba.ee.impl.orb.ORBImpl.setParameters(ORBImpl.java:666)
        at com.sun.corba.ee.spi.osgi.ORBFactory.initialize(ORBFactory.java:91)
        at org.glassfish.enterprise.iiop.impl.GlassFishORBManager.initORB(GlassFishORBManager.java:612)
        at org.glassfish.enterprise.iiop.impl.GlassFishORBManager.getORB(GlassFishORBManager.java:289)
        at org.glassfish.enterprise.iiop.impl.GlassFishORBFactoryImpl.createORB(GlassFishORBFactoryImpl.java:83)
        at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:122)
        at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getProtocolManager(GlassFishORBHelper.java:189)
        at com.sun.ejb.containers.BaseContainer.initializeProtocolManager(BaseContainer.java:810)
        at com.sun.ejb.containers.BaseContainer.<init>(BaseContainer.java:558)
        at com.sun.ejb.containers.AbstractSingletonContainer.<init>(AbstractSingletonContainer.java:136)
        at com.sun.ejb.containers.CMCSingletonContainer.<init>(CMCSingletonContainer.java:73)
        at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:109)
        at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:207)
        at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:197)
        at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:63)
        at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:175)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:216)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
        at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
        at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
        at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

WARNING: Can not find resource bundle for this logger.  class name that failed: org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory
WARNING: Can not find resource bundle for this logger.  class name that failed: org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory
SEVERE: "IOP00410216: (COMM_FAILURE) Unable to create IIOP listener on the specified host/port: all interfaces/3820"

编辑 这正是我尝试过的:

C:\Documents and Settings\b.tanase>netstat -p tcp -ano | findstr :3820

asadmin> start-domain domain1
Waiting for DAS to start ...
Started domain: domain1
Domain location: D:\java\glassfish-3.0.1\glassfish\domains\domain1
Log file: D:\java\glassfish-3.0.1\glassfish\domains\domain1\logs\server.log
Admin port for the domain: 4848
Command start-domain executed successfully.

C:\Documents and Settings\b.tanase>netstat -p tcp -ano | findstr :3820

asadmin> deploy d:/java/projects/netbeans-projects/CountingSystem/dist/CountingS
ystem.ear
com.sun.enterprise.admin.cli.CommandException: remote failure: Exception while l
oading the app : java.lang.RuntimeException: EJB Container initialization error
Exception while invoking class org.glassfish.ejb.startup.EjbDeployer load method
 : java.lang.RuntimeException: EJB Container initialization error


Command deploy failed.

C:\Documents and Settings\b.tanase>netstat -p tcp -ano | findstr :3820
  TCP    0.0.0.0:3820           0.0.0.0:0              LISTENING       2428

正如您所见,在部署失败之前,端口 3820 上没有任何监听(在 EJB 容器初始化错误之前,我在服务器日志中收到帖子开头发布的堆栈跟踪)

【问题讨论】:

  • 您是否尝试使用其他端口?
  • 更改端口有效。我不得不更改 SSL 和 SSL_MUTUALAUTH。问题仍然存在,为什么会发生这种情况?
  • 你也检查了 3700 端口吗?

标签: java jakarta-ee glassfish


【解决方案1】:

使用您的本地端口 443 / 8181 / 3820。

如果您使用的是 linux/unix:

  • 使用netstat -anlsof -n 来检查谁在使用这个端口

如果你在 Windows 上

  • 使用netstat -antcpview 进行检查。

【讨论】:

  • 根据 netstat & tcpview 在运行 glassfish 和尝试部署应用程序之前,端口 3820 上没有运行任何东西。查看我的更新
  • tcpview 救了我的命。 +1。知道 tcpview 可以杀死使用您需要的端口的服务会有所帮助。
  • 在我的情况下,我的程序实例没有正确关闭(eclipse 重启没有帮助)。在这种情况下,首先查看任务管理器并简单地终止任何您知道不应该运行的 JVM 实例可能会更容易。
【解决方案2】:

我注意到您正在使用 Windows,这对于将低端口号用于传出套接字尤其不利。请参阅here,了解如何保留您希望用于 glassfish 的端口号。

【讨论】:

  • 感谢您的链接;可能有用。你认为你可以详细说明“windows ......使用低端口号特别糟糕......”或者给我一个链接以供进一步阅读?
  • @Bogdan 还有一个堆栈溢出问题提供了更多细节,stackoverflow.com/questions/2630009/…
  • 感谢您的链接。这似乎是发生这种情况的最可能原因。当我再次碰到它时,我会记住它。
  • @MrPotes: 1024 是“低端口号”的下限
【解决方案3】:

在 Windows 上打开具有管理员权限的 cmd.exe 窗口并使用netstat -a -b -o 您将获得持有您的端口的进程的 ID,并能够使用任务管理器将其杀死。

【讨论】:

    【解决方案4】:

    正如异常所说,已经有另一台服务器在同一端口上运行。您可以终止该服务或更改 glassfish 以在另一个诗人身上运行

    【讨论】:

      【解决方案5】:

      记录的错误确实表明端口 3820 是问题所在,但我建议调查所有您的应用尝试侦听的端口。我遇到了这个问题,问题是我忘记的一个端口——而不是我正在寻找的“主要”端口。

      【讨论】:

        【解决方案6】:

        顺便说一句,在 Windows 下,ProcessExplorer 非常适合观察每个进程的现有 TCP/IP 连接。

        【讨论】:

          【解决方案7】:

          您可以尝试使用 TCPView 实用程序。

          尝试在 localport 列中查找 “busy” 端口上是否有任何进程在工作。右键单击并结束该过程。然后尝试启动Tomcat

          它真的对我有用。

          【讨论】:

            【解决方案8】:

            我的答案确实 100% 适合这个问题,但我想记录我的解决方案及其背后的陷阱,因为异常是相同的。

            我的端口一直在使用 Junit 测试用例中测试 Jetty。问题是 Eclipse 上的 Google 代码专家,我猜它是在后台进行测试,因此一直在我面前启动码头。 解决方法:让 Eclipse 始终使用 Java 编辑器而不是 Google 的 Junit 编辑器打开 *.java 文件。这似乎有帮助。

            【讨论】:

              【解决方案9】:

              这个问题的发生主要是因为可能有另一个代码在运行,从你以前做过的一些测试中很可能。找出并关闭任何其他实例,或者如果没问题,请尝试重新启动服务器。

              【讨论】:

              • 如何关闭另一个实例?
              猜你喜欢
              • 2015-10-30
              • 2011-02-15
              • 2021-08-26
              • 2018-03-12
              • 2014-11-02
              • 2018-01-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多