- ÂÛ̳»ÕÕÂ:
- 11
|
Ò»¸önewʧ°ÜÎÊÌâµÄ²éÕÒ¹ý³Ì
ÔÚ²âÊÔ²¿·¢ÏÖÒ»¸öÎÊÌ⣬Õû¸öϵͳÅÜÒ»Õóºó¾ÍÓÐdaemon³ÌÐò±ÀÀ££¬Ëä²»ÊDZØÏÖ£¬µ«ÊÇÒ»Ì컹ÊÇ¿ÉÒÔ³öÏֺü¸´Î£¬µ¼ÖÂÐÔÄܲâÊÔÎÞ·¨¼ÌÐøÏÂÈ¥£¬¿´coreµÄÐÅÏ¢ÊÇnewʧ°ÜÁË£¬¾ßÌå¶ÑÕ»ÈçÏ£º
(gdb) bt
#0 0x2acd25c1 in kill () from /lib/libc.so.6
#1 0x2adfc58d in pthread_kill () from /lib/libpthread.so.0
#2 0x2adfc90b in raise () from /lib/libpthread.so.0
#3 0x2acd2364 in raise () from /lib/libc.so.6
#4 0x2acd389b in abort () from /lib/libc.so.6
#5 0x2ac57b57 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.5
#6 0x2ac57ba4 in std::terminate() () from /usr/lib/libstdc++.so.5
#7 0x2ac57d16 in __cxa_throw () from /usr/lib/libstdc++.so.5
#8 0x2ac57f02 in operator new(unsigned) () from /usr/lib/libstdc++.so.5
#9 0x2ac57fef in operator new[](unsigned) () from /usr/lib/libstdc++.so.5
#10 0x2abbfe43 in NSlab::alloc_buf(unsigned*) (pSize=0x7ffff300) at Nslab.cpp:199
¾¡¹Ünewʧ°ÜµÄÇé¿öÊÇ»áÓз¢Éú£¬µ«ÊÇÔÚÎÒÃǵÄÕû¸öϵͳÀïÃæ¶¼ÊDz»´¦ÀíÕâÖÖÇé¿öµÄ£¬ÎÒÃǴ󲿷ֵÄÄÚ´æ¶¼ÊǶ¨ºÃµÄ£¬Ê²Ã´ÑùµÄƽ̨ÐͺÅÄܹ»Ö§³Ö¶àÉÙ²¢·¢Á¬½Ó£¬ÕâЩ¶¼ÊÇÔ¤ËãºÃµÄ£¬ÊDz»»áÓÐnewʧ°ÜµÄÇé¿ö³öÏֵġ£
Ò»¿ªÊ¼»³ÒɸóÌÐòÓÐÄÚ´æÐ¹Â©£¬¿ÉÊÇ¿´Õû¸öcoreÎļþÖ»ÓÐ100¶àM£¬Ó¦¸ÃûÓз¢ÉúÄÚ´æÐ¹Â©µÄ¿ÉÄÜ¡£ÁíÍâÒ»´Î·¢Éú¿ÉÄÜ»¹ÊÇżȻ£¬ÔÚ¼ÌÐøÅܵĹý³ÌÖз¢ÏÖÆäËû³ÌÐòÒ²»á±ÀÀ££¬Ò²ÊÇÒòΪnewʧ°ÜÁË£¬²»¿ÉÄÜÆäËûµÄ³ÌÐò¶¼ÓпÉÄÜÄÚ´æÐ¹Â©£¬ºÜ¶à¶¼ÊDZȽÏÎȶ¨µÄ³ÌÐòÁË£¬Õâ¸ö¿ÉÄÜÐÔ²»´ó¡£
µÚ¶þ²½¿ªÊ¼»³ÒÉϵͳÊÇ·ñÕæµÄûÓÐÄÚ´æÁË£¿²¶»ñϵͳµÄSIGABRTÐźţ¬ÔÚÐźŴ¦Àíº¯ÊýÀïÃæ°ÑϵͳµÄ״̬ȫ²¿´òÓ¡ÁË£¬°üÀ¨£ºps¡¢top¡¢free¡¢/proc/meminfo,/proc/slabinfoµÈ¡£È»¶ø±ÀÀ£µÄʱºò»¹ÊÇÖ»¿´µ½¸Ã½ø³ÌÖ»Õ¼ÓÃÁË100¶àMµÄÄڴ棬¶ø´ËʱϵͳfreeµÄÄÚ´æÓÐ2GÖ®¶à£¬ÆäÓàµÄÐÅÏ¢Ò²¿ÉÖ¤Ã÷ϵͳÄÚ´æ¾ø¶Ô³ä×ã¡£¿´À´²»ÊÇϵͳÄÚ´æÒýÆðµÄÔÒò£¬Èç¹ûÊǵϰ£¬ÎÊÌâÒ²¾Í²»ÓÃÔÙ¼ÌÐø²éÕÒÁË£¬ÔÚÓÐÄÚ´æµÄʱºòҲʧ°ÜÕâ¸ö¾ÍÒ»¶¨²éÏÂÈ¥ÁË¡£
µÚÈý²½¿ªÊ¼»³ÒÉϵͳ£¬newÊDZê×¼¿âÌṩµÄ£¬¶ø´ËʱÎÒÃǵÄÄں˰汾´Ó2.4.32Ç¨ÒÆµ½2.4.35.4£¬ÊÇ·ñÓÐʲô¶«Î÷²»Æ¥ÅäÔì³ÉµÄ£¿downloadÁËÒ»¸östdc++¿â£¬newµÄʵÏÖÆäʵµ÷ÓõľÍÊÇC¿âÀïÃæµÄmalloc£¬ÔÚGNUÉÏÏÂÁËÒ»¸öÆ¥Åä°æ±¾µÄC¿â£¬ÔÚmallocÀïÃæ´òÓ¡ÁËһЩÈÕÖ¾£¬ÏëÓÃDEBUG°æ±¾µÄc¿â¿ª²éÕÒÏÂÎÊÌ⣬C¿âµÄ±àÒë¹ý³Ìȷʵͦ¸´ÔÓÂé·³£¬±àÍêºó¾Í×¼±¸·Åµ½ÏµÍ³ÉÏ£¬ÎªÁ˲»Ö±½Ó¸²¸Ç֮ǰµÄlibc¿â£¬ÎÒʹÓÃÁËmv°Ñ֮ǰµÄlibc¸ÄÁ˸öÃû×Ö£¬ËÖªlibcÒ»Ð޸ĺó£¬ËùÓеÄÃüÁî¶¼ÎÞ·¨Ê¹Ó㬶¼ÊÇÕÒ²»µ½libc¿â£¬Î¨Ò»¿ÉÓõÄÃüÁîºÃÏñֻʣÏÂÒ»¸öcdÁË£¬Á¬dd¾ÓȻҲÒÐÀµlibc¿â¡£ÎÞÄÎÖ»ºÃ¹Ò´ÓÅÌ£¬ºÃ²»ÈÝÒ×°Ñlibc¿½±´¹ýÈ¥ÁË£¬ºÃÁË£¬´óËÉÒ»¿ÚÆø£¬ÖØÆô£¬È»¶ø»»ÁËlibcºóµÄϵͳ¾ÍÊÇÎÞ·¨Æô¶¯¡£ÕÛÌÚÁËÒ»Ì죬È˱»ÕÛÌÚµ½ÔÎÁË£¬¾ÍÊÇû°ì·¨ÈÃËüÆðÀ´¡£
µÚËIJ½£¬¼ÈÈ»»»libcÔÝʱÐв»Í¨£¬ÄǾͻ»·½Ïò¡£mallocµÄʵÏÖÊǵ÷ÓÃÁ˲Ù×÷ϵͳµÄbrkÀ´ÊµÏֵģ¬ÄѵÀÕâÀïÃæÓÐʲôèÄ壿¿´ÁËÒ»ÏÂsys_brkµÄ´úÂ룬ÀïÃæ»á·µ»ØÊ§°ÜµÄµã»¹Õæ¶à£¬·´ÕýÐÞ¸ÄÄں˴úÂëºÍ»»ÄÚºËÒѾÊÇÇá³µÊì·£¬ÓÚÊÇÔÚÿ¸ö·µ»Øµã¶¼´òÓ¡ÁËÈÕÖ¾£¬»»Äںˡ£ÖÕÓÚÓÐÊÕ»ñÁË£¬·¢ÏÖÊÇÔÚsys_brkÀïÃæµ÷ÓÃdo_brk()µÄʱºòʧ°ÜÁË£¬ÔÙÏêϸ¸ú×ÙÏÂÈ¥£¬·¢ÏÖdo_brk()ÀïÃæÈçÏÂÓï¾äµ¼Öµķµ»ØENOMEMÁË£º
/* Check against address space limits *after* clearing old maps... */
if ((mm->total_vm << PAGE_SHIFT) + len > current->rlim[RLIMIT_AS].rlim_cur)
return -ENOMEM;
ÕâÌõÓï¾ä±íʾ¸Ã½ø³Ì·ÖÅäµÄÄÚ´æÒѾ³¬¹ýÁËÄܹ»·ÖÅäµÄ×î´óÄÚ´æÁË£¬current->rlim[RLIMIT_AS].rlim_curµÄÖµ´òÓ¡³öÀ´ÊÇ134217728£¬Ò²¾ÍÊÇ128MB£¬´ËʱÔÙ»ØÍ·¿´¿´Ö®Ç°µÄcoreÎļþ´óС£¬¹ûÈ»²»´ó²»Ð¡£¬ÕýºÃÊÇ134217728×Ö½Ú¡£Õâ¸öÖµÊÇ¿ÉÒÔͨ¹ýsetrlimit£¬È¡²ÎÊýRLIMIT_ASÀ´ÉèÖõģ¬ÔÙ¿´³ÌÐò´úÂ룬ֻÓÐÉèÖùýRLIMIT_COREµÄһЩÊôÐÔ£¬Ã»ÓÐÉèÖùýRLIMIT_ASµÄÊôÐÔ¡£ÄÇÓÖÊÇËÉèÖõģ¿µ½ÁËÕâÀï²âÊÔ¹ý¿ÉÒÔÔÙ´Îserlimit°ÑRLIMIT_ASÊôÐÔÉèÖÃΪ4G¼´¿É£¬µ«ÊÇÈç¹ûÎÊÌâµÄ¸ùԴûÓÐÕÒµ½£¬ÎÞ·¨ÖªµÀÊÇ·ñ»áÓÐDZÔÚÎÊÌâ¡£
µÚÎå²½£¬¿ªÊ¼ÕÒÊÇËÉèÖÃÁËRLIMIT_ASÊôÐÔ£¿°ÑÕû¸öϵͳµÄ´úÂëËÑË÷ÁËÒ»±éRLIMIT_ASºÍsetrlimit£¬¶¼Ã»Óз¢ÏÖ¡£ÄѵÀÊdzÌÐòÔËÐÐÖб»Ð޸ģ¿ÎªÁËÑéÖ¤£¬ÔÚ³ÌÐòÆô¶¯µãºÍSIGABRTÐźŴ¦Àíº¯ÊýÀïÃæ¶¼Í¨¹ýgetrlimitÈ¡RLIMIT_ASµÄÊôÐÔ²¢´òÓ¡£¬ÊÖ¹¤ÔËÐÐÁËһϣ¬·¢ÏÖÔÚÆô¶¯µÄʱºò´òÓ¡µÄÖµÊÇ4294967296£¬¼´4G£¬µ«ÊÇÈç¹û³ÌÐò±ÀÀ£ÁË£¬´òÓ¡µÄÖµ¾ÍÊÇ128MB£¬ÎÞÓΪÁËÑéÖ¤ÊÇ·ñÓÐÈËÔÚÖÐ;ÐÞ¸ÄÁË´ËÖµ£¬ÓÚÊÇÔÚsys_brkÀïÃæÈκηÖÅäÄڴ棬¾Í°ÑcurrentµÄ½ø³ÌÃûºÍ¸Ã½ø³ÌµÄRLIMIT_ASÖµ´òÓ¡£¬ÏëÖªµÀʲôʱºòRLIMIT_ASµÄÖµ»á±»Ð޸ġ£¼¸´ÎʵÑéÏÂÀ´£¬È´ÓÖ·¢ÏÖÓëÍÆÂÛ²»·ûºÏµÄµØ·½£¬Õâ¸öֵһֱûÓб»Ð޸ģ¬Ö»ÊdzÌÐòÆô¶¯µÄʱºòÓÐʱºòÊÇ4G£¬¶øÓÐʱºòÈ´¾ÍÊÇ128M£¬Åöµ½128MµÄʱºòÒ»ÅÜѹÁ¦¾Í»ánewʧ°ÜÁË£¬ÔÙ´ÎÏÝÈëÎÞÓï¡£
µÚÁù½×¶Î£¬ÔÚ¿´×ÅÉÏÃæËù×öµÄ¹¤×÷³ÌÐò´òÓ¡³öÀ´µÄÈÕÖ¾£¬ÏÝÈëÎÞÁÄ¡£Í¬Ê±Ò²ÔÚ²»Í£µÄÖØ¸´×Ånewʧ°ÜµÄÏÖÏó£¬ÒòΪÎÒÃÇ·¢ÏÖÐÞ¸ÄһЩϵͳ²ÎÊýºó£¬newʧ°ÜµÄ¿ÉÄÜÐÔÌá¸ßµ½ÁË50£¥ÒÔÉÏ¡£ÔÚÎÞÁĵĶ¢×ÅÕâЩÈÕÖ¾¿´Á˺þÃÖ®ºó£¬ÃÍÈ»Áé¹âÒ»ÉÁ£¬·¢ÏÖÈç¹ûÊÇ´Óweb²Ù×÷Ò³ÃæÉϵã»÷¡°ÆôÓá±À´Æô¶¯³ÌÐòµÄ£¬RLIMIT_ASµÄÖµ¾ÍÊÇ128M£¬È»¶øÈç¹ûÊÇ×Ô¼ºÔÚshell¿ØÖÆÌ¨ÀïÃæÇÃÃüÁîÆôÓóÌÐòµÄ£¬RLIMIT_ASµÄÖµ¾ÍÊÇ4G£¬ÎÞÒìÓÚ·¢ÏÖд󽣬Ī·ÇÊÇCGI×Ô¼ºÉèÖÃÁËRLIMIT_ASΪ128M£¬È»ºóµ÷ÓÃexeclÆôÓõijÌÐòÒ²ÊÇ128M£¬¸ÃÊôÐÔÊÇ´Ó¸¸½ø³Ì¼Ì³ÐµÄ¡£Ñé֤һϣ¬¹ûÈ»£¬CGIÆôÓóÌÐòÒ»¶¨»áÒònewʧ°Ü¶ø±ÀÀ££¬²¢ÇÒCGIÀïÃæRLIMIT_ASÊôÐÔÖµÒ²ÊÇ128MµÄ¡£µ«ÊÇCGI´úÂë×Ô¼ºÒ²Ã»ÓÐÉèÖÃ128MµÄÏÞÖÆ£¬Äª·ÇÓÖÊÇboa£¨ÎÒÃÇÓõÄHTTP·þÎñÆ÷ÊÇboa£©µÄ´úÂëÀïÃæÏÞÖÆµÄ£¿¸ÕºÃÎÒÃǵÄboaÊÇ´ÓÆäËû²¿ÃÅÄùýÀ´µÄ£¬Ö»ÓпÉÖ´ÐÐÎļþ£¬Ã»ÓÐÔ´Â룬ËùÒÔÒ²Äܹ»½âÊÍ֮ǰËùÓÐÔ´ÂëËÑË÷¶¼ËÑË÷²»µ½´úÂëµÄÔÒò¡£ÎÊÌâ¾ÍҪˮÂäʯ³öÁË£¬µÈµ½Äõ½boaµÄÔ´Âëʱ£¬¿Éϧһ¿´£¬ÀïÃæÒ²Ã»ÓÐÉèÖÃÕâ¸öÖµ£¬²»¹ýÖØÆôboa·¢ÏÖboa´òÓ¡µÄRLIMIT_ASֵȷʵÊÇ128M¡£¼û¹íÁË¡£
µÚÆß½×¶Î£¬ÎÞÁÄʱ£¬Í»È»ÁªÏëµ½£¬Ö±½ÓÔÚshellÀïÃæÖ±½ÓÆôÓÃboaÊÇ·ñÒ²ÊÇ4G£¿²âÊÔÁËһϣ¬¹ûÈ»£¬Ö±½ÓÇÃÈëboaÆô¶¯£¬RLIMIT_ASµÄÖµÊÇ4G£¬¶øÖ®Ç°ÎÒÃÇÖØÆôboa¶¼ÊÇͨ¹ýËûµÄ½Å±¾/etc/init.d/boa restartÀ´ÆôÓõģ¬Á¢¼´²é¿´¸Ã½Å±¾£¬ÔÚÀûÓÃdaemonÆôÓÃboa֮ǰ£¬ºÕÈ»·¢ÏÖÁËÀïÃæÓÐÕâôһ¾ä¡°ulimit -m 131072¡±,È¥µô£¬Ò»Çлָ´Õý³£¡£
ÖÁ´ËË®Âäʯ³ö£¬´Óʱ¼äÉÏÀ´¿´£¬±ÈÆð֮ǰµÄ¿çN¸öÄ£¿é×·²éÁË3ÖܲŲ鵽µÄÒ»¸öBUGÏà±È£¬´ËÎÊÌâÖ»²éÁË3ÌìµÄÑù×Ó£¬È»¶ø×·²é¹ý³ÌÈ´µøå´Æð·ü£¬Ö®Ç°Ò²²»ÊÇÓÉÎÒÀ´²éÕâ¸öÎÊÌ⣬ÊÇÏÂÃæµÄ¼¸¸öÈË£¬Ôڲ鵽ÓÐϵͳ»¹ÓÐÄÚ´æÓÖnewʧ°ÜµÄʱºò£¬ËûÃǾͲ»²éÁË£¬¿Ï¶¨µÄ˵²»ÊÇ´úÂëÎÊÌ⣬û·½·¨¼ÌÐø²éÕÒÏÂÈ¥µÄʱºò¶ª¸øÁËÎÒ£¬ÎÒ±ä³ÉÁËרÃŲéûÈËÔ¸Òâ²éµÄBUGµÄÈËÁË¡£
²éBUGµÄ¾Ñ黹ÊÇϸÐĺͿªÀ«Ë¼Â·£¬Ï¸Ðĵ±È»¾ÍÊǹØ×¢µ½Ò»Ð©±ðÈËÁôÒâ²»µ½µÄµØ·½£¬Í¨³£Ò»¸öСµÄ·¢ÏÖÁ¢¼´¾Í¿ÉÒÔ½â¾öÎÊÌ⣬ÎÒ¿´µ½ÓÐÈËÔÚÕÒÁ˰ëÌ컹ûÓж¨Î»µ½ÎÊÌâµÄÔÒò£¬¶øÓÐЩÈ˶ÔÏÖ³¡ÃéÒ»Ã飬¿´¿´Ò»Ð©ÐÅÏ¢£¬Á¢¼´¾ÍÕÒµ½ÁË˼·£¬µ±È»Ë¼Â·¿ªÀ«µÄÄÜÁ¦½¨Á¢ÔÚÄãµÄ֪ʶϵͳ֮Éϵġ£Í¬Ê±×¢ÒâÔÚ²éBUGµÄʱºò£¬Ò²Òª»ýÀÛ×Ô¼ºµÄ֪ʶ¡£ |
|