½Ã½ºÅÛ ÃÖÀûÈ­ - µ¿½Ã»ç¿ëÀÚ ´Ã¸®±âÀ§ÇÑ Ä¿³Î Á¶Á¤ ±Û¾´³¯ : 2000³â 2¿ù 24ÀÏ(¸ñ) ±Û¾´ÀÌ : ¹®ÅÂÁØ (http://www.taejun.pe.kr, taejun@taejun.pe.kr, taejun@hitel.net) Âü°íÀÚ·á ÇÏÀÌÅÚ ¸®´ª½ºµ¿È£È¸ Tip&°æÇè´ã lt µ¿½Ã·Î °Ë»ö 20¸¸ÅëÀÇ ÀüÀÚ¸ÞÀÏ°ú sendmail(¸¶¼Ò 99. 05) Áß ³»¿ë ±âŸ ¸®´ª½º ¹× À¯´Ð½º ½Ã½ºÅÛ °ü¸® °ü·Ã ¼­Àû ¿î¿µÃ¼Á¦·Ð ¼­Àû ** À̱ÛÀº ½ÇÁ¦·Î Á¦°¡ ´ëÇü¼­¹ö¸¦ ¿î¿µÇÏ°í ÀÖ´Â »óȲ¿¡¼­ ³ª¿Â ±ÛÀº Àý´ë ¾Æ´Ï¸ç ±×³É ¿©±âÀú±â¼­ ÁÖ¿öµéÀº À̾߱âµé°ú ÀÚ·áµéÀ» Åä´ë·Î Çؼ­ ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. µ¿½ÃÁ¢¼ÓÀÌ ¸î¹é¸í¿¡¼­ ¸îõ¸íµÇ´Â ¼­ºñ½º¸¦ ÇÏ·Á¸é ´Ü¼øÇÏ°Ô Ä¿³Î ÄÄÆÄÀÏÇѹø ÇÏ°í ³¡³ª´Â °ÍÀÌ ¾Æ´Ï¶ó ¿©·¯°¡Áö Á¶Á¤À» ÇØÁÖ¾î¾ßÇÒ °ÍÀÌ ¸¹½À´Ï´Ù. ¶ÇÇÑ Çϵå¿þ¾î¿Í OS Á¦ÇÑÀÌ ÀÖÀ¸¹Ç·Î ·Îµå¹ë·±½Ì(ºÎÇϺлê), Æ®·¡ÇȺлêµîÀ» ÇÏ´Â ½ºÀ§Äª Àåºñ, Ŭ·¯½ºÅ͸µ ½Ã½ºÅÛ ±¸¼ºÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸¸Å­ ¼³°è¸¦ Àß ÇؾßÇÕ´Ï´Ù. ¿©±â¿¡ ¾ð±ÞÇÑ°ÍÀº ´ÜÁö ½±°Ô ÇÒ ¼ö ÀÖ´Â ¸Àº¸±âÁ¤µµÀÌÁö¿ä. ÀÌ·ÎÀÎÇؼ­ »ý±â´Â ¼ÕÇØ¿¡ ´ëÇؼ­´Â º»ÀÎÀÌ Àý´ë Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ³»¿ëÁß Æ²¸° ºÎºÐµµ ¸¹ÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù. 0. µé¾î°¡¸ç ´ë±Ô¸ð ¼­ºñ½º¸¦ ÁغñÇÏ´Â °æ¿ì ¿î¿µÃ¼Á¦ÀÇ Á¦ÇÑ»çÇ×À» ¸ÕÀú È®ÀÎÇؾßÇÑ´Ù. µ¿½Ã¿¡ ¿­¼ö ÀÖ´Â ÃÑÆÄÀϼö, ÇÑ ÇÁ·Î¼¼½º°¡ ¿­¼ö ÀÖ´Â ÆÄÀϼö µîµî. ¿¹¸¦ µé¾î ´ëÇü À¥¼­¹ö¸¦ ¾ÆÆÄÄ¡·Î ¼­ºñ½ºÇÏ´Â °æ¿ì¸¦ »ý°¢Çغ¸ÀÚ. ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î ÇÁ·Î¼¼½º ¹æ½ÄÀ¸·Î ¼­ºñ½º¸¦ ó¸®ÇÑ´Ù. ÀÌ°Ç »ç¿ëÀÚÀÇ ¿ä±¸°¡ ¿Ã¶§¸¶´Ù ÇϳªÀÇ ÇÁ·Î¼¼½º¸¦ ¶ç¿ì¹Ç·Î ¸¸¾à µ¿½Ã¿¡ 10¸íÀÇ »ç¿ëÀÚ°¡ Á¢¼ÓÀ» Çϸé 10°³ÀÇ ÇÁ·Î¼¼½º°¡ ¶°¾ßÇÑ´Ù´Â °ÍÀÌ´Ù. ÃÖ±ÙÀÇ ¾ÆÆÄÄ¡ ¼­¹ö´Â MaxClients 150 À̶ó°í ¼³Á¤µÇ¾îÀÖ´Ù. ÀÌ°Ç µ¿½Ã¿¡ 150°³ÀÇ ÇÁ·Î¼¼½º¸¦ ¶ç¿ï¼ö ÀÖÀ¸¸ç °á±¹ µ¿½Ã¿¡ 150¸íÀ» ¹Þ¾Æ µéÀÏ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.(½ÇÁ¦·Î ÀÌÁ¤µµ¸¸ ÇÏ´õ¶óµµ Àý´ë·Î ÀÛÀº ±Ô¸ð´Â ¾Æ´Ï´Ù) ±×·±µ¥ ¸¸¾à nobody°¡ ¸¸µé¾î³¾ ¼ö ÀÖ´Â ÃÖ´ë ÇÁ·Î¼¼½º °³¼ö°¡ ±× ÀÌÇ϶ó¸é? ´ç¿¬È÷ ¹®Á¦°¡ »ý±æ °ÍÀÌ´Ù. ¹°·Ð ÃÖ±Ù ·¹µåÇÞ 6.0 ÀÌ»ó ¹öÀüÀº ±× ÀÌ»óÀ¸·Î ¸ÂÃß¾îÁ® À־ ¹®Á¦°¡ »ý±âÁö´Â ¾Ê°ÚÁö¸¸. ¹®Á¦´Â ÇÁ·Î¼¼½º°¡ ¸¹ÀÌ ¶ß¸é ÇÁ·Î¼¼½º»Ó¸¸ÀÌ ¾Æ´Ï¶ó ¿­ ¼ö ÀÖ´Â ÆÄÀÏ ¼ö¿¡¼­µµ ¹®Á¦°¡ µÈ´Ù. ±×·¯¸é ¸ÕÀú ÇÁ·Î¼¼½ºÀÇ ÀÚ¿ø Çѵµ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ. 1. ÇÁ·Î¼¼½ºÀÇ ÀÚ¿øÇѵµ ÇÁ·Î¼¼½ºÀÇ ÀÚ¿øÇѵµ¸¦ ¸®´ª½º¿¡¼­´Â ulimit ¸¦ ÅëÇؼ­ ¾Ë ¼ö ÀÖ´Ù. (Redhat 6.0, PowerLinux µî) # ulimit -a (¶Ç´Â ulimit -Sa) --> soft Çѵµ core file size (blocks) 0 data seg size (kbytes) unlimited file size (blocks) unlimited max memory size (kbytes) unlimited stack size (kbytes) 8192 cpu time (seconds) unlimited max user processes 2048 pipe size (512 bytes) 8 open files 1024 virtual memory (kbytes) 2105343 # ulimit -Ha ------>> hard Çѵµ core file size (blocks) unlimited data seg size (kbytes) unlimited file size (blocks) unlimited max memory size (kbytes) unlimited stack size (kbytes) unlimited cpu time (seconds) unlimited max user processes 2048 pipe size (512 bytes) 8 open files 1024 virtual memory (kbytes) 4194302 ¼ÒÇÁÆ®Çѵµ´Â »õ·ÎÀº ÇÁ·Î¼¼½º°¡ ¸¸µé¾îÁ³À»¶§ µðÆúÆ®·Î Àû¿ëµÇ´Â ÀÚ¿øÀÇ ÇѵµÀÔ´Ï´Ù. ÀÌ°ÍÀ» ÇϵåÇѵµ±îÁö Áõ°¡½Ãų ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸ ÀÌ Çѵµ¸¦ ³Ñ¾î¼­ È®ÀåÇϴ°ÍÀº ½´ÆÛÀ¯Àú¸¸ÀÌ °¡´ÉÇÕ´Ï´Ù. ÇϵåÇѵµ´Â Àý´ëÀûÀÎ ¼±ÀÌÁö¿ä. ±×·¸´Ù¸é ÇϵåÇѵµ´Â ½´ÆÛÀ¯Àú¶ó°í ¹«ÇÑ´ë·Î ´Ã¸±¼ö Àִ°¡? Àý´ë ¾Æ´ÏÁö¿ä. ÀÌ°Ç Ä¿³ÎÂ÷¿ø¿¡¼­ ÁöÁ¤À» ÇؾßÇÕ´Ï´Ù. ÀÌ¿¡ ´ëÇؼ­´Â µÚ¿¡¼­ ¼³¸íÇÕ´Ï´Ù. À§¿¡¼­ °¢ Ç׸ñÀ» º¼±î¿ä? ÄÚ¾îÆÄÀÏÀÇ ÃÖ´ëÅ©±â ÇÁ·Î¼¼½ºÀÇ µ¥ÀÌŸ ¼¼±×¸ÕÆ® ÃÖ´ëÅ©±â ½©¿¡¼­ »ý¼ºµÇ´Â ÆÄÀÏ¤Ò ÃÖ´ëÅ©±â resident set sizeÀÇ ÃÖ´ëÅ©±â(¸Þ¸ð¸® ÃÖ´ëÅ©±â) ÇÁ·Î¼¼½ºÀÇ ½ºÅà ÃÖ´ëÅ©±â ÃÑ ´©ÀûµÈ CPU½Ã°£(ÃÊ) ´ÜÀÏ À¯Àú°¡ »ç¿ë°¡´ÉÇÑ ÇÁ·Î¼¼½ºÀÇ ÃÖ´ë°¹¼ö 512-¹ÙÀÌÆ® ºí¶ôÀÇ ÆÄÀÌÇÁ Å©±â open file descriptorsÀÇ ÃÖ´ë ¼ýÀÚ(¿­¼öÀÖ´Â ÃÖ´ëÆÄÀϼö) ½©¿¡¼­ »ç¿ë°¡´ÉÇÑ °¡»ó ¸Þ¸ð¸®ÀÇ ÃÖ´ë¿ë·® °¢ ¼³Á¤À» ¼öÁ¤ÇÒ ¼ö Àִµ¥ Çб³¿¡¼­ ½Ç½À¿ë ¿öÅ©½ºÅ×À̼ÇÀ¸·Î ¾²´Â°Ô ¾Æ´Ï¶ó¸é º¸Åë ÀÌ·±ÀÛ¾÷À» ÇÒ ÀÏÀº ¾øÀ»µí. ¿©±â¼­ °¢ Ç׸ñ¿¡ ´ëÇؼ­ Àß ¸ð¸¥´Ù¸é ÇÁ·Î±×·¡¹Ö, OS °ü·ÃÃ¥À» º¸¼Å¾ßÇÒµí. (½ÇÀº Àúµµ ´Ù ±î¸Ô¾úÀ½) À§¿¡¼­ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ¿­ ¼ö ÀÖ´Â ÆÄÀÏÀÇ ÃÖ´ë°ªÀº ulimit ¸í·ÉÀ» ÀÌ¿ëÇؼ­´Â ¼öÁ¤ÀÌ µÇÁö ¾Ê½À´Ï´Ù. ´ÜÁö º¸¿©Áֱ⸸ ÇÒ »ÓÀÌÁÒ. ÀÌ°Ç Ä¿³Î¼Ò½º¸¦ ¶â¾î°íÄ¡µçÁö /proc ¿¡¼­ Á÷Á¢ ¼öÁ¤ÇϵçÁö ÇؾßÇÕ´Ï´Ù. ÃÖ±ÙÀÇ ¸®´ª½º¹èÆ÷ÆÇ¿¡¼­´Â À¯Àú´ç ÃÑ 2048°³ÀÇ ÇÁ·Î¼¼½º¸¦ ¶ç¿ï ¼ö ÀÖ°í ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ÃÑ 1024°³ÀÇ ÆÄÀÏÀ» ¿­ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î ÀÌ°Ç Ä¿³Î 2.0´ë¿¡¼­ 2.2´ë·Î ¿Ã¶ó°¡¸é¼­ °¡Àå Å©°Ô º¯ÇÑ ºÎºÐÁßÀÇ ÇϳªÀÔ´Ï´Ù. ½ÇÁ¦·Î ÀÌÁ¤µµ¸¸Çصµ ÀϹÝÀûÀÎ ¼­ºñ½º¿¡¼­´Â ÃæºÐÇÏ°í ÀÌ°É ¹Ù²Ù¾î¾ß ÇÒ °æ¿ì´Â °ÅÀÇ ¾øÀ» °ÍÀÔ´Ï´Ù. µû¸¥ ¸»·Î Çؼ­ "¶±À» Ĩ´Ï´ç" ±×·±µ¥ ¿ì¸®ÀÇ ¸ñÇ¥´Â ´ë±Ô¸ð ¼­ºñ½º¸¦ ÇÏ´Â °ÍÀÌÀݾƿä? 2. ÆÄÀÏ, ÇÁ·Î¼¼½º °¹¼ö Á¶Á¤ ÁÖ¿äÇÏ°Ô »ìÆì¾ßÇÒ °Íµí. ¸®´ª½º¿¡¼­ µ¿½Ã¿¡ ¿­ ¼ö ÀÖ´Â ÆÄÀϼö : NR_FILE , 4096 ÇÑ ÇÁ·Î¼¼½º°¡ ¿­ ¼ö ÀÖ´Â ÆÄÀϼö : NR_OPEN, 1024 # vi /usr/src/linux/include/linux/fs.h #define NR_OPEN (1024*1024) /* Absolute upper limit on fd num */ #define NR_FILE 4096 /* this can well be larger on a larger system */ ¿©±â¼­ ÇÑ ÇÁ·Î¼¼½º°¡ ¿­¼ö ÀÖ´Â ÆÄÀϼö¸¦ ¼öÁ¤ÇÏ·Á¸é /usr/src/linux/include/linux/limits.h ¿¡¼­ #define NR_OPEN 1024 À̺κеµ ¼öÁ¤À» ÇØÁÖ¾î¾ßÇÕ´Ï´Ù. ¼öÁ¤À» ÇÏ¿´À¸¸é ÄÄÆÄÀÏÀ» Çؼ­ Å×½ºÆÃÀ» Çؾ߰ÚÁö¿ä. ¿©±â¼­ ÁÖÀÇÇÒ °ÍÀº ¸Þ¸ð¸®°¡ ÀûÀº ½Ã½ºÅÛÀÇ °æ¿ì¶ó¸é ºÎÆÃÀÌ µÇÁö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù. ±×·±µ¥ ±»ÀÌ ÄÄÆÄÀÏÀ» ÇÏÁö ¾Ê¾Æµµ /proc ¸¦ ÀÌ¿ë º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. # cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192 # cat /proc/sys/fs/file-nr 591 184 8192 ¿©±â¼­ 591´Â ÇöÀç ÇÒ´çµÈ ÆÄÀÏÇÚµé, 184´Â ±×Áß»ç¿ëµÈ ÆÄÀÏÇÚµé, 8192´Â ÆÄÀÏÇÚµéÀÇ ÃÖ´ë¼ýÀÚÀÔ´Ï´Ù. ÇÒ´çµÈ ÆÄÀÏÇÚµéÀÌ ÃÖ´ëÄ¡·Î °¡´õ¶óµµ ½ÇÁ¦ »ç¿ëµÈ ÆÄÀÏÇÚµéÀÇ ¼ýÀÚ°¡ ¿©À¯°¡ ÀÖ´Ù¸é °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. (¸¸¾à ½Ã½ºÅÛ¿¡¼­ "running out of file handles" ¶ó´Â ¸Þ½ÃÁö°¡ ³ª¿Â´Ù¸é ¿­¼ö ÀÖ´Â ÆÄÀÏ¿¡ ¹®Á¦°¡ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù) ±×·±µ¥ ¾ÈŸ±õ°Ôµµ ÇÑ ÇÁ·Î¼¼½º´ç ¿­¼ö ÀÖ´Â ÆÄÀϼö(NR_OPEN)Àº ½±°Ô ¹Ù²Ü ¼ö°¡ ¾ø½À´Ï´Ù. ±âº» 1024Àε¥ ÀÌ°Ç À§¿¡¼­ ¸»À» ÇÏ´ë·Î ÄÄÆÄÀÏÀ» Çϼ¼¿ä. ±×´ÙÀ½ ½Ã½ºÅÛÀÌ »¸À»Áö °è¼Ó À¯ÁöµÉÁö´Â... ¿©±â¼­ Á»¸¸ ´õ »ìÆ캸Áö¿ä. (´Ù½Ã NR_FILE ÀÌ 4096À̶ó Çϱ¸¿ä) # cat /proc/sys/fs/inode-max 8319 # cat /proc/sys/fs/inode-nr 8340 1006 ÆÄÀÏ Çڵ鿡 µû¶ó Ä¿³Î¿¡¼­ µ¿ÀûÀ¸·Î inde structures¸¦ ÇÒ´çÇÕ´Ï´Ù. inode-max´Â inode Çڵ鷯ÀÇ ÃÖ´ë°ªÀÔ´Ï´Ù. ¿©±â¼­ inode-max °ªÀº 3-4¹èÀÌ»óÀ¸·Î Ç϶ó°í ÃßõÇÕ´Ï´Ù. /usr/src/linux/Documentation/proc.txt ¿¡ /proc ¿¡ ´ëÇÑ »ó¼¼ÇÑ ¼³¸íÀÌ ³ª¿ÍÀִµ¥ ÀÌ¿¡ ´ëÇؼ­ »ìÆ캸Áö¿ä. This value should be 3 to 4 times larger than the value in file-max, since stdin, stdout, and network sockets also need an inode struct to handle them. ±×·¯´Ï±ñ stdin(Ç¥ÁØÀÔ·Â), stdout(Ç¥ÁØÃâ·Â), ³×Æ®¿÷ ¼ÒÄÏ¿¡¼­ ÆÄÀÏÀ» ´Ù·ç±â À§ÇØ inode struct °¡ ÇÊ¿äÇÏ´Ù°í Çϳ׿ä. ¸ÞÀϼ­¹ö°¡ 200°³ ÀÌ»ó ½ÇÇàµÇ°Å³ª À¥¼­¹ö°¡ µ¿½Ã¿¡ 400°³ ÀÌ»ó ½ÇÇàµÇ´Â ´ëÇü »çÀÌÆ®¿¡´Â ÃÖ´ë°ªÀ» Å©°Ô ¸¸µå´Â °ÍÀÌ ÁÁ´Ù°í Çϳ׿ä. ±×·±µ¥ Áß¿äÇÑ°Ç ¹«Á¶°Ç ´Ã¸°´Ù°í ÁÁÀº°ÍÀº ¾Æ´Ï°ÚÁö¿ä? ÃÖ´ë°ªÀÌ ´Ã¾î³¯ ¼ö·Ï ´õ ¸¹Àº ¸Þ¸ð¸®°¡ ÇÊ¿äÇÏ°í ÀÚ¿øÇÒ´çµµ ´õ ¸¹ÀÌ ÇÊ¿äÇϱâ¿ä. ±×·¡¼­ °¡´ÉÇÏ¸é ¾î¶² ÇÁ·Î±×·¥¿¡¼­ ¾µµ¥¾ø´Â ÆÄÀÏÀº ¿­Áö ¾Êµµ·Ï Çϸé ÆÄÀÏÇÚµéÀ» ÇÒ´çÇÏÁö ¾Ê±â¶§¸Þ ¿­¸° ÆÄÀϼö°¡ ÁÙ¾îµé°ÚÁö¿ä. ÇϳªÀÇ ¿­¸° ÆÄÀϼö¸¦ ÁÙÀ̸é 268°³ÀÇ ÆÄÀÏÀ» ´Ý´Â È¿°ú°¡ ÀÖ´Ù°í Çϴµ¥ Á¦°¡ À̺κÐÀº ¾ÆÁ÷ Á¤È®È÷ ÀÌÇØ°¡ °¡Áö ¾Ê½À´Ï´Ù. À̹ø¿£ ½Ã½ºÅÛÀÇ ÃÖ´ë ÇÁ·Î¼¼½º¼ö¸¦ »ý°¢Çغ¼±î¿ä? ¿¹¸¦ µé¾î ÅÚ³ÝÀ¸·Î Á¢±ÙÇÏ´Â °æ¿ì ÃÖ¼ÒÇÑ ·Î±×ÀÎÇÁ·Î±×·¥°ú ½©ÇÁ·Î±×·¥ µÎ°³ÀÇ ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ°ÚÁö¿ä? 256¸íÀÌ Á¢±ÙÇϸé ÃÖ¼Ò 512. ±×·¸´Ù¸é ½Ã½ºÅÛÀÇ ÃÖ´ë ÇÁ·Î¼¼½º °¹¼ö¸¦ ¼³Á¤ÇÏ´Â °Íµµ À§¿Í ºñ½ÁÇÕ´Ï´Ù. /usr/src/linux/include/linux/tasks.h ¿©±â¼­º¸¸é #define NR_TASKS 2560 /* On x86 Max 4092, or 4090 w/APM configured. */ #define MAX_TASKS_PER_USER 2048 x86 ½Ã½ºÅÛ¿¡¼­´Â ÃÖ´ë 4092±îÁö °¡´ÉÇÏ´Ù°í µÇ¾îÀÖ°í À¯Àú´ç ÃÖ´ë ÇÁ·Î¼¼½º¼ö´Â 2048ÀÔ´Ï´Ù. ÀÌ°Ç ulimit¿¡¼­ º¸¾ÒÁö¿ä? ÀÚ ÀÌÁ¦ ¸¶Áö¸·À¸·Î ÇÁ·Î¼¼½º¿¡¼­ ¿­¾î³õÀº ÆÄÀÏÀ» ¾î¶»°Ô È®ÀÎÇÒ °ÍÀΰ¡? lsof ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¸é µË´Ï´Ù. man ÆäÀÌÁö¸¸ ÇÏ´õ¶óµµ ÇÁ¸°Æ®Çϸé ÇÑ 30¿©ÆäÀÌÁö°¡ µÇ´Â°Í °°³×¿ä. Çѹø ¿¬±¸Çغ¼ °¡Ä¡°¡ ÀÖÀ»µí. ¿ÀÇÂÆÄÀÏÀº Á¤±ÔÆÄÀÏ, µð·ºÅ丮, ºí¶ô ¹× ij¸¯ÅÍÆÄÀÏ(device), ¶óÀ̺귯¸®, executing text reference, ½ºÆ®¸² ¶Ç´Â ³×Æ®¿÷ÆÄÀÏ(ÀÎÅÍ³Ý ¼ÒÄÏ, NFS file ¶Ç´Â À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏ) µîÀÌ ÀÖ½À´Ï´Ù.