작성
·
75
0
안녕하세요. 강의를 보고 소켓이 연결될 때 로그를 남겨봤는데, 살펴보니 이유 없이 소켓 연결이 많이 생성되어 있는 것을 확인했습니다.
이런 경우 선생님께서는 어떻게 해결하셨나요?
소켓 메모리 낭비를 해결하셨다고 들었던 것 같아서 여쭤봅니다.
답변 2
0
수업에서 다루었던 클래스 중에 StompSessionEventListener 에서 session의 연결 현황을 확인해볼수 있는데 session이 많이 연결돼 있나요?
만약 그렇다면 프론트엔드에서 적절하게 disconnect를 해줘야 하는데 그렇지 못한것으로 보여집니다. 수업에서 다룬 프론트 코드에서 화면을 leave할때 disconnect를 해주고 있는데, 수업에서 만든 프론트 코드에서 여러 상황을 고려하긴 했지만, 브라우저를 종료시키는 방법에 따라 disconnect로직을 안탈수도 있을것 같습니다. 어떤 상황에서 연결세션이 만들어지는를 확인해주시고, 아마도 프론트엔드에서 적절하게 disconnect해야 할것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 우유소보루님.
소켓 연결을 관리할 때 메모리 낭비 문제는 여러 요인으로 발생할 수 있으며, 이는 효율적인 자원 사용 및 시스템 성능에 영향을 미칩니다. 소켓 메모리 낭비 문제를 해결하기 위해 몇 가지 접근 방법을 소개해 드리겠습니다.
불필요한 소켓 종료: 연결이 끝난 소켓에 대해 명시적으로 닫아주는 것이 중요합니다. 필요 없는 소켓이 계속 열린 상태로 유지되면 메모리 사용량이 증가하므로, 연결이 필요 없을 때는 즉시 close()
를 호출하여 소켓을 닫아야 합니다.
소켓 재사용: 가능한 경우 소켓을 재사용하는 것도 하나의 방법입니다. 일정한 조건에서 소켓 연결을 다시 사용할 수 있도록 설계하여 새로운 소켓 연결을 반복 생성하는 것을 방지할 수 있습니다.
최대 소켓 수 제한: 동시에 연결 가능한 소켓의 수를 제한합니다. 설정 가능한 최대 소켓 수를 초과하면 연결을 거부하거나 큐에서 대기하도록 하여 불필요한 메모리 사용을 피할 수 있습니다.
소켓 타임아웃 설정: 연결이 일정 시간 동안 비활성화 상태일 경우 자동으로 소켓을 닫도록 타임아웃을 설정합니다. 이는 유휴 상태의 연결이 시스템 자원을 계속해서 소모하는 것을 방지합니다.
정기적인 자원 청소: 주기적으로 시스템의 자원 사용 상태를 검사하고, 사용되지 않는 자원을 해제하는 작업을 수행합니다. 이를 통해 메모리 누수를 방지할 수 있습니다.
관련된 정보나 추가적인 해결 방법이 필요한 경우, 아래 유사한 질문 링크를 참고해 주세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.