시간차를 두고 openfiles, max user processes이 연관된 이슈를 만나게 되었고 해결과정에서 부끄럽게도 처음 듣는 내용들임과 동시에 서버 설정과 관련이 있는 사항이라 꼭 한번 정리하고 가야겠다 생각되어 관련 정보들을 공부하는 과정 속에 글을 작성합니다.
1. open files
리눅스의 open files 옵션은 프로세스가 가질 수 있는 소켓 포함 파일 개수로 해당 프로세스의 필요한
File Descriptor/openfiles 수가 옵션의 크기를 넘어가게 되면 Too many open files
라는
에러 메세지함께 에러가 발생합니다.
해당 옵션값은 "limit -a
(soft Limit)", "ulimit -aH
(Hard Limit)" 두 가지 명령어로 확인 가능합니다.
-> JDK는 내부 코드상 hard limit을 따라갑니다.
2. max user processes
max user processes
란 사용자가 사용할 수 있는 프로세스의 최대 개수를 설정합니다.
ulimit -a
명령어로 확인 할 수 있습니다.
리눅스에서 Java Thread
개수가 프로세스 개수의 포함되기 때문에 스레드를 max user processes를 초과하여 생성하면 OutOfMemoryError가 발생합니다.
max user processes를 초과하는 경우, 프로세스의 할당된 메모리를 초과하는 경우 쓰레드가 정상적으로
생성되지 않습니다.
3. ulimit 설정값 설정
ulimit -"key" "data"
형식의 명령어로 변경 가능하지만 현재 세션에서만 일시적으로 적용된다.
-s | 최대 스택 크기 변경 |
-n | open files 개수 변경 |
-u | max user process의 개수 변경 |
-p | 파이프 크기 변경 |
-d | 프로세스 데이터 세그먼트 크기 변경 |
- 영구적으로 변경하려면 etc/security/limits.conf 에서 변경해야 한다.
can be one of the following 하단의 설명에서 원하는 옵션값을 입력하여 변경하면 된다.
- 맨 앞은 사용자명을 설정하고 "*" 은 모든 사용자를 의미한다.
참조
'서버' 카테고리의 다른 글
GCP 프리티어(무료) 사용 (0) | 2023.09.04 |
---|
댓글