ͨ¹ý¹Ø±ÕPythonÀ¬»ø»ØÊÕ£¨Garbage
Collection£¬GC£©»úÖÆ£¨Í¨¹ý»ØÊÕºÍÊÍ·ÅδʹÓõÄÊý¾ÝÀ´»ØÊÕÄڴ棩£¬InstagramµÄÐÔÄÜ¿ÉÒÔÌá¸ß10£¥¡£Êǵģ¬ÄãûÓÐÌý´í£¡Í¨¹ý½ûÓÃGC£¬ÎÒÃÇ¿ÉÒÔ¼õÉÙÄÚ´æÕ¼Óò¢Ìá¸ßCPU
LLC»º´æÃüÖÐÂÊ¡£Èç¹ûÄãÏëÖªµÀΪʲô£¬ÄÇô¾ÍÀ´ÔĶÁChenyang WuºÍMin NiΪ´Ë׫дµÄÎÄÕ¡£
×÷ÕßChenyang WuÊÇInstagramµÄÈí¼þ¹¤³Ìʦ£¬Min NiÊÇInstagramµÄ¼¼Êõ¾Àí¡£
ÎÒÃÇÈçºÎ¹ÜÀíWeb·þÎñÆ÷
InstagramµÄweb·þÎñÆ÷ÒÔ¶à½ø³ÌµÄģʽÔËÐÐÔÚDjangoÉÏ£¬Ö÷½ø³Ì·Ö²æ´´½¨¼¸Ê®¸ö¹¤×÷½ø³Ì£¬ÓÃÀ´½ÓÊÕ´«ÈëµÄÓû§ÇëÇó¡£¶ÔÓÚÓ¦ÓóÌÐò·þÎñÆ÷£¬ÎÒÃÇʹÓôøÇ°ÖÃģʽµÄuWSGIÀ´ÀûÓÃÖ÷½ø³ÌºÍ¹¤×÷½ø³ÌÖ®¼äµÄÄÚ´æ¹²Ïí¡£
ΪÁË·ÀÖ¹Django·þÎñÆ÷ÔËÐе½OOM£¬uWSGIÖ÷½ø³ÌÌṩÁËÒ»ÖÖ»úÖÆ£¬µ±ÆäRSSÄڴ泬¹ýãÐÖµÊ±ÖØÐÂÆô¶¯¹¤×÷½ø³Ì¡£
Á˽âÄÚ´æ
ÎÒÃÇ¿ªÊ¼Ñо¿¹¤×÷RSSÄÚ´æÎªÊ²Ã´ÔÚÓÉÖ÷½ø³Ì²úÉúºóѸËÙÔö³¤¡£Ò»¸ö¹Û²ìÊÇ£¬¼´Ê¹RSS´æ´¢Æ÷ÒÔ250MB¿ªÊ¼£¬Æä¹²ÏíÄÚ´æÏ½µ·Ç³£¿ì£ºÔÚ¼¸ÃëÖÓÄÚ´Ó250MB½µµ½Ô¼140MB£¨¹²ÏíÄÚ´æµÄ´óС¿ÉÒÔ´Ó/proc/PID/smaps¶ÁÈ¡£©¡£ÕâÀïµÄÊý×ÖÊÇÎÞȤµÄ£¬ÒòΪËüÃÇÒ»Ö±Ôڱ䶯£¬µ«¹²ÏíÄڴ涪ÆúµÄ¹æÄ£ºÜÓÐȤ£º´óÔ¼1/3µÄ×ÜÄÚ´æ¡£½ÓÏÂÀ´£¬ÎÒÃÇÏëÒªÁ˽âΪʲô¹²ÏíÄÚ´æÔÚ¹¤×÷Æ÷²úÉúÒÁʼ¾Í±äΪÿ¸ö½ø³ÌµÄ˽ÓÐÄÚ´æ¡£
ÎÒÃǵÄÀíÂÛ£º¶Áʱ¸´ÖÆ
LinuxÄÚºËÓÐÒ»¸ö³ÆÎªÐ´Èë¸´ÖÆ£¨Copy-on-Write£¬CoW£©µÄ»úÖÆ£¬ÓÃ×÷·Ö²æ½ø³ÌµÄÓÅ»¯¡£×Ó½ø³Ìͨ¹ýÓëÆä¸¸½ø³Ì¹²Ïíÿ¸öÄÚ´æÒ³¿ªÊ¼¡£½öµ±Ò³Ã汻дÈëʱ¸´ÖƵ½×ÓÄÚ´æ¿Õ¼äµÄÒ³Ãæ£¨ÓйØÏêϸÐÅÏ¢£¬Çë²ÎÔÄά»ù°Ù¿ÆÉϵÄCopy_on_Write´ÊÌõ£©¡£
µ«ÔÚPythonÖУ¬ÓÉÓÚÒýÓÃÁ˼ÆÊý£¬ÊÂÇé±äµÃÓÐȤÁË¡£Ã¿´ÎÎÒÃǶÁȡһ¸öPython¶ÔÏóʱ£¬½âÊÍÆ÷½«Ôö¼ÓÆäÒýÓüÆÊý£¬Õâ±¾ÖÊÉÏÊÇ¶ÔÆäµ×²ãÊý¾Ý½á¹¹µÄдÈë¡£Õâ¾Íµ¼ÖÂÁËCoW¡£Òò´Ë£¬Ê¹ÓÃPython£¬ÎÒÃǾͽøÐжÁʱ¸´ÖÆ£¨Copy-on-Read£¬CoR£©£¡
#define PyObject_HEAD \ _PyObject_HEAD_EXTRA \ Py_ssize_t ob_refcnt; \ struct _typeobject *ob_type; ... typedef struct _object { PyObject_HEAD } PyObject; |
ÄÇôÎÊÌâÊÇ£ºÎÒÃÇÊÇÔÚдʱ¸´ÖƲ»¿É±ä¶ÔÏó£¨Èç´úÂë¶ÔÏó£©Ã´£¿¸ø¶¨PyCodeObjectȷʵÊÇPyObjectµÄ¡°×ÓÀࡱ£¬ÄÇô´ð°¸ÏÔȻΪ£ºÊÇ¡£ÎÒÃǵĵÚÒ»¸öÏë·¨£¬ÊǽûÓöÔPyCodeObjectµÄÒýÓüÆÊý¡£
³¢ÊÔ1£º½ûÓôúÂë¶ÔÏóµÄÒýÓüÆÊý
ÔÚInstagram£¬ÎÒÃÇÏÈ×ö¼òµ¥µÄÊÂÇé¡£¿¼Âǵ½ÕâÊÇÒ»¸öʵÑ飬ÎÒÃǶÔCPython½âÊÍÆ÷×öÁËһЩСµÄÐ޸ģ¬ÑéÖ¤ÁËÒýÓüÆÊý¶Ô´úÂë¶ÔÏóûÓиı䣬Ȼºó½«CPythonÓ¦Óõ½ÎÒÃǵÄÒ»¸öÉú²ú·þÎñÆ÷¡£
½á¹ûÁîÈËʧÍû£¬ÒòΪ¹²ÏíÄÚ´æÃ»Óб仯¡£µ±ÎÒÃÇÊÔͼÕÒ³öÔÒòʱ£¬ÎÒÃÇÒâʶµ½Ã»ÓÐÈκοɿ¿µÄÖ¸±êÀ´Ö¤Ã÷·ÖÎöÊÇ·ñÕýÈ·£¬Ò²²»ÄÜÖ¤Ã÷¹²ÏíÄÚ´æºÍ´úÂë¶ÔÏóµÄ¸±±¾Ö®¼äµÄ¹ØÏµ¡£ÏÔÈ»£¬ÕâÀïȱÉÙһЩʲô¶«Î÷¡£ÓÉ´Ë»ñµÃµÄ¾ÑéÊÇ£ºÔÚÔË×÷֮ǰ֤Ã÷ÄãµÄÀíÂÛ¡£
·ÖÎöÒ³Ãæ¹ÊÕÏ
µ±ÎÒÃÇÔÚGoogleÉÏËÑË÷¹ØÓÚCopy-on-WriteµÄ×ÊÁϺó£¬Á˽⵽Copy-on-WriteÓëϵͳÖеÄÒ³Ãæ´íÎóÊÇÏà¹ØÁªµÄ¡£Ã¿¸öCoWÔÚ¹ý³ÌÖд¥·¢Ò³Ãæ´íÎó¡£Linux¸½´øµÄPerf¹¤¾ßÔÊÐí¼Ç¼Ӳ¼þ/Èí¼þϵͳʼþ£¬°üÀ¨Ò³Ãæ´íÎó£¬ÉõÖÁ¿ÉÒÔÌṩ¶ÑÕ»¸ú×Ù£¡
ÓÚÊÇÎÒÃÇÔËÐÐÁËÒ»¸öprod·þÎñÆ÷£¬ÖØÆô·þÎñÆ÷ºó£¬µÈ´ýËü½øÐзֲ棬µÃµ½ÁËÒ»¸ö¹¤×÷½ø³ÌµÄPID£¬È»ºóÔËÐÐÒÔÏÂÃüÁ
perf record -e page-faults -g -p <PID> |
ÎÒÃǾÍÓÐÁËÒ»¸öеÄÏë·¨£¬¿´¿´µ±Ò³Ãæ´íÎóÈç¹û·¢ÉúÔÚ¶ÑÕ»¸ú×ٵĹý³ÌÖлᷢÉúʲô¡£
½á¹û³öºõÒâÁÏ£¬²¢Ã»Óи´ÖÆ´úÂë¶ÔÏó£¬×î´óµÄÒÉÐ×ÊÇcollect£¬ËüÊôÓÚgcmodule.c£¬²¢ÔÚ´¥·¢À¬»ø»ØÊÕʱ±»µ÷Óá£ÔÚÔĶÁÁËGCÔÚCPythonÖеŤ×÷ÔÀíºó£¬ÎÒÃǵóöÁËÒÔÏÂÀíÂÛ£º
»ùÓÚãÐֵȷ¶¨ÐԵش¥·¢CPythonµÄGC¡£Ä¬ÈÏãÐÖµ·Ç³£µÍ£¬Òò´ËËüÔÚºÜÔçµÄ½×¶Î¾Í¿ªÊ¼ÁË¡£Ëüά»¤¶ÔÏóµÄ·Ö´úÁ´½ÓÁÐ±í£¬²¢ÇÒÔÚGCÆÚ¼ä£¬Á´½ÓÁÐ±í±»Ï´ÅÆ¡£ÒòΪÁ´½ÓÁбí½á¹¹Óë¶ÔÏó±¾ÉíÒ»Æð´æÔÚ£¨¾ÍÏñob_refcount£©£¬ÔÚÁ´½ÓÁбíÖиÄдÕâЩ¶ÔÏ󽫵¼ÖÂÒ³Ãæ±»CoW£¬ÕâÊÇÒ»¸ö²»Ðҵĸ±×÷Óá£
/* GC information is stored BEFORE the object structure. */ typedef union _gc_head { struct { union _gc_head *gc_next;/ union _gc_head *gc_prev; Py_ssize_t gc_refs; } gc; long double dummy; /* force worst-case alignment */ } PyGC_Head; |
³¢ÊÔ2£º³¢ÊÔ½ûÓÃGC
¼ÈÈ»ÊÇGCͱÁËÎÒÃÇÒ»µ¶£¬ÄǾͽûÓÃËü£¡
ÎÒÃÇÒýµ¼½Å±¾Ìí¼ÓÁËÒ»¸ögc.disable()µ÷Óã¬È»ºóÖØÆôÁË·þÎñÆ÷¡£ÎÒÃÇÖØÐÂÆô¶¯ÁË·þÎñÆ÷£¬µ«ÊÇ£¬ºÜ²»ÐÒ£¡Èç¹ûÎÒÃÇÔٴβ鿴perf£¬½«»á¿´µ½gc.collectÈÔÈ»±»µ÷Ó㬲¢ÇÒÄÚ´æÈÔÈ»±»¸´ÖÆ¡£ÀûÓÃGDBµÄһЩµ÷ÊÔ£¬ÎÒÃÇ·¢ÏÖ£¬Ê¹ÓõÄÒ»¸öµÚÈý·½¿â£¨msgpack£©µ÷ÓÃgc.enable()½«Æä»Ö¸´£¬Òò´Ëgc.disable()ÔÚÒýµ¼Ê±±»Çå³ý¡£
ÐÞ²¹msgpackÊÇÎÒÃÇÒª×öµÄ×îºóÒ»¼þÊ£¬ÒòΪËüÒâζ×ÅÎÒÃÇûÓÐ×¢Òâµ½ÆäËû¿âÔÚδÀ´Ò²»á×öͬÑùµÄÊÂÇé¡£Ê×ÏÈ£¬ÎÒÃÇÐèҪ֤ʵ½ûÓÃGSʵ¼ÊÉÏÊǺÜÓаïÖúµÄ¡£´ð°¸´æÔÚÓÚgcmodule.cÖС£×÷Ϊgc.disableµÄÌæ´ú£¬ÎÒÃÇ×öÁËgc.set_threshold(0)£¬ÕâÒ»´Î£¬Ã»ÓÐÈκοⱻ»Ö¸´¹ýÀ´¡£
ÕâÑù£¬ÎÒÃdzɹ¦µØ½«Ã¿¸ö¹¤×÷½ø³ÌµÄ¹²ÏíÄÚ´æ´Ó140MBÌá¸ßµ½225MB£¬²¢ÇÒÿ̨»úÆ÷ÔÚÖ÷»úÉϵÄ×ÜÄÚ´æÊ¹ÓÃÁ¿¼õÉÙÁË8GB¡£Õâ¾ÍΪÕû¸öDjango¼¯Èº½ÚÔ¼ÁË25%µÄÄÚ´æ¡£ÓÐÁËÕâô´óµÄÍ·²¿¿Õ¼ä£¬£¬ÎÒÃÇÄܹ»ÔËÐиü¶àµÄ½ø³Ì»òÔËÐдøÓиü¸ßµÄRSSÄÚ´æãÐÖµ¡£Êµ¼ÊÉÏ£¬ÕâÑùµÄ¸Ä½ø½«Django²ãµÄÍÌÍÂÁ¿Ìá¸ßÁË10£¥ÒÔÉÏ¡£
³¢ÊÔ3£ºÐèÒªÍêÈ«½ûÖ¹GC
ÔÚÎÒÃdz¢ÊÔÁËÒ»¶ÑÉèÖÃÖ®ºó£¬ÎÒÃǾö¶¨ÔÚ¸ü´óµÄ·¶Î§ÄÚ³¢ÊÔ£º¼¯Èº¡£·´À¡Ï൱¿ì£¬ÒòΪ½ûÓÃGCºó£¬ÖØÆôWeb·þÎñÆ÷±äµÃºÜÂý£¬ÒÔÖÁÓÚÎÒÃǵÄÁ¬Ðø²¿Êð±»ÖжÏÁË¡£Í¨³£ÖØÆôºÄʱ²»µ½10ÃëÖÓ£¬µ«½ûÓÃGCºó£¬ÓÐʱºò£¬ºÄʱ»á³¬¹ý60Ãë¡£
2016-05-02_21:46:05.57499 WSGI app 0 (mountpoint='') ready in 115 seconds on interpreter 0x92f480 pid:
4024654 (default app)
|
ÖØÏÖÕâ¸öbug·Ç³£ÉËÄԽÒòΪËü²»ÊÇÈ·¶¨ÐԵġ£¾¹ý´óÁ¿ÊµÑéºó£¬Ò»¸öÕæÕýµÄre-topÔÚ¶¥²¿ÏÔʾÁË¡£µ±·¢ÉúÕâÖÖÇé¿öʱ£¬Ö÷»úÉϵĿÉÓÃÄÚ´æÖè½µµ½½Ó½üÁã²¢Ìø»Ø£¬Ç¿ÆÈËùÓеĸßËÙ»º´æÄÚ´æ³·³ö¡£È»ºóµ½ËùÓеĴúÂë/Êý¾ÝÐèÒª´Ó´ÅÅ̶ÁÈ¡£¨DSK
100%£©µÄʱ¿Ì£¬Ò»Çж¼ÂýÍÌÍ̵ġ£
ÌýÉÏÈ¥ºÜÆæ¹Ö£¬Python»áÔڹرսâÊÍÆ÷֮ǰ×ö×îºóÒ»¸öGC£¬Õâ»áÔں̵ܶÄʱ¼äÄÚ£¬µ¼ÖÂÄÚ´æÊ¹ÓÃÁ¿²úÉú¾Þ´óµÄ·ÉÔ¾¡£ÔÙÕß¾ÍÊÇ£¬ÎÒÏëÏÈÖ¤Ã÷Ëü£¬È»ºóŪÇå³þÈçºÎÕýÈ·´¦ÀíËü¡£Òò´Ë£¬ÎÒÔÚuWSGIµÄpython²å¼þÖÐ×¢Ê͵ôPy_FinalizeµÄµ÷Óã¬ÎÊÌâ¾ÍÏûʧÁË¡£
µ«ÏÔÈ»µÄÊÇ£¬ÎÒÃDz»ÄܶÔPy_FinalizeÖ»ÊÇÒ»½ûÁËÖ®¡£ÒòΪÎÒÃÇÓÐÒ»¶ÑÖØÒªµÄÇåÀí£¬ÒªÓõ½ÒÀÀµËüµÄatexit¹³×Ó¡£×îºó£¬ÎÒÃÇËù×öµÄ¾ÍÊÇ£¬ÔÚCPythonÌí¼ÓÒ»¸öÔËÐÐʱ±êÖ¾£¬À´ÍêÈ«½ûÓÃGC¡£
×îºó£¬ÎÒÃÇ¿ªÊ¼½«Õâ¸ö×ö·¨Íƹ㵽¸ü´óµÄ¹æÄ£¡£´Ëºó£¬ÎÒÃÇÔÚÕû¸ö¼¯Èº½øÐг¢ÊÔ£¬µ«ÊÇ£¬Á¬Ðø²¿ÊðÔٴα»ÖжÏÁË¡£²»¹ý£¬Õâ´ÎËüÖ»ÊÇÔÚ¾ÉCPUÐͺţ¨Sandybridge£©µÄ»úÆ÷ÉÏÖжÏÁË£¬ÉõÖÁ¸üÄÑÖØÏÖ¡£¾Ñé½Ìѵ£ºÒª¶à²âÊÔ¾Éʽ¿Í»§¶Ë/¾ÉÐͺţ¬ÒòΪËûÃÇ×îÈÝÒ×±»Öжϡ£
ÒòΪÎÒÃǵÄÁ¬Ðø²¿ÊðÊÇÒ»¸öÏ൱¿ìµÄ¹ý³Ì£¬ÎªÁËÕæÕý²¶»ñ·¢ÉúÁËʲô£¬ÎÒÔÚrolloutÃüÁîÌí¼ÓÁËÒ»¸öµ¥¶ÀµÄatop¡£ÕâÑùÎÒÃǾÍÄܹ»×¥×¡¸ßËÙ»º´æÄÚ´æÕæµÄºÜµÍµÄÒ»¸öʱ¿Ì¡£ËùÓÐuWSGI½ø³Ì´¥·¢Á˺ܶàMINFLT£¨minor
page faults£¬Ð¡Ò³Ãæ´íÎ󣩡£

