ÆäÖУ¬¡°limit¡±£¨ÏÞÖÆ£©»úÖÆÊÇLinuxÄÚºËÌṩµÄÒ»ÏîÖØÒª¹¦ÄÜ£¬ËüÔÊÐíϵͳ¹ÜÀíÔ±ºÍÓû§¾«Ï¸µØ¿ØÖƽø³Ì¶Ôϵͳ×ÊÔ´µÄ·ÃÎʺÍÏûºÄ£¬´Ó¶øÈ·±£ÏµÍ³µÄÎȶ¨ÔËÐк͸ßЧÐÔÄÜ
±¾ÎĽ«ÉîÈë̽ÌÖLinuxϵÄ×ÊÔ´ÏÞÖÆ»úÖÆ£¨ÌرðÊÇÒÔ¡°limit a¡±ÎªÏßË÷£¬¾¡¹Ü¡°limit a¡±²¢·ÇÒ»¸öÖ±½ÓÃüÁµ«ÎÒÃǽ«Î§ÈÆ×ÊÔ´ÏÞÖÆµÄºËÐĸÅÄîÕ¹¿ª£©£¬º¸ÇÆäÖØÒªÐÔ¡¢¾ßÌåʵÏÖ·½Ê½¡¢Ó¦Óó¡¾°ÒÔ¼°×î¼Ñʵ¼ù
Ò»¡¢Linux×ÊÔ´ÏÞÖÆµÄÖØÒªÐÔ ÔÚÒ»¸ö¶àÓû§¡¢¶àÈÎÎñ»·¾³ÖУ¬²»Í¬½ø³Ì¿ÉÄÜÓÐ׎ØÈ»²»Í¬µÄ×ÊÔ´ÐèÇó
Èç¹û²»¼ÓÒÔÏÞÖÆ£¬Ä³Ð©½ø³Ì¿ÉÄÜ»á¹ý¶ÈÏûºÄCPUʱ¼ä¡¢ÄÚ´æ¡¢ÎļþÃèÊö·ûµÈ×ÊÔ´£¬µ¼ÖÂϵͳÏìÓ¦±äÂý¡¢·þÎñÖжÏÉõÖÁ±ÀÀ£
Linuxͨ¹ýһϵÁлúÖÆÊµÏÖÁ˶Ô×ÊԴʹÓõÄÓÐЧ¼à¿ØºÍÏÞÖÆ£¬ÕâЩ»úÖÆ°üÀ¨µ«²»ÏÞÓÚ£º - ulimit£ºÓû§¼¶±ðµÄ×ÊÔ´ÏÞÖÆÃüÁÔÊÐíÓû§»ò¹ÜÀíÔ±ÉèÖýø³ÌÄܹ»Ê¹ÓõÄ×ÊÔ´ÉÏÏÞ
- cgroups£¨¿ØÖÆ×飩£º¸üÇ¿´ó¡¢Áé»îµÄ×ÊÔ´¹ÜÀíºÍ¸ôÀ빤¾ß£¬¿ÉÒÔ¶Ô½ø³Ì×é½øÐÐϸÁ£¶ÈµÄ×ÊÔ´·ÖÅäºÍÏÞÖÆ
- Namespaces£¨ÃüÃû¿Õ¼ä£©£ºÓëcgroups½áºÏʹÓã¬ÊµÏÖ×ÊÔ´µÄÂß¼¸ôÀ룬ÌáÉý°²È«ÐԺͶà×â»§»·¾³µÄ¹ÜÀíÄÜÁ¦
¡°limit a¡±£¨´Ë´¦·ºÖ¸×ÊÔ´ÏÞÖÆ£©ÕýÊÇÕâЩ»úÖÆµÄºËÐÄ£¬Ëü²»½ö¹ØºõϵͳµÄÎȶ¨ÐÔ£¬»¹Ö±½ÓÓ°Ïìµ½·þÎñµÄÖÊÁ¿¡¢°²È«ÐÔºÍ×ÊÔ´ÀûÓÃЧÂÊ
¶þ¡¢Linux×ÊÔ´ÏÞÖÆµÄʵÏÖ·½Ê½ 2.1 ulimit£º¿ìËÙÉÏÊÖ `ulimit`ÊÇLinux shellÖÐÓÃÓÚÉèÖûò»ñÈ¡Îļþ´óС¡¢¿é´óС¡¢½ø³ÌÊýµÈ×ÊÔ´ÏÞÖÆµÄÃüÁî
Ëüͨ¹ýÐÞ¸Äshell»·¾³±äÁ¿À´Ó°Ï쵱ǰshell»á»°¼°ÆäÆô¶¯µÄ½ø³Ì
³£ÓÃÑ¡Ïî°üÀ¨£º - `-c`£ºÉèÖûò»ñÈ¡coreÎļþ´óСÏÞÖÆ
- `-d`£ºÉèÖûò»ñÈ¡Êý¾Ý¶Î´óСÏÞÖÆ
- `-f`£ºÉèÖûò»ñÈ¡Îļþ´óСÏÞÖÆ
- `-m`£ºÉèÖûò»ñȡפÁôÄÚ´æ´óСÏÞÖÆ£¨µ¥Î»£ºKB£©
- `-n`£ºÉèÖûò»ñÈ¡´ò¿ªÎļþÃèÊö·ûµÄÊýÁ¿ÏÞÖÆ
- `-p`£ºÉèÖûò»ñÈ¡¹ÜµÀ»º³åÇø´óСÏÞÖÆ
- `-s`£ºÉèÖûò»ñÈ¡¶ÑÕ»´óСÏÞÖÆ
- `-t`£ºÉèÖûò»ñÈ¡CPUʱ¼äÏÞÖÆ£¨µ¥Î»£ºÃ룩
- `-u`£ºÉèÖûò»ñÈ¡Óû§×î´ó½ø³ÌÊýÏÞÖÆ
- `-v`£ºÉèÖûò»ñÈ¡ÐéÄâÄÚ´æ´óСÏÞÖÆ
ÀýÈ磬`ulimit -n 1024`½«µ±Ç°Óû§µÄ´ò¿ªÎļþÃèÊö·ûÊýÁ¿ÏÞÖÆÎª1024¸ö
2.2 cgroups£ºÉîÈë¹ÜÀí Ïà½ÏÓÚ`ulimit`£¬cgroupsÌṩÁ˸üΪϸÖºͶ¯Ì¬µÄ×ÊÔ´¹ÜÀíÄÜÁ¦
ËüÔÊÐíϵͳ¹ÜÀíÔ±½«½ø³Ì·Ö×飬²¢ÎªÃ¿¸ö×é·ÖÅäÌØ¶¨µÄ×ÊÔ´Åä¶î£¬ÈçCPU¡¢ÄÚ´æ¡¢´ÅÅÌI/OµÈ
cgroupsµÄ³£ÓòÙ×÷°üÀ¨£º - ´´½¨ºÍɾ³ý×飺ʹÓÃcgcreateºÍcgdeleteÃüÁî
- ·ÖÅä×ÊÔ´£ºÍ¨¹ýÐÞ¸ÄcgroupsµÄÅäÖÃÎļþ£¨Èç`/sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us`ºÍ`/sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes`£©À´ÉèÖÃ×ÊÔ´ÏÞÖÆ
- ½«½ø³Ì¼ÓÈë»òÒÆ³ö×飺ʹÓÃcgclassify»ò`cgexec`ÃüÁî
cgroupsµÄÁé»îÐÔʹÆä³ÉΪÈÝÆ÷¼¼Êõ£¨ÈçDocker£©µÄ»ùʯ£¬Ê¹µÃÿ¸öÈÝÆ÷¶¼ÄÜ»ñµÃ¶ÀÁ¢µÄ×ÊÔ´Åä¶î£¬´Ó¶øÊµÏÖ×ÊÔ´µÄ¸ßЧÀûÓú͸ôÀë
Èý¡¢×ÊÔ´ÏÞÖÆµÄÓ¦Óó¡¾° LinuxµÄ×ÊÔ´ÏÞÖÆ»úÖÆ¹ã·ºÓ¦ÓÃÓÚ¸÷ÖÖ³¡¾°£¬°üÀ¨µ«²»ÏÞÓÚ£º - ·þÎñÆ÷¹ÜÀí£º·ÀÖ¹µ¥¸öÓ¦ÓóÌÐò»ò·þÎñÕ¼Óùý¶à×ÊÔ´£¬Ó°ÏìÆäËû·þÎñµÄÕý³£ÔËÐÐ
- ¿ª·¢»·¾³£ºÔÚ²âÊԺͿª·¢½×¶Î£¬Í¨¹ýÏÞÖÆ×ÊԴʹÓã¬Ä£ÄâÉú²ú»·¾³µÄ×ÊÔ´Ìõ¼þ£¬È·±£Èí¼þµÄ½¡×³ÐÔ
- ÈÝÆ÷»¯²¿Êð£ºÔÚÈÝÆ÷»¯Ó¦ÓÃÖУ¬Í¨¹ýcgroupsʵÏÖ×ÊÔ´µÄ¾«È·¿ØÖƺ͸ôÀ룬Ìá¸ß×ÊÔ´ÀûÓÃÂʺͷþÎñµÄ°²È«ÐÔ
- ½ÌÓýºÍÅàѵ£ºÏÞÖÆÑ§ÉúµÄʵÑé»·¾³×ÊÔ´£¬±ÜÃâ¶Ô½ÌѧϵͳÔì³É¹ý´óѹÁ¦
- ¶à×â»§»·¾³£ºÔÚ¶à×â»§ÔÆÆ½Ì¨ÖУ¬Í¨¹ý×ÊÔ´ÏÞÖÆÈ·±£¸÷×â»§Ö®¼äµÄ×ÊÔ´¹«Æ½·ÖÅ䣬·ÀÖ¹×ÊÔ´ÀÄÓÃ
ËÄ¡¢×î¼Ñʵ¼ù ÔÚÅäÖÃLinux×ÊÔ´ÏÞÖÆÊ±£¬×ñÑÒÔÏÂ×î¼Ñʵ¼ù¿ÉÒÔ°ïÖúÌá¸ßϵͳµÄÎȶ¨ÐԺͰ²È«ÐÔ£º 1.¶¨ÆÚÉ󼯣º¶¨ÆÚ¼ì²éϵͳ×ÊÔ´µÄʹÓÃÇé¿öºÍÏÞÖÆÅäÖã¬È·±£×ÊÔ´·ÖÅäºÏÀíÇÒ²»¹ý¶È
2.½¥½øµ÷Õû£º±ÜÃâÒ»´ÎÐÔÉèÖùýÓÚÑϸñµÄÏÞÖÆ£¬Ó¦Öð²½µ÷Õû£¬¹Û²ìϵͳ±íÏÖºóÔÙ×öÓÅ»¯
3.ÀûÓù¤¾ß£ºÊ¹ÓÃÈçtop¡¢htop¡¢vmstat¡¢`cgget`µÈ¹¤¾ß¼à¿Ø×ÊԴʹÓÃÇé¿öºÍÏÞÖÆ×´Ì¬
4.½áºÏ²ßÂÔ£º½«×ÊÔ´ÏÞÖÆÓëϵͳµÄÆäËû°²È«²ßÂÔ£¨ÈçSELinux¡¢AppArmor£©Ïà½áºÏ£¬ÔöǿϵͳµÄÕûÌ尲ȫÐÔ
5.Îĵµ¼Ç¼£ºÏêϸ¼Ç¼×ÊÔ´ÏÞÖÆµÄÅäÖúÍÔÒò£¬±ãÓÚºóÐøÎ¬»¤ºÍ¹ÊÕÏÅŲé
6.ÅàѵÓë½ÌÓý£º¶Ôϵͳ¹ÜÀíÔ±ºÍ¿ª·¢ÈËÔ±½øÐÐ×ÊÔ´¹ÜÀíºÍÏÞÖÆÉèÖõÄÅàѵ£¬Ìá¸ßÍŶӵÄ×ÊÔ´¹ÜÀíÒâʶ
Îå¡¢½áÓï LinuxϵÄ×ÊÔ´ÏÞÖÆ»úÖÆÊDZ£ÕÏϵͳÎȶ¨ÔËÐС¢ÌáÉý×ÊÔ´ÀûÓÃЧÂʺÍÈ·±£·þÎñÖÊÁ¿µÄ»ùʯ
ͨ¹ýºÏÀíÅäÖÃ`ulimit`ºÍcgroupsµÈ¹¤¾ß£¬ÏµÍ³¹ÜÀíÔ±¿ÉÒÔÓÐЧµØ¹ÜÀíºÍÓÅ»¯ÏµÍ³×ÊÔ´£¬Âú×㲻ͬӦÓó¡¾°µÄÐèÇó
È»¶ø£¬×ÊÔ´ÏÞÖÆµÄÉèÖò¢·ÇÒ»³É²»±ä£¬ÐèÒª¸ù¾Ýʵ¼ÊÇé¿ö½øÐж¯Ì¬µ÷ÕûºÍÓÅ»¯
Ëæ×ÅÔÆ¼ÆËã¡¢ÈÝÆ÷»¯µÈ¼¼ÊõµÄ²»¶Ï·¢Õ¹£¬LinuxµÄ×ÊÔ´ÏÞÖÆ»úÖÆÒ²½«³ÖÐøÑݽø£¬ÎªÎ´À´µÄÊý×ÖÊÀ½çÌṩ¸ü¼ÓÁé»î¡¢¸ßЧºÍ°²È«µÄ×ÊÔ´¹ÜÀí·½°¸
Òò´Ë£¬ÕÆÎÕ²¢ÉÆÓÃÕâЩ»úÖÆ£¬¶ÔÓÚÈκÎһλLinuxϵͳ¹ÜÀíÔ±»ò¿ª·¢ÈËÔ±¶øÑÔ£¬¶¼ÊÇÖÁ¹ØÖØÒªµÄ¼¼ÄÜ