린아저씨의 잡학사전

리눅스 시스템을 이용하다 보면 ulimit 이라는 설정을 변경해야하는 경우가 종종 발생하게 됩니다. 아마 병렬처리 프로그램이나 동시 접속자가 많은 서비스를 운영하시면 max user process 부족이나 open files 의 부족이 그 경우일 것 입니다. 그렇다면 이때 내 장비에 설정된 ulimit은 어떻게 확인할 수 있는지, 내가 원하는 값으로 설정은 어떻게 변경하는지 알아보도록 하겠습니다.

 

 

1. ulimit 이란

ulimit이란 user limit를 줄인 단어로, 사용자가 실행시키는 프로세스의 자원을 제한하는 설정 입니다.

앞서 언급한 바와 같이 내가 사용하는 자바 프로그램 등에서 현재 설정된 ulimit의 open file 수보다 더 많은 수의 소켓 통신을 하게 된다면 장애가 발생하게 됩니다. 또는 설정된 max user processes보다 많은 쓰레드를 생성하더라도 장애가 발생하게 될 것 입니다.

 

2. ulimit 확인 방법

ulimit의 설정 방법은 간단 합니다. 단, soft 설정과 hard 설정으로 구분 되며 soft는 기본으로 적용되는 설정이며, hard는 최대치로 늘릴 수 있는 설정 입니다.

# Soft 설정 확인
$ ulimit -a -S

# Hard 설정 확인
$ ulimit -a -H

ulimit Soft(좌) Hard(우) 설정 값

ulimit Soft 설정 값과 Hard 설정 값을 비교해보면 open files나 stack size와 같은 설정은 soft보다 hard에서 훨씬 크게 잡혀 있는 것을 확인할 수 있습니다. 그리고 만약 ulimit 확인시 -S 또는 -H를 사용하지 않고 -a 옵션 하나만 사용하게 되면 기본적으로는 soft 설정값을 출력해 줍니다. 그렇기 때문에 hard 값을 확인하고 싶을 때는 반드시 -H 옵션을 추가해주어야 합니다.

ulimit soft/hard 지정 없이 조회시

3. ulimit 설정 방법

ulimit 설정 방법은 명령어를 사용하는 방법과 limits.conf 파일을 수정하는 방법 두가지가 있습니다. 두 방법 모두 장비 재부팅 없이 설정할 수 있으나, 명령어를 사용하는 방법은 세션이 끊어지면 초기화 되고 limits.conf 파일을 수정하는 방법은 한번 세션을 끊었다가 다시 로그인해야 적용됩니다.

 

3-1. 명령어 사용(임시)

ulimit 옵션

앞서 ulimit 조회시 각 설정 값의 소괄호 안에 -n, -u 등의 알파벳이 있는 것을 보셨을 것입니다. 명령어를 통해 ulimit을 변경할 때는 이 알파벳을 이용하여 원하는 설정을 변경하면 됩니다. 이렇게 명령어를 통해 변경해주게 되면 Soft 값과 Hard 값이 동시에 변경 됩니다.

# open files 변경
$ ulimit -n 8192

# max user processes 변경
$ ulimit -u 79100

그리고 간혹 명령어를 사용하여 변경시, ulimit: open files: cannot modify limit: Operation not permitted 이런 에러가 발생하는 경우가 있습니다. 권한이 없어서 발생하는 문제로 -H 옵션을 추가하여 Hard 값을 변경하려 시도하면 발생합니다. -H 옵션으로 ulimit을 변경하고 싶다면 sudo로도 진행할 수 없으며, 반드시 root 계정으로 진행을 해야합니다.

 

이 명령어를 이용하여 ulimit을 변경하는 방법은 세션이 끊기게 되면 설정 했던 값은 초기화 됨을 꼭 기억하셔야 합니다.

 

3-2. limits.conf 변경(영구)

limits.conf 파일의 절대 경로는 /etc/security/limits.conf 입니다. 

limits.conf 파일

limits.conf 파일은 다음과 같이 작성되어 있으며, 주석 처리되어 있는 내용을 읽어보면 <domain> <type> <item> <value> 형식으로 ulimit을 설정할 수 있다는 것을 알 수 있습니다.

  • <domain> : user 명을 의미하고, 모든 user에 적용하고 싶다면 *(wildcard) 를 사용할 수 있습니다.
  • <type> : soft limit을 할지, hard limit을 할지 선택할 수 있습니다.
  • <item> : open files는 nofile, max user processes는 nproc으로 설정하고 싶은 값을 선택할 수 있습니다.
  • <value> : 원하는 설정 값을 넣으면 됩니다. 단, soft 값은 0과 hard 값 사이의 값( 0 <= soft value <= hard value)으로 설정해야합니다.

명령어로 설정했던 open files와 max user processes를 limits.conf에서 설정하면 다음과 같습니다.

limits.conf 설정

4. 마치며

이렇게 ulimit 을 설정하는 방법에 대해서 알아보았습니다. 자주 사용하게 되는 설정은 아니지만, 리눅스를 사용하다 보면 반드시 한번쯤은 사용하는 설정이 아닐까 싶습니다. 복잡한 설정은 아니므로 한번 알아놓으면 나중에 사용할 일이 생길때 다시 한번 살짝 찾아보고 설정하면 될 것 같습니다. 끝.

공유하기

facebook twitter kakaoTalk kakaostory naver band