ÔÙ´Îͨ¹ýperfµÃ³öµÄ¸ÅÒª£¬ÎÒÃÇÔٴο´µ½ÁËPy_Finalize¡£Ôڹػúʱ£¬³ýÁË×îÖÕµÄGC£¬Python×öÁËÒ»¶ÑÇåÀí²Ù×÷£¬ÈçÆÆ»µÀàÐͶÔÏóºÍÐ¶ÔØÄ£¿é¡£ÕâÓÖÒ»´ÎËðº¦Á˹²ÏíÄÚ´æ¡£
³¢ÊÔ4£º¹Ø±ÕGCµÄ×îºóÒ»²½£ºÎÞÐëÇåÀí
ΪʲôÎÒÃÇÐèÒªÇåÀí£¿Õâ¸ö½ø³Ì½«»áËÀµôÈ¥£¬ÎÒÃǽ«µÃµ½ÁíÒ»¸öÌæ´úÆ·¡£ÎÒÃÇÕæÕý¹ØÐĵÄÊÇÇåÀíÓ¦ÓóÌÐòµÄatexit¹³×Ó¡£ÖÁÓÚPythonµÄÇåÀí£¬ÎÒÃDz»±ØÕâÑù×ö¡£ÏÂÃæÊÇÔÚbootstrapping½Å±¾ÖеĽáÊø£º
# gc.disable() doesn't work, because some random 3rd-party library will # enable it back implicitly. gc.set_threshold(0) # Suicide immediately after other atexit functions finishes. # CPython will do a bunch of cleanups in Py_Finalize which # will again cause Copy-on-Write, including a final GC atexit.register(os._exit, 0) |
»ùÓÚÕâ¸öÊÂʵ£¬atexitº¯ÊýÒÔ×¢²á±íµÄÏ෴˳ÐòÔËÐС£atexitº¯ÊýÍê³ÉÆäËûÇå³ý£¬È»ºóµ÷ÓÃos._exit(0)À´Í˳ö×îºóÒ»²½µÄµ±Ç°½ø³Ì¡£
Ëæ×ÅÕâÁ½ÌõÏߵı仯£¬ÎÒÃÇÖÕÓÚÍê³ÉÁËÕû¸ö¼¯ÈºµÄÍÆ¹ã¡£ÔÚ×Ðϸµ÷ÕûÄÚ´æãÐÖµºó£¬ÎÒÃÇ»ñµÃÁË10£¥µÄÈ«¾ÖÐÔÄÜÌáÉý£¡
»Ø¹Ë
ÔڻعËÕâ´ÎÐÔÄܵÄÌáÉýʱ£¬ÎÒÃÇÓÐÁ½¸öÒÉÎÊ¡£
Ê×ÏÈ£¬Ã»ÓÐÀ¬»ø»ØÊյϰ£¬ÒòΪËùÓеÄÄÚ´æ·ÖÅä²»»áÊÍ·Å£¬PythonÄÚ´æ¾Í²»»á±¬ÆÆÂ𣿣¨¼Çס£¬ÔÚPythonÄÚ´æÖÐûÓÐÕæÕýµÄ¶ÑÕ»£¬ÒòΪËùÓеĶÔÏó¶¼ÊÇÔÚ¶ÑÉÏ·ÖÅäµÄ¡££©
ÐÒÔ˵ÄÊÇ£¬Õâ²¢·ÇÊÂʵ¡£PythonÖÐÓÃÓÚÊͷŶÔÏóµÄÖ÷Òª»úÖÆÈÔÈ»ÊÇÒýÓüÆÊý¡£µ±Ò»¸ö¶ÔÏó±»½â³ýÒýÓ㨵÷ÓÃPy_DECREF£©Ê±£¬PythonÔËÐÐʱ×ÜÊǼì²éÆäÒýÓüÆÊýÊÇ·ñ½µµ½Áã¡£ÔÚÕâÖÖÇé¿öÏ£¬½«µ÷ÓöÔÏóµÄÊÍ·ÅÆ÷¡£À¬»ø»ØÊÕµÄÖ÷ҪĿµÄÊÇ´òÆÆÒýÓüÆÊý²»Æð×÷ÓõIJο¼ÖÜÆÚ¡£
#define Py_DECREF(op) \ do { \ if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ --((PyObject*)(op))->ob_refcnt != 0) \ _Py_CHECK_REFCNT(op) \ else \ _Py_Dealloc((PyObject *)(op)); \ } while (0) |
´òÆÆÔöÒæ
µÚ¶þ¸öÎÊÌ⣺ÔöÒæÀ´×ÔÄÄÀ
½ûÓÃGCµÄÔöÒæÊÇÁ½±¶£º
1.ÎÒÃÇΪÿ¸ö·þÎñÆ÷ÊÍ·ÅÁË´óÔ¼8GBµÄRAM£¬ÓÃÓÚΪÄÚ´æ°ó¶¨·þÎñÆ÷Éú³É´´½¨¸ü¶àµÄ¹¤×÷½ø³Ì£¬»òÕß½µµÍCPU°ó¶¨·þÎñÆ÷Éú³ÉµÄ¹¤×÷³ÌÐòË¢ÐÂÂÊ£»
2.Ëæ×ÅÿÖÜÆÚCPUÖ¸ÁIPC£©Ôö¼ÓÔ¼10£¥£¬CPUÍÌÍÂÁ¿Ò²ËæÖ®Ìá¸ß¡£
# perf stat -a -e cache-misses,cache-references -- sleep 10 Performance counter stats for 'system wide': 268,195,790 cache-misses # 12.240 % of all cache refs [100.00%] 2,191,115,722 cache-references 10.019172636 seconds time elapsed |
½ûÓÃGCʱ£¬¸ßËÙ»º´æÎ´ÃüÖÐÂÊÓÐ2~3£¥µÄϽµ£¬Ö÷ÒªÔÒòÊÇIPCÔö¼Ó10%ËùÖ¡£CPU¸ßËÙ»º´æÎ´ÃüÖеĴú¼ÛÌ«¸ßÁË£¬ÒòΪËüʹCPU¹ÜµÀÍ£ÖÍ¡£¶ÔCPU»º´æÃüÖÐÂʵÄ΢С¸Ä½øÍ¨³£¿ÉÒÔÏÔÖøÌá¸ßIPC¡£Ê¹ÓýÏÉÙµÄCoW£¬¾ßÓв»Í¬ÐéÄâµØÖ·£¨ÔÚ²»Í¬µÄ¹¤×÷½ø³ÌÖУ©µÄ¸ü¶àCPU¸ßËÙ»º´æÏßÖ¸ÏòÏàͬµÄÎïÀí´æ´¢Æ÷µØÖ·£¬µ¼Ö¸üºÃµÄ¸ßËÙ»º´æÃüÖÐÂÊ¡£
ÎÒÃÇ¿ÉÒÔ¿´µ½£¬²¢·Çÿ¸ö×é¼þ¶¼°´Ô¤ÆÚ¹¤×÷£¬ÓÐʱ£¬½á¹û¿ÉÄÜ»á·Ç³£ÁîÈ˾ªÑÈ¡£ËùÒÔ¼ÌÐøÍÚ¾ò¡¢ËÄ´¦¹ÛÍû£¬Äã»á¾ªÑÈÊÂÇ龿¾¹ÊÇÈçºÎÔË×÷µÄ£¡
|