※ Linux: How to Change ulimit. (open files, core file size)
안녕하세요. 듀스트림입니다.
리눅스 시스템을 구축, 운영 하다보면 open files와 core file size 등을 변경 해야할 필요가 가끔 있습니다.
오늘은 저 세션 파라미터들이 어떤 역할을 하고 어떻게 변경하고 적용하는지 살펴보겠습니다.
1. ulimit?
• ulimit은 사용자 세션과 해당 세션에서 실행되는 프로세스에 적용되는 리소스 제한을 설정하는 쉘 명령입니다.
• 프로세스 수준에서 적용되며, 커널이 제공하는 리소스 제어 기능을 활용합니다.
• 특정 사용자, 세션, 또는 애플리케이션(예: PostgreSQL)에서만 적용됩니다.
▸ 확인 방법
ulimit -a
2. core file size (core 파일 크기)
• 프로그램이 비정상 종료(예: segmentation fault)되었을 때 생성되는 코어 덤프 파일의 최대 크기를 설정합니다.
• 코어 덤프 파일은 디버깅에 사용되며, 프로세스 상태, 메모리 등의 정보를 포함합니다.
• 기본값이 0이면 코어 덤프 파일 생성이 비활성화됩니다.
• 0 → unlimited (또는 제한을 높임):
- 비정상 종료 시 코어 덤프 파일이 생성되어 디버깅이 가능해집니다.
- 큰 코어 덤프 파일이 생성될 경우 디스크 공간을 빠르게 소모할 수 있으므로 주의해야 합니다.
- 개발 환경에서는 코어 덤프를 활성화하여 문제를 파악할 수 있지만, 운영 환경에서는 디스크 사용량을 관리하기 위해 비활성화하는 경우가 많습니다.
3. open files (열 수 있는 파일 개수)
• 프로세스가 동시에 열 수 있는 파일 디스크립터(file descriptor, FD)의 최대 개수를 설정합니다.
• 파일 디스크립터는 파일, 소켓, 파이프 등 다양한 리소스에 사용됩니다.
• 낮은 설정 값 (예: 기본값 1024):
- 프로세스가 동시에 많은 파일을 열어야 하는 경우(예: 다수의 연결을 처리하는 서버 애플리케이션) 문제가 발생할 수 있습니다.
- PostgreSQL처럼 여러 데이터베이스 연결과 WAL 파일 작업을 수행하는 애플리케이션에서는 FD 부족으로 에러가 발생하거나 성능이 저하될 수 있습니다. (에러 메시지 예: too many open files)
• 높은 설정 값 (예: 65535):
- 많은 파일 디스크립터를 사용하는 애플리케이션이 원활하게 작동합니다.
- 시스템 리소스를 과도하게 사용할 경우, 커널이 처리할 수 있는 전체 FD 개수 (/proc/sys/fs/file-max)를 초과할 위험이 있습니다.
• 데이터베이스 연결이 많거나, 대량의 데이터를 처리하거나, 다수의 테이블 및 인덱스를 사용하는 경우 높은 ulimit -n 값이 필요합니다. (적정값은 운영 환경에 따라 다르지만, 일반적으로 최소 65535 이상을 권장합니다.)
4. 설정 방법
▸ 유저 전용 conf 파일 생성: root로 수행
vi /etc/security/limits.d/postgres.conf
▸ 아래 내용 추가: root로 수행
[유저명] soft core unlimited
[유저명] hard core unlimited
[유저명] soft nofile 65535
[유저명] hard nofile 65535
▸ 파라미터 적용을 위해 프로세스(DB 등) 재기동
▸ 프로세스 적용 확인
cat /proc/$(ps -u [유저명] | grep -i [프로세스명] | awk '{print $1}' | sort -n | head -1)/limits

오늘 포스팅은 여기까지~
다음 포스팅도 기대해주세요-!
'Linux' 카테고리의 다른 글
| Linux: chage 사용법 (0) | 2025.02.23 |
|---|---|
| Linux: 심볼릭 링크와 하드 링크 (1) | 2025.01.16 |
| Linux: top 사용법 (2) | 2025.01.03 |
| 도커(Docker): 명령어 사전 (1) | 2024.12.16 |
| 도커(Docker): 사용법 (1) | 2024.12.16 |