[ 
https://issues.apache.org/jira/browse/SAMZA-476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14223690#comment-14223690
 ] 

Chris Riccomini commented on SAMZA-476:
---------------------------------------

This is due to a port collision. We start a JmxServer in Samza (AM and 
container), but the API forces us to specify a port if we wish to know what the 
port is (which we use for logging). This means that we can't bind to port 0--we 
have to just guess. Sometimes we guess a port that's already bound, and the 
container fails.

Arguably, we should try several times with different random ports before 
totally failing the container. This is what we used to do for the http/rest 
ports in the AM.

> Container fails due to port in use
> ----------------------------------
>
>                 Key: SAMZA-476
>                 URL: https://issues.apache.org/jira/browse/SAMZA-476
>             Project: Samza
>          Issue Type: Bug
>    Affects Versions: 0.9.0
>            Reporter: Yan Fang
>
> When starting Samza, the first container sometimes fails because of the "Port 
> already in use" error. After AM automatically restarts a new container, this 
> error is gone. 
> To be more clear, I run a hello-samza job which starts two containers in 
> local machine. When checking the log directory, I can find four containers, 
> one is for AM (container-00001) , two (container-00003, container-00004) are 
> for the running job, and another one (container-00002) has the following log:
> {code}
> Exception in thread "main" java.rmi.server.ExportException: Port already in 
> use: 64356; nested exception is: 
>       java.net.BindException: Address already in use
>       at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:329)
>       at 
> sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:237)
>       at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
>       at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
>       at 
> sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:207)
>       at 
> java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:310)
>       at 
> java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:273)
>       at 
> javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:118)
>       at 
> javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:95)
>       at 
> javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:403)
>       at org.apache.samza.metrics.JmxServer.<init>(JmxServer.scala:90)
>       at org.apache.samza.metrics.JmxServer.<init>(JmxServer.scala:44)
>       at 
> org.apache.samza.container.SamzaContainer$.safeMain$default$1(SamzaContainer.scala:72)
>       at 
> org.apache.samza.container.SamzaContainer$.main(SamzaContainer.scala:69)
>       at org.apache.samza.container.SamzaContainer.main(SamzaContainer.scala)
> Caused by: java.net.BindException: Address already in use
>       at java.net.PlainSocketImpl.socketBind(Native Method)
>       at 
> java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
>       at java.net.ServerSocket.bind(ServerSocket.java:376)
>       at java.net.ServerSocket.<init>(ServerSocket.java:237)
>       at java.net.ServerSocket.<init>(ServerSocket.java:128)
>       at 
> sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
>       at 
> sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:344)
>       at 
> sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
>       at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:318)
>       ... 14 more
> {code} 
> However, when I check the AM's log, I can not find this port is in use.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to