Remote SSH 연결 끊김 문제 해법 : VS Code

Last Updated on 2024-03-06 by BallPen

Remote SSH 익스텐션(extension)을 통해 비쥬얼 스튜디오 코드(Visual Studio Code, VS code)로 프로그램을 짜고 있었는데요.

갑자기 서버와의 SSH 연결이 끊기는 현상이 발생했어요. 그래서 다른 컴퓨터의 터미널로 접속을 시도해봤는데 접속인 안되요. 아예 서버가 죽어버렸어요.

급히 서버를 강제 재시작 후 VS code에서 Remote SSH 연결을 다시 시도했더니 다행히 연결이 됩니다. 그런데 문제는 이러한 연결 끊김 현상이 수차례 반복되는 거에요.

매번 서버를 재시작 하려니 너무 불편해요. 그럼 이 문제는 왜 발생했고 그 해법은 무엇인지 알아보겠습니다.

아래는 이번 글의 목차입니다.

컴퓨터에 VS code를 설치하고 멀리 떨어진 서버에 접속하여 프로그램을 짜야할 때 Remote SSH 익스텐션을 많이 사용하는데요.

저는 여러개로 분할된 파이썬 프로그램을 하나로 통합하는 작업을 하고 있었어요. 그런데 갑자기 VS code 화면에 아래 [그림 1]의 창이 뜨면서 연결이 끊어져요.

[그림 1] VS code로 작업하던 중 Remote SSH 연결이 끊기면서 나타나는 창
[그림 1] VS Code로 작업하던 중 Remote SSH 연결이 끊기면서 나타나는 창

그리고 화면 우측 하단에는 “Setting up SSH host 000.000.00.0. (detail) initializing VS code…” 라는 문구가 나오면서 자동으로 재접속을 시도합니다. 하지만 여러번의 재접속 시도에도 불구하고 재접속은 결국 실패하게 되요.

뿐만 아니라 연결을 복구하려고 다른 컴퓨터의 터미널로 서버에 접속하려고 해도 접속되지 않아요. 서버로부터 아무런 응답이 없습니다.

이 경우 유일한 해법은 서버를 강제로 재시작하면 됩니다. 그러면 VS code나 터미널로 서버 접속이 다시 가능해져요. 그런데 문제는 이런 접속 끊김 현상이 한시간 동안에도 수차례 발생한다는 거에요.

매번 서버를 강제 재부팅하는게 시간도 많이 걸리고 불편해요.

VS code에서 Remote SSH 연결이 끊어지는 문제는 인터넷을 찾아보니 SSH 익스텐션 자체의 결함이라는 말도 있고, 다른 SSH 익스텐션을 사용해보라는 말도 있어요.

여러 시도를 해봤는데요. 정답은 제 서버의 메모리 부족때문에 나타나는 거였어요. 가장 간단한 방법은 서버의 메모리를 늘려주면 되는데요. 비용이 드니 다른 해결 방법을 시도해봐요.

그 방법은 서버에 swap 공간을 만드는 거에요. 그러면 리눅스 서버의 물리적 메모리가 부족해질 경우 서버는 swap 공간에 데이터를 저장하게 됩니다. 하드디스크의 일부를 RAM처럼 사용하는 거죠.

정말 신기하게도 swap 공간을 만들면 Remote SSH 연결 끊김 문제는 말끔히 사라집니다.

참고로 제가 사용하는 서버는 debian linux 서버입니다. 우선 서버와 SSH 접속하세요.

그리고 swap 공간이 있는지 조회해봐요. 프롬프트에서 아래의 명령어를 입력합니다.

sudo swapon --show

저는 아무것도 출력되지 않고 빈 프롬프트만 나오더라구요. 그러면 다음 단계로 넘어갑니다.

리눅스에 swap 공간을 만들기 위해서는 미리 필요한 공간만큼 할당한 파일을 생성 후 그것을 swap 공간으로 변경하면 됩니다. 여기서 swap이란 사전에 지정한 크기의 공간을 미리 할당해두는 것을 말해요.

따라서 swap 공간으로 사용할 swap 파일을 먼저 하나 만들어야 해요.

아래 명령어를 복사해서 프롬프트에 입력하세요. 저는 3GB 용량을 가지며 이름이 swapfile인 파일을 하나 만들께요.

sudo fallocate -l 4G /swapfile

그리고 소유자만 읽고 쓸 수 있도록 swapfile의 권한을 바꿉니다. 아래의 명령어를 복사해서 프롬프트에 붙여넣고 엔터치면 됩니다.

sudo chmod 600 /swapfile

이번에는 mkswap 명령어로 위에서 만든 swapfile을 swap 공간으로 바꾸겠습니다.

sudo mkswap /swapfile

마지막으로 swap 공간을 사용할 수 있도록 on합니다.

sudo swapon /swapfile

그럼 swap 공간이 잘 동작되는지 확인해 봐요. 아래 명령어를 프롬프트에 입력하세요.

sudo swapon --show

swapfile의 크기(종전의 크기에 3GB가 추가된 전체 용량), 사용량, 우선순위가 출력되나요? 그러면 성공적으로 swap 공간이 잘 만들어진 거에요.

이제 VS Code로 Remote SSH 사용해서 작업해보세요. 더이상 [그림 1]과 같은 연결 끊김 현상이 나타나지 않을거에요.

문제가 해결되었습니다.

swap 공간을 만들어 SSH 연결 끊김 현상을 해결했어요.

그런데 리눅스 서버를 재시작하면 swap 공간이 자동으로 활성화되지 않는다는 것을 꼭 기억하세요.

만일 재부팅 후 swap 공간을 다시 on하고 싶다면 위에서 사용했던 아래 명령어를 프롬프트에 입력하고 엔터를 치면 됩니다.

sudo swapon /swapfile

만일 재부팅할 때마다 이 작업을 하는게 귀찮다면 서버가 재부팅 될때 swap 공간이 자동적으로 on 되도록 설정하면 편리할 거에요. 이를 위해서는 etc 디렉토리 안에 있는 fstab 파일의 내용을 수정해야 합니다.

다음 명령어로 fstab 파일을 여세요.

sudo nano /etc/fstab

그리고 아래의 내용을 복사해서 fstab 파일의 가장 끝에 붙여넣고 저장한 후 nano 편집기를 나오시면 됩니다.

/swapfile   none    swap    sw    0   0

이제부터는 리눅스 서버가 재부팅 되더라도 swap 공간이 자동으로 활성화 됩니다.

흥미롭고 도움이 되는 글이었나요? 리뷰를 부탁드립니다.
[Total: 1 Average: 5]

Leave a Comment