본문 바로가기
Programing/Java

[Java & Tomcat] Port already in use 에러

by AustinProd 2022. 6. 26.

IntelliJ 같은 코드 에디터에서 내장 Tomcat으로 애플리케이션을 실행시킬 때 포트가 중복될 때 발생하는 에러다.  애플리케이션을 실행시킬 때, 동일한 포트로 실행 중인 프로세스가 있을 때 발생한다.

 

일반적으로 Tomcat은 8080, 8005, 1099 포트를 디폴트로 사용하기 때문에 VM 실행 옵션에서 따로 지정해주지 않으면 해당 에러를 접할 수 있다.

 

문제는 분명 기존에 실행중이던 앱을 종료하고, 심지어 코드 에디터를 닫았음에도 여전히 프로세스가 실행 중인 경우다. 사용 중인 PC를 재부팅해서 해결하는 방법도 있지만, 제일 좋은 방법은 충돌이 발생한 포트를 터미널에서 직접 종료(kill)해버리는 것이다.

 

아래에 에러 로그와 포트 종료(kill) 명령어를 적어두었으니 참고하자.

(참고로, 종료 명령어는 MacOS를 기준으로 했다. Window는 taskkill 명령어를 사용하면 될 것이다.)

 

에러 로그

Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 8080; nested exception is: 
	java.net.BindException: Address already in use (Bind failed)
sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 8080; nested exception is: 
	java.net.BindException: Address already in use (Bind failed)
	at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:480)
	at sun.management.Agent.startAgent(Agent.java:262)
	at sun.management.Agent.startAgent(Agent.java:452)
Caused by: java.rmi.server.ExportException: Port already in use: 8080; nested exception is: 
	java.net.BindException: Address already in use (Bind failed)
	at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
	at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
	at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
	at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:237)
	at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:213)
	at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:173)
	at sun.management.jmxremote.SingleEntryRegistry.<init>(SingleEntryRegistry.java:49)
	at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:816)
	at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:468)
	... 2 more
Caused by: java.net.BindException: Address already in use (Bind failed)
	at java.net.PlainSocketImpl.socketBind(Native Method)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)
	at java.net.ServerSocket.bind(ServerSocket.java:375)
	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:345)
	at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
	at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
	... 11 more

 

해결방법

# 8080 포트 종료
lsof -n -iTCP:8080 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9

# 8005 포트 종료
lsof -n -iTCP:8005 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9

# 1099 포트 종료
lsof -n -iTCP:1099 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9

'Programing > Java' 카테고리의 다른 글

[Java] Spring Boot에서 HikariCP 설정  (0) 2022.11.11

댓글