끄적이는 보송

[Linux] -p=xxxx port is already occupied by the other system or failed to bind. Please use the other port 본문

STUDY/Linux

[Linux] -p=xxxx port is already occupied by the other system or failed to bind. Please use the other port

끄적이는 보송 2023. 3. 12. 12:18
반응형

nGrinder Controller를 실행할 일이 있어 "java -jar ngrinder-controller-3.5.3.war --port=8080" 명령어를 날렸는데, "-p=8080 port is already occupied by the other system or failed to bind. Please use the other port"라고 에러를 반환했다.

[root@ip-172-31-33-181 ~]# java -jar ngrinder-controller-3.5.3.war --port=8080
08:12:13,377 |-INFO in ch.qos.logback.classic.LoggerContext[default] - ...
08:12:13,378 |-INFO in ch.qos.logback.classic.LoggerContext[default] - ...
...
08:12:13,561 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - ...
08:12:13,568 |-INFO in ch.qos.logback.core.joran.action.AppenderAction -...
08:12:13,578 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - ...
...
#에러 반환
-p=8080 port is already occupied by the other system or failed to bind. Please use the other port
...

* java 명령어로 Java 실행 환경을 실행하고, "ngrinder-controller-3.5.3.war" 파일을 실행하며, "--port=8080"으로 8080 포트에서 웹 서버를 실행하라...라는 명령어

"8080 포트를 사용하고 있으니, 실패했다. 그러므로 다른 포트를 이용해라"라는 의미인데, 나는 사용 중인 8080 포트를 죽이는 방법으로 해결하려 한다. 내용 자체는 별거 없지만 그냥 정리해 본다.

 

lsof 명령어로 8080 포트 확인해 보기

lsof 명령어는 "list open files"의 약자로, 현재 열려있는 파일과 네트워크 연결 정보를 표시하는 명령어다. "-i" 옵션을 줘서, ":" 뒤에 포트 번호를 지정하여 해당 포트를 사용하는 파일을 식별할 수 있다. 우리에게 필요한 것은 프로세스의 PID(Process IDentifier)이다.

[root@ip-172-31-33-181 ~]# lsof -i :8080
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    4694 root  420u  IPv6 1678310      0t0  TCP *:webcache (LISTEN)

TMI로 위의 결과물을 정리해 보자면,  "java"가 포트를 사용하는 프로세스이며, PID는 4694, "FD" 열에서 "420u"는 파일 디스크립터(파일과 소켓을 처리하는 데 필요한 식별자)를 의미하며, IPv6 프로토콜을 이용 중이고, 기타 등등 어쩌고 저쩌고 해서 포트 이름이 "*:(webcache)"이고, 해당 프로세스 상태는 LISTEN 이란다.

 

kill 명령어로 프로세스 종료하기

8080 포트를 사용하는 프로세스의 이름, 프로세스 ID, 파일 디스크립터, 프로토콜, 사용 중인 파일명 등의 정보를 보여주고 있다. 이 정보를 통해 8080 포트를 사용 중인 프로세스를 식별했으니, 해당 프로세스를 종료해 본다.

[root@ip-172-31-33-181 ~]# kill <PID>

kill 명령어와 함께 PID를 입력하면 된다. 다시 한번 더 lsof 명령어를 날려보니 아무런 것도 반환하지 않는다. 성공적으로 프로세스를 죽인 듯하다 

 

주의사항

1. 다른 프로세스를 종료하기 전에 해당 프로세스가 수행 중인 작업과 중요한 데이터가 있는지 확인해야 함. 그냥 종료하면 애플리케이션 중단을 야기함.

2. 리소스 누수를 방지하기 위해, 포트를 강제로 해제할 필요가 있는 경우, 해당 프로세스가 파일 또는 소켓을 열고 있는지 확인하고, 해당 파일 또는 소켓을 제대로 닫은 후에 포트를 강제로 해제하는 것이 좋다.

3. 결론은 해당 프로세스를 잘 확인하고, 잘 종료되었는지 보고, 필요하다면 데이터 백업도 수행하고, 시스템이 안정적인 상태를 유지하는지 확인하는 것이 좋음.

 

별 것 아닌 포스팅에 TMI 좀 해봤다.

반응형
Comments