2015-10-21 69 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