2015-10-21 68 views
0

我尝试在Linux系统中运行* .sh文件,这个* .sh文件用于启动一个Java Application.this应用程序使用gemfire作为其分布式缓存系统。似乎我无法建立一个新的gemfire tcp连接。有没有人知道如何解决这个问题?'地址已经在使用'异常抛出com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl

这里是个例外:

java.net.BindException: Address already in use 
     at sun.nio.ch.Net.bind0(Native Method) 
     at sun.nio.ch.Net.bind(Net.java:437) 
     at sun.nio.ch.Net.bind(Net.java:429) 
     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
     at com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl.<init>(AcceptorImpl.java:378) 
     at com.gemstone.gemfire.internal.cache.BridgeServerImpl.start(BridgeServerImpl.java:297) 
     at spark.cache.CacheServicePoint.enableServer(CacheServicePoint.java:197) 
     at orion.di.service.profile.ProfileService.initialize(ProfileService.java:108) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 

回答

0

地址已在使用的是已有的应用程序实例运行/收听同一端口上。如果你是一个Ubuntu用户

netstat -tulpn | grep YOURAPPNAME 

这会给你在你的系统中运行实例的ProcessId。找到进程ID号并杀死实例并再次启动应用程序。 杀

kill -9 PROCESSID 
+0

只有标准杀死失败时才应该使用kill -9'。请参阅http://unix.stackexchange.com/questions/8916/when-should-i-not-kill-9-a-process – Drunix

+0

多一个问题,在这个命令'netstat -tulpn | grep YOURAPPNAME'。我怎么把APPNAME。我知道这是关于宝石的,我应该把'宝石'填满这个命令。 –

+0

是的,你可以放 – Sri

0

你在同一机器启动Java应用程序的两个进程?默认情况下,GemFire服务器会在40404上打开一个端口来侦听客户端连接,因此当您在同一个盒子上启动两个以上的服务器时,第二个服务器会得到一个Address already in use异常。查看用于启动应用程序的脚本。您需要为您尝试启动的每个GemFire服务器提供一个不同的端口。使用GemFireShell即gfsh可以这样做,像这样:

gfsh>start server --name=server1 --server-port=4045 

或者,如果没有客户端(即对等网络部署的GemFire的),您可以禁用倾听客户,像这样:

gfsh>start server --name=server1 --disable-default-server