프로세스가 사용하는 자원에 대한 제어(user limit)를 관리할 수 있게 도와줍니다.
OutOfMemoryError
가 발생했는데 쓰레드를 더 이상 생성할 수 없다는 메시지가 나온다면 이 설정을 의심해 볼 필요가 있습니다.
ulimit에서 자주 설정하게 되는 값은 open file과 max user process 설정입니다. 이 값에 따라 프로그램에서 소켓 커넥션 수, 혹은 생성 가능한 쓰레드 수가 제한됩니다.
- Java에서 동시에 생성 가능한 쓰레드 수는 max user processes를 따라간다.
- Java에서 소켓 통신(HTTP API, JDBC 커넥션 등)은 open file 옵션을 따라간다.
단, JDK 내부 코드상에서 hard limit 값이 soft limit에 update된다.
- 파이썬의 경우 soft limit 값을 따라간다.
# 하드 설정 확인
$ ulimit -a -H
# 소프트 설정 확인
$ ulimit -a -S
예시
어떤 유저가 할당된 제한 값 이상의 리소스를 사용 할 수는 없습니다.
소프트 값은 0과 하드 limt 사이의 값을 가질 수 있습니다. (0 <= soft limit <= hard limit)
즉, 하드 limit은 소프트 limit들의 최대값 역할을 합니다.
하드 limit은 root 사용자만 값을 증가시킬 수 있습니다.
설정파일(기본 파일 - /etc/security/limits.conf
)의 가장 아래쪽에 domain, type, item, value를 적어주시면 됩니다.