티스토리 뷰

Linux

[Linux] setrlimit, getrlimit

덕쑤 2014. 1. 24. 16:07

http://man7.org/linux/man-pages/man2/getrlimit.2.html


시스템의 리소스 제한값을 보거나 설정하는 것은 아래 함수를 통해 할 수 있다.

설정이 필요한 프로그램 실행전에 명령으로 설정을 매번 바꿔줘야 한다는 것이다.

#include <sys/time.h>
#include <sys/resource.h>

 


struct {
rlim_t rlim_cur; // soft
rlim_t rlim_max; // hard
};

// rlim_cur 설정하고자 하는 값

// rlim_max 설정 가능한 최대값


int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);



리소스 제한 값에는 soft limit과 hard limit 두가지가 있는데, soft limit는 hard limit 한도내에서 자유롭게 변경할 수 있다.

 

각 값들은 0인 경우 disable이고, RLIM_INFINITY(-1) 인 경우 무한대이다. limit 값들의 flag 이름들은 아래와 같다.


  • RLIMIT_AS : 가상 주소 공간 제한 제한
  • RLIMIT_CORE : 코어파일 크기
  • RLIMIT_CPU : 최대 CPU 사용시간
  • RLIMIT_DATA : data segment 크기 제한
  • RLIMIT_FSIZE : File size
  • RLIMIT_LOCKS : 최대 File Lock 개수
  • RLIMIT_MEMLOCK : CPY_SYS_IPC 설정없이 mlock(), shmctl()등으로 가질수 있는 메모리 크기
  • RLIMIT_MSGQUEUE : massage queue 크기
  • RLIMIT_NICE
  • RLIMIT_NOFILE : fd갯수 제한
  • RLIMIT_NPROC : user가 돌릴 수 있는 process 수 제한
  • RLIMIT_RSS : maximun number of pages // 커널 2.4 에서만 효력
  • RLIMIT_RTPRIO
  • RLIMIT_SIGPENDING : 최대로 queue될 수 있는 signal갯수
  • RLIMIT_STACK : 프로세스 스택 크기 제한


이러한 값들을 가지고 설정하거나, 값을 확인하는 코드 예는 아래와 같다.


struct rlimit rlim;
int ret;

// get RLIMIT_CORE value
ret = getrlimit(RLIMIT_CORE, &rlim);
if (ret == -1) perror("getrlimit"), return 1;

printf ("RLIMIT_CORE sft(%ld), hrd(%ld)\n", rlim.rlim_cur, rlim.rlim_max);

// set RLIMIT_CORE value
rlim.rlim_cur = 32 * 1024 * 1024;
rlim.rlim_max = RLIM_INFINITY;
ret = setrlimit(RLIMIT_CORE, &rlim);
if (ret == -1) perror("setrlimit"), return 1;


'Linux' 카테고리의 다른 글

Embedded system을 위한 linux 최적화 기술  (0) 2014.08.20
clock_gettime  (0) 2014.08.11
[Linux] Memory  (0) 2014.01.22
[Linux] Process  (0) 2014.01.22
[Linux] fork, vfork 그리고 posix_spawn 이야기  (0) 2014.01.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함