Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
½ûÓÃPythonµÄGC»úÖÆºó£¬InstagramÐÔÄÜÌáÉý10%
 
×÷ÕߣºÁõÖ¾Ó À´Ô´ÓÚ£ºInfOQ ·¢²¼ÓÚ£º 2017-2-23
  2861  次浏览      27
 

ͨ¹ý¹Ø±Õ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¸ßËÙ»º´æÏßÖ¸ÏòÏàͬµÄÎïÀí´æ´¢Æ÷µØÖ·£¬µ¼Ö¸üºÃµÄ¸ßËÙ»º´æÃüÖÐÂÊ¡£

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬²¢·Çÿ¸ö×é¼þ¶¼°´Ô¤ÆÚ¹¤×÷£¬ÓÐʱ£¬½á¹û¿ÉÄÜ»á·Ç³£ÁîÈ˾ªÑÈ¡£ËùÒÔ¼ÌÐøÍÚ¾ò¡¢ËÄ´¦¹ÛÍû£¬Äã»á¾ªÑÈÊÂÇ龿¾¹ÊÇÈçºÎÔË×÷µÄ£¡

   
2861 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