½Ã½ºÅÛ ÀÚ¿øÀÇ °ªÀ» ¾ò¾î¿À°Å³ª ¼³Á¤ÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Docbook ¿ø¹®

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=getrlimit">getrlimit</a>(2)

1장. getrlimit(2)

ÀÚ¿ø(resource)ÀÇ °ªÀ» ¾ò¾î¿À°í, °ªÀ» ¼³Á¤ÇÑ´Ù.


1.1. »ç¿ë¹ý

#include <sys/types.h>
#include <sys/resource.h>
#include <unistd.h>

int getrlimit(int resource, struct rlimit *rlim);
int getrusage(int who, struct rusage *usage);
int setrlimit(int resource, const struct rlimit *rlim);
		


1.2. ¼³¸í

getrlimit()¿Í setrlimit()´Â ÀÚ¿øÀÇ Á¦ÇѰªÀ» ¾Ë¾Æ³»°Å³ª ¼³Á¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. À̶§ ÀÚ¿øÀÇ Á¾·ù´Â resource¸¦ ÀÌ¿ëÇØ¼­ ÁöÁ¤°¡´ÉÇÏ´Ù. resource´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù. ¸®¼Ò½ºÀÇ Å©±â´Â rlim¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. rlim±¸Á¶Ã¼´Â ´ÙÀ½ÀÇ ¸â¹öµéÀ» °¡Áø´Ù.

struct rlimit
{
    rlim_t rlim_cur;   /* soft limit */
    rlim_t rlim_max;   /* Hard limit */ 
};
		
¼ÒÇÁÆ® ¸®¹ÌÆ®(soft limit)´Â º¯°æÇϰíÀÚ ÇÏ´Â °ªÀ» Ä¿³Î¿¡ ¿äûÇÑ´Ù. ÇÏµå ¸®¹ÌÆ®(hard limit)´Â ÀÚ¿øÀÇ ¼³Á¤°¡´ÉÇÑ ÃÖ´ë °ªÀ¸·Î rlim_curÀº ÇÏµå ¸®¹ÌÆ®ÀÇ Á¦ÇÑÀ» ¹Þ°Ô µÈ´Ù.

´ÙÀ½Àº ¼±Åð¡´ÉÇÑ resourceÀÇ Á¾·ùµéÀÌ´Ù.

RLIMIT_CPU     /* ÃÊ ´ÜÀ§ÀÇ CPU ½Ã°£ */
RLIMIT_FSIZE   /* ÃÖ´ë ÆÄÀÏ Å©±â */
RLIMIT_DATA    /* ÃÖ´ë µ¥ÀÌŸ Å©±â */
RLIMIT_STACK   /* ÃÖ´ë ½ºÅà ũ±â */
RLIMIT_CORE    /* ÃÖ´ë ÄÚ¾î ÆÄÀÏ Å©±â */
RLIMIT_RSS     /* ÃÖ´ë °ÅÁÖ ÁýÇÕ Å©±â */
RLIMIT_NPROC   /* ÃÖ´ë ÇÁ·Î¼¼½º ¼ö */
RLIMIT_NOFILE  /* ÃÖ´ë ¿­ ¼ö ÀÖ´Â ÆÄÀÏÀÇ ¼ö */
RLIMIT_MEMLOCK /* ÃÖ´ë Àá±ä ±â¾ï Àå¼Ò ÁÖ¼Ò °ø°£ */
RLIMIT_AS      /* ÁÖ¼Ò °ø°£(°¡»ó ¸Þ¸ð¸®) Á¦ÇѰª */
		

getrusage()´Â ÇöÀç »ç¿ëÁßÀÎ resource Á¤º¸¸¦ µÇµ¹·ÁÁØ´Ù. who´Â RUSAGE_SELF ¿Í RUSAGE_CHILDREN µÑ Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀüÀÚ´Â ÇöÀç ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ´Â ¸®¼Ò½ºÀÇ Á¤¸¦º¸ µÇµ¹·ÁÁÖ°í ÈÄÀÚ´Â ÇöÀç ÇÁ·Î¼¼½º¿Í ±× ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÏ´Â ¸ðµç ¸®¼Ò½ºÀÇ Á¤º¸¸¦ µÇµ¹·ÁÁØ´Ù(Á¾·áµÇ¾î¼­ ±â´Ù¸®´Â ÀÚ½Ä ÇÁ·Î¼¼½ºµµ Æ÷ÇԵȴÙ.) ÀÌµé ¸®¼Ò½º Á¤º¸´Â rusage¿¡ ÀúÀåµÈ´Ù.

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* messages sent */
    long   ru_msgrcv;        /* messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};
		


1.3. ¹Ýȯ°ª

¼º°øÇÒ°æ¿ì 0À» ½ÇÆÐÇßÀ»°æ¿ì¿¡´Â -1À» ¹ÝȯÇϸç, Àû´çÇÑ errno °ªÀ» ¼³Á¤ÇÑ´Ù.


1.4. ¿¡·¯

EFAULT

rlim ȤÀº usageÀÌ À߸øµÈ ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù.

EINVAL

getrlimit()³ª setrlimit()¿¡¼­ À߸øµÈ resource³ª who°ªÀ» »ç¿ëÇßÀ» °æ¿ì

EPERM

½´ÆÛÀ¯Àú°¡ ¾Æ´Ñ »ç¿ëÀÚ°¡ setrlimit()¸¦ ÀÌ¿ëÇØ¼­ ÇöÀç Çϵ帮¹ÌÆ® °ªÀ» ÃʰúÇØ¼­ ¼ÒÇÁÆ® ¸®¹ÌÆ® °ªÀ̳ª ÇÏµå ¸®¹ÌÆ® °ªÀ» Àû¿ë½Ãų·Á°í ÇÒ°æ¿ì


1.5. ¿¹Á¦

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

int main()
{
    struct rlimit rlim;

    // »ý¼º°¡´ÉÇÑ ÇÁ·Î¼¼½ºÀÇ °¹¼ö¸¦ Ãâ·ÂÇÑ´Ù. (ÇöÀç : ÃÖ´ë) 
    getrlimit(RLIMIT_NPROC, &rlim);
    printf("PROC MAX : %lu : %lu\n", rlim.rlim_cur, rlim.rlim_max);

    // ¿Àǰ¡´ÉÇÑ ÆÄÀÏÀÇ °¹¼ö¸¦ Ãâ·ÂÇÑ´Ù.   
    getrlimit(RLIMIT_NOFILE, &rlim);
    printf("FILE MAX : %lu : %lu\n", rlim.rlim_cur, rlim.rlim_max);

    // »ç¿ë°¡´ÉÇÑ CPUÀÚ¿øÀ» Ãâ·ÂÇÑ´Ù. 
    getrlimit(RLIMIT_CPU, &rlim);

    // ¸¸¾à ¹«ÇÑ´ë·Î »ç¿ë°¡´ÉÇÏ´Ù¸é UNLIMIT¸¦ Ãâ·ÂÇϵµ·ÏÇÑ´Ù.
    // CPUÀÚ¿øÀº ÃÖ´ëÇÑ »ç¿ë°¡´ÉÇϵµ·Ï µÇ¾îÀÖÀ½À¸·Î UNLIMIT¸¦ Ãâ·ÂÇÒ°ÍÀÌ´Ù.
    if(rlim.rlim_cur == RLIM_INFINITY)
    {
        printf("UNLIMIT\n");
    }
}
		


#include <sys/time.h> 
#include <sys/resource.h> 
#include <unistd.h> 
#include <stdio.h> 
 
int main(int argc, char **argv) 
{ 
        struct rlimit rlim; 
 
        getrlimit(RLIMIT_NOFILE, &rlim); 
        printf("Open file %d : %d\n", rlim.rlim_cur, rlim.rlim_max); 
 
        rlim.rlim_cur += 1024; 
        rlim.rlim_max += 1024; 
        if(setrlimit(RLIMIT_NOFILE, &rlim) == -1) 
                return 0; 
        printf("Open file %d : %d\n", rlim.rlim_cur, rlim.rlim_max); 
} 
 

±âŸ ¼³¸í

ÀÏ¹Ý À¯Àú´Â hard limit °ªÀ» º¯°æÇÒ ¼ö ¾ø´Ù. ´ÜÁö hard limit °ªÀÇ Çϵµ ³»¿¡¼­ soft limit °ªÀ» º¯°æÇÒ ¼ö ÀÖÀ» »ÓÀÌ´Ù. ±×·¯¹Ç·Î ½ÇÁúÀûÀ¸·Î Á¦ÇÑ °ªÀ» º¯°æÇϱâ À§Çؼ­´Â ·çÆ® ±ÇÇÑÀ¸·Î /etc/security/limits.conf ÆÄÀÏ¿¡ Ãʱâ hard limit°ª°ú soft limit°ªÀ» ¼³Á¤ ÇØµÎ¾î¾ß ÇÑ´Ù.

Æ÷¸ËÀº ´ÙÀ½°ú °°´Ù.
# domain    type     item      value 
# yundream À¯ÀúÀÇ ÇÁ·Î¼¼½º°¡ ¿­ ¼ö ÀÖ´Â ÆÄÀÏÀÇ °³¼ö¸¦ soft limit 2048, hard limit 4096 À¸·Î ÁöÁ¤ÇÑ´Ù. 
yundream    soft    nofile    2048 
yundream    hard   nofile    4096 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.