가끔씩 내 어플리케이션이 멈추는 이유(스레드, 가비지 컬렉션)

NANA·2024년 5월 31일
0

그냥일기

목록 보기
7/7

자바 소켓 통신 관련 공부를 하다가 발견한 내용.

내용 출처 : 자바 네트워크 소녀 네티

블로킹 + 클라이언트가 접속할 때마다 스레드를 새로 생성하는 로직으로 소켓 통신을 한다고 가정했을 때 스레드가 게송 생성되어 서버 소켓의 병목 현상과 자바 힙 메모리의 부족 현상이 발생할 수 있다.

그래서 스레드 풀링을 사용하기도 한다.
스레드를 미리 여러 개 만들어서 풀 안에 넣어 놓고 클라이언트가 서버에 접속하면 플에서 가용 스레드를 가져와서 처리하고.. 작업이 끝나면 다시 스레드
여러 클라이언트가 서버에 붙으면 스레드

즉 스레드 풀의 크기(풀 안에 들어가는 스레드 개수?)가 곧 동시 접속 수가 되겠다.
동시접속 수를 늘리기 위해 스레드 풀을 자바 힙이 허용하는 최대 한도까지 늘리는 것이 옳은가? >>

  1. 자바 가비지 컬랙션
    스레드 풀을 자바 힙이 허용하는 최대치로 늘려서 자바 프로세스를 동작시키면 당연히 가비지 컬랙션의 대상이 되는 객체 수가 늘어난다. 가비지 컬랙션이 동작할 때는 다른 스레드를 멈추게 되는데 그러면 어플리케이션이 먹통이 된 것처럼 보인다.

이 부분 때문에 글을 쓰게 됨.
나는 소스 코드를 짤 때 스레드 같은 걸 신경쓰지 않고 짰는데 가끔 동작하다가 어플리케이션이 멈추는 경우가 있었다. 그게 다 내가 스레드 관리를 못해서.. 가비지 컬렉터가 열일 하느라 그랬던게 아닌지..

  1. 운영체제에서 사용되는 컨텍스트 스위칭
    한 프로세스에서 수행되는 스레드들이 CPU 점유를 위해서 자신의 상태를 변경하는 작업.
    수많은 스레드가 실행되면 CPU 자원을 획득하기 위해 경쟁하면서 CPU 자원을 소모하기 때문에 실제로 작업에 사용할 CPU 자원이 적어지게 된다.

결론 : 블로킹 방식은 필요할 때만 쓰자

profile
기술블로그 그런 거창한 거 아닙니다. 일기에요 일기

0개의 댓글