´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öÎÊÌâ¿ÉÒÔ³¢ÊÔÒÔϼ¸ÖÖ½â¾ö·½·¨¡£Ê×ÏÈ£¬¿ÉÒÔÔö¼ÓÄÚ´æ¡£Èç¹û³ÌÐòÔËÐÐʱʹÓõÄÄڴ泬¹ýÁËΪÆä·ÖÅäµÄÄڴ棬¾Í»á·¢ÉúÄÚ´æÒç³ö£¬¿É¿¼ÂÇÔö¼ÓÄÚ´æÌõµÈÓ²¼þÉ豸À´ÌáÉýÄÚ´æÈÝÁ¿¡£Æä´Î£¬ÓÅ»¯´úÂë¡£ÄÚ´æÒç³ö¿ÉÄÜÊÇÓÉÓÚ´úÂëÖдæÔÚ bug »òÕßÄÚ´æÐ¹Â©µ¼Öµģ¬ÐèÒª¶Ô´úÂë½øÐÐÓÅ»¯ºÍµ÷ÊÔ¡£¼ì²é¶ÔÊý¾Ý¿â²éѯÖУ¬ÊÇ·ñÓÐÒ»´Î»ñµÃÈ«²¿Êý¾ÝµÄ²éѯ£¬±ÈÈçÒ»´ÎȡʮÍòÌõ¼Ç¼µ½ÄÚ´æ¾Í¿ÉÄÜÒýÆðÄÚ´æÒç³ö£¬¶ÔÓÚÊý¾Ý¿â²éѯ¾¡Á¿²ÉÓ÷ÖÒ³µÄ·½Ê½²éѯ¡£Í¬Ê±¼ì²é´úÂëÖÐÊÇ·ñÓÐËÀÑ»·»òµÝ¹éµ÷Óã¬ÒÔ¼°ÊÇ·ñÓдóÑ»·Öظ´²úÉúжÔÏóʵÌå¡£ÔÙÕߣ¬µ÷Õû JVM ²ÎÊý¡£¿ÉÒÔͨ¹ýµ÷Õû JVM ²ÎÊýÀ´Ôö¼ÓÄڴ棬ÀýÈçÉèÖóõʼ¶Ñ´óСºÍ×î´ó¶Ñ´óС¡£ÁíÍ⣬Èç¹û»¹ÊDz»Äܽâ¾öÎÊÌ⣬¿ÉÒÔ¼ì²é´íÎóÈÕÖ¾£¬²é¿´“OutOfMemory”´íÎóǰÊÇ·ñÓÐÆäËüÒì³£»ò´íÎó¡£¶Ô´úÂë½øÐÐ×ß²éºÍ·ÖÎö£¬ÕÒ³ö¿ÉÄÜ·¢ÉúÄÚ´æÒç³öµÄλÖá£ÔÚ´«Ææ hero ÒýÇæÖУ¬»¹¿ÉÄܳöÏÖ¶ÁÈ¡Áбíʧ°Ü¡¢½øÓÎÏ·ºÚÆÁÎÊÌâ¡¢M2server ʱ¼ä¸ñʽ±¨´í¡¢´«Ææ M2 ³öÏÖµØÖ·ÐÒéÍøÂçµØÖ·¶Ë¿ÚÖ»ÔÊÐíʹÓÃÒ»´Î¡¢ÎÞ·¨Á¬½Óµ½Ô¶³Ì NPC ·þÎñÆ÷µÈÎÊÌâ¡£Õë¶Ô¶ÁÈ¡Áбíʧ°ÜÎÊÌ⣬ÊÇÒòΪÅäÖõǼÆ÷ʱûÓÐÉÏ´«ÁÐ±í£¬»òÕßÁбí¿Õ¼äÒì³£¡¢Áбí¸ñʽ´íÎóµ¼Ö£¬Ðè°´ÕÕÕâЩ·½Ãæ¼ì²é¡£½øÓÎÏ·ºÚÆÁÎÊÌâ³£¼ûÔÒòÊÇûÓжÁÈ¡µ½²¹¶¡£¬ÔÚÅäÖõǼÆ÷Áбí¹ý³ÌÖУ¬Ö»ÐèÒªÐÞ¸Ä PAK ÃÜÂë²¢ÇҶ˶ÁÈ¡²¹¶¡¼´¿É¡£M2server ʱ¼ä¸ñʽ±¨´í£¬¿ÉÕÒµ½!Setup.txt ɾ³ý±¨´íµÄʱ¼äÖØÆôÓÎÏ·£¬»òÕßÐ޸ķþÎñÆ÷µÄʱ¼ä¸ñʽΪ yyyy-m-d ¸ñʽ¡£´«Ææ M2 ³öÏÖµØÖ·ÐÒéÍøÂçµØÖ·¶Ë¿ÚÖ»ÔÊÐíʹÓÃÒ»´Î±¨´íÒ»°ãÊǶ˿ÚÕ¼Ó㬼ì²éÊÇ·ñ¿ªÆô Kugoo£¬ÈôûÓÐÔò¿ÉÄÜÊǶ˿ÚÉèÖóåÍ»»òÆô¶¯Á˶à¸öÒýÇæ£¬¿É²ÉÓÃÖØÆôµçÄԵĴֱ©°ì·¨¡£ÎÞ·¨Á¬½Óµ½Ô¶³Ì NPC ·þÎñÆ÷ÎÊÌâÒ»°ãÊÇÒýÇæºÍµÇ¼Æ÷²»Æ¥Åä»òÕß IP ºÍµÇ¼Æ÷¶Ô²»ÉÏÔì³ÉµÄ£¬¸üÐÂÒýÇæºÍÆ¥ÅäµÄµÇ¼Æ÷¼´¿É½â¾öÎÊÌâ¡£
´«Ææ hero ÒýÇæÔö¼ÓÄÚ´æ½â¾öÄÚ´æÒç³ö
´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öÎÊÌâʱ£¬Ôö¼ÓÄÚ´æÊÇÒ»ÖÖÓÐЧµÄ½â¾ö·½·¨¡£¿ÉÒÔÖ±½ÓÐÞ¸Ä JVM Æô¶¯²ÎÊý£¬Ôö¼ÓÄÚ´æ¡£¾ßÌå²Ù×÷ÊÇÔÚÆô¶¯²ÎÊýÖмÓÈë(-Xms£¬-Xmx ²ÎÊý)£¬ÕâÁ½¸ö²ÎÊý·Ö±ðÓÃÓÚÉèÖöÑÄÚ´æµÄ³õʼ´óСºÍ×î´ó¿ÉÓÃÖµ¡£ÀýÈ磬Èç¹ûµ±Ç°ÄÚ´æÒç³öÊÇÒòΪӦÓÃϵͳÖмÓÔØµÄÊý¾ÝÁ¿¹ýÓÚÅÓ´ó£¬ÈçÒ»´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ý£¬µ¼ÖÂÄÚ´æ²»¹»Óã¬ÄÇôͨ¹ýÔö¼Ó¶ÑÄÚ´æµÄ´óС£¬¿ÉÒÔΪ³ÌÐòÌṩ¸ü¶àµÄ¿ÉÓÃÄÚ´æ¿Õ¼ä¡£
ÔÚʵ¼Ê²Ù×÷ÖУ¬Òª¸ù¾Ý¾ßÌåÇé¿öºÏÀíµ÷ÕûÄÚ´æ´óС¡£Èç¹ûÔö¼ÓµÄÄÚ´æ¹ý´ó£¬¿ÉÄܻᵼÖÂϵͳ×ÊÔ´ÀË·Ñ£¬Í¬Ê±Ò²¿ÉÄÜ»áÓ°ÏìÆäËû³ÌÐòµÄÔËÐС£Èç¹ûÔö¼ÓµÄÄÚ´æ¹ýС£¬¿ÉÄÜÈÔÈ»ÎÞ·¨½â¾öÄÚ´æÒç³öÎÊÌâ¡£Òò´Ë£¬ÐèҪͨ¹ý²»¶ÏµÄ²âÊԺ͵÷Õû£¬ÕÒµ½Ò»¸öºÏÊʵÄÄÚ´æ´óС¡£
ÁíÍ⣬Ôö¼ÓÄÚ´æÖ»ÊÇÒ»ÖÖÁÙʱµÄ½â¾ö·½·¨£¬Èç¹û³ÌÐòÖдæÔÚÄÚ´æÐ¹Â©µÈÎÊÌ⣬¼´Ê¹Ôö¼ÓÁËÄڴ棬Ҳ¿ÉÄÜÔÚδÀ´ÔٴγöÏÖÄÚ´æÒç³öÎÊÌâ¡£ËùÒÔ£¬ÔÚÔö¼ÓÄÚ´æµÄͬʱ£¬»¹ÐèÒª¶Ô³ÌÐò½øÐÐÈ«ÃæµÄ¼ì²éºÍÓÅ»¯£¬ÕÒ³ö¿ÉÄܵ¼ÖÂÄÚ´æÒç³öµÄÔÒò£¬²¢½øÐÐÏàÓ¦µÄ´¦Àí¡£
´«Ææ hero ÒýÇæÓÅ»¯´úÂë½â¾öÄÚ´æÒç³ö
ÓÅ»¯´úÂëÊǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÖØÒªÊֶΡ£Ê×ÏÈ£¬Òª¼ì²é´úÂëÖÐÊÇ·ñ´æÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌå¡£Èç¹ûÓÐËÀÑ»·£¬»áµ¼Ö³ÌÐò²»¶ÏµØÕ¼ÓÃÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬ÐèÒª×Ðϸ¼ì²é´úÂëÂß¼£¬ÕÒ³öËÀÑ»·µÄλÖ㬲¢½øÐÐÐÞ¸´¡£
Æä´Î£¬Òª¼ì²é¼¯ºÏÀàÖÐÊÇ·ñÓжԶÔÏóµÄÒýÓã¬Ê¹ÓÃÍêºóδÇå¿Õ£¬Ê¹µÃ JVM ²»ÄÜ»ØÊÕ¡£ÀýÈ磬ÔÚʹÓþ²Ì¬¼¯ºÏÀàʱ£¬Èç¹ûÕâЩÈÝÆ÷Ϊ¾²Ì¬µÄ£¬ÄÇôËüÃǵÄÉúÃüÖÜÆÚÓë³ÌÐòÒ»Ö£¬ÔòÈÝÆ÷ÖеĶÔÏóÔÚ³ÌÐò½áÊøÖ®Ç°½«²»Äܱ»ÊÍ·Å£¬´Ó¶øÔì³ÉÄÚ´æÐ¹Â©£¬×îÖÕ¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬ÐèÒªÔÚʹÓÃÍ꼯ºÏÀàºó£¬¼°Ê±Çå¿ÕÆäÖеĶÔÏóÒýÓã¬ÒÔ±ã JVM Äܹ»»ØÊÕÄÚ´æ¡£
´ËÍ⣬»¹Òª¼ì²é´úÂëÖÐÊÇ·ñ´æÔÚÒ»´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾ÝµÄÇé¿ö¡£Èç¹ûÒ»´ÎȡʮÍòÌõ¼Ç¼µ½Äڴ棬¾Í¿ÉÄÜÒýÆðÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬¿ÉÒÔ²ÉÓ÷ÖÒ³µÄ·½Ê½²éѯÊý¾Ý¿â£¬±ÜÃâÒ»´ÎÐÔ½«´óÁ¿Êý¾Ý¼ÓÔØµ½ÄÚ´æÖС£
ÓÅ»¯´úÂëÐèÒª¶Ô³ÌÐòÓÐÉîÈëµÄÀí½â£¬²¢ÇÒÐèÒª¾ß±¸Ò»¶¨µÄ±à³Ì¾Ñé¡£ÔÚÓÅ»¯´úÂëµÄ¹ý³ÌÖУ¬¿ÉÒÔʹÓÃһЩ¹¤¾ßÀ´¸¨Öú·ÖÎö£¬ÈçÄÚ´æ·ÖÎö¹¤¾ß MAT¡¢LeakCanary µÈ£¬ÕâЩ¹¤¾ß¿ÉÒÔ°ïÖú¿ª·¢Õß¼ì²â³ÌÐòÖÐÊÇ·ñ´æÔÚÄÚ´æÐ¹Â©µÈÎÊÌ⣬´Ó¶ø¸üºÃµØ½øÐдúÂëÓÅ»¯¡£
´«Ææ hero ÒýÇæµ÷Õû JVM ²ÎÊý½â¾öÄÚ´æÒç³ö
µ÷Õû JVM ²ÎÊýÒ²Êǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÒ»ÖÖÓÐЧ·½·¨¡£µ±·¢ÉúÄÚ´æÒç³öµÄʱºò£¬¿ÉÒÔ¸ø JVM ´«µÝһЩ²ÎÊý£¬ÒÔ±ãÔÚ·¢ÉúÄÚ´æÒç³öʱ×Ô¶¯Éú³ÉHeap Dump£¬»òÕßµ÷ÓÃÈÎÒ»¸ö shell ½Å±¾½øÐд¦Àí£¬ÉõÖÁ¿ÉÒÔÈà JVM ÔÚ·¢ÉúÄÚ´æÒç³öʱ×Ô¶¯±ÀÀ££¬ÒÔ±ã½øÐйÊÕÏÅŲ顣
ÀýÈ磬¿ÉÒÔʹÓÃ-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof ÕâÁ½¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »á×Ô¶¯ÔÚÖ¸¶¨Ä¿Â¼ÏÂÉú³ÉÄÚ´æÓ³ÏñÎļþ¡£Ö»ÒªÄõ½ÁËÄÚ´æÓ³ÏñÎļþ£¬¾Í¿ÉÒÔʹÓÃÖîÈç MAT¡¢HeapHero Ö®ÀàµÄ¹¤¾ßÀ´½øÐзÖÎöÎÊÌâ¡£
ÁíÍ⣬»¹¿ÉÒÔʹÓÃ-XX:OnOutOfMemoryError=/scripts/restart-myapp.sh Õâ¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »áµ÷ÓÃ/scripts/restart-myapp.sh Õâ¸ö½Å±¾£¬ÔÚÕâ¸ö½Å±¾ÖпÉÒÔÓÃÓÅÑŵİ취À´ÖØÆôÓ¦Óá£
Èç¹û¸ø JVM ´«µÝ-XX:+CrashOnOutOfMemoryError Õâ¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »á×Ô¶¯±ÀÀ££¬ÒÔ±ã½øÐйÊÕÏÅŲ顣
µ÷Õû JVM ²ÎÊýÐèÒª¶Ô JVM ÓÐÉîÈëµÄÁ˽⣬²¢ÇÒÐèÒª¸ù¾Ý¾ßÌåÇé¿ö½øÐкÏÀíµÄµ÷Õû¡£²»Í¬µÄÓ¦Óó¡¾°¿ÉÄÜÐèÒª²»Í¬µÄ JVM ²ÎÊýÉèÖã¬Òò´ËÐèÒª½øÐв»¶ÏµÄ²âÊԺ͵÷Õû£¬ÕÒµ½Ò»¸ö×îÊʺϵIJÎÊýÉèÖá£
´«Ææ hero ÒýÇæ¼ì²é´íÎóÈÕÖ¾½â¾öÄÚ´æÒç³ö
¼ì²é´íÎóÈÕÖ¾Êǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÖØÒª²½Öè¡£µ±³öÏÖÄÚ´æÒç³ö´íÎóʱ£¬Ê×ÏÈÒª¼ì²é´íÎóÈÕÖ¾£¬²é¿´“OutOfMemory”´íÎóǰÊÇ·ñÓÐÆäËüÒì³£»ò´íÎó¡£´íÎóÈÕÖ¾¿ÉÒÔÌṩºÜ¶àÓÐÓõÄÐÅÏ¢£¬°ïÖú¿ª·¢ÕßÕÒ³öÄÚ´æÒç³öµÄÔÒò¡£
ÀýÈ磬Èç¹û´íÎóÈÕÖ¾ÖÐÏÔʾÓдóÁ¿µÄÊý¾Ý¿â²éѯ²Ù×÷£¬¿ÉÄÜÊÇÒòΪһ´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ýµ¼ÖÂÄÚ´æÒç³ö¡£Èç¹û´íÎóÈÕÖ¾ÖÐÏÔʾÓдóÁ¿µÄ¶ÔÏó´´½¨²Ù×÷£¬¿ÉÄÜÊÇÒòΪ´úÂëÖдæÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌåµ¼ÖÂÄÚ´æÒç³ö¡£
ÔÚ¼ì²é´íÎóÈÕ־ʱ£¬Òª×Ðϸ·ÖÎöÿһÌõ´íÎóÐÅÏ¢£¬ÕÒ³ö¿ÉÄܵ¼ÖÂÄÚ´æÒç³öµÄÏßË÷¡£Í¬Ê±£¬»¹Òª½áºÏ´úÂë½øÐзÖÎö£¬ÕÒ³ö¿ÉÄÜ´æÔÚÎÊÌâµÄ´úÂëλÖ㬲¢½øÐÐÏàÓ¦µÄ´¦Àí¡£
¼ì²é´íÎóÈÕÖ¾ÐèÒªÓÐÄÍÐĺÍϸÐÄ£¬²¢ÇÒÐèÒª¶Ô´íÎóÈÕÖ¾µÄ¸ñʽºÍÄÚÈÝÓÐÒ»¶¨µÄÁ˽⡣ֻÓÐͨ¹ý×Ðϸ·ÖÎö´íÎóÈÕÖ¾£¬²ÅÄÜÕÒ³öÄÚ´æÒç³öµÄÕæÕýÔÒò£¬²¢½øÐÐÓÐЧµÄ½â¾ö¡£
´«Ææ hero ÒýÇæÄÚ´æÒç³öµÄ³£¼ûÔÒò
´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öµÄÔÒòÓкܶࡣÆäÖУ¬ÄÚ´æÖмÓÔØµÄÊý¾ÝÁ¿¹ýÓÚÅÓ´óÊÇÒ»¸ö³£¼ûµÄÔÒò¡£ÀýÈ磬һ´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ý£¬»òÕß¼ÓÔØÁË´óÁ¿µÄͼƬ¡¢ÒôƵµÈ×ÊÔ´£¬¶¼¿ÉÄܵ¼ÖÂÄÚ´æ²»¹»Ó㬴Ӷø³öÏÖÄÚ´æÒç³ö¡£
¼¯ºÏÀàÖÐÓжԶÔÏóµÄÒýÓã¬Ê¹ÓÃÍêºóδÇå¿Õ£¬Ò²Êǵ¼ÖÂÄÚ´æÒç³öµÄÒ»¸ö³£¼ûÔÒò¡£ÀýÈ磬ÔÚʹÓà HashMap¡¢LinkedList µÈ¾²Ì¬¼¯ºÏÀàʱ£¬Èç¹ûÕâЩÈÝÆ÷Ϊ¾²Ì¬µÄ£¬ÄÇôËüÃǵÄÉúÃüÖÜÆÚÓë³ÌÐòÒ»Ö£¬ÔòÈÝÆ÷ÖеĶÔÏóÔÚ³ÌÐò½áÊøÖ®Ç°½«²»Äܱ»ÊÍ·Å£¬´Ó¶øÔì³ÉÄÚ´æÐ¹Â©£¬×îÖÕ¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£
´úÂëÖдæÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌ壬Ҳ»áµ¼ÖÂÄÚ´æÒç³ö¡£ÀýÈ磬ÔÚʹÓõݹéË㷨ʱ£¬Èç¹ûûÓÐÕýÈ·µÄÖÕÖ¹Ìõ¼þ£¬¾Í»áµ¼ÖÂËÀÑ»·£¬´Ó¶ø²»¶ÏµØÕ¼ÓÃÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£
ʹÓõĵÚÈý·½Èí¼þÖÐµÄ BUG£¬Ò²¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£ÀýÈ磬ÔÚʹÓÃijЩÊý¾Ý¿âÇý¶¯³ÌÐòʱ£¬Èç¹û´æÔÚ BUG£¬¾Í¿ÉÄܵ¼ÖÂÊý¾Ý¿â²éѯ²Ù×÷³öÏÖÒì³££¬´Ó¶øÕ¼ÓôóÁ¿µÄÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£
Æô¶¯²ÎÊýÄÚ´æÖµÉ趨µÄ¹ýС£¬Ò²Êǵ¼ÖÂÄÚ´æÒç³öµÄÒ»¸öÔÒò¡£Èç¹ûÆô¶¯²ÎÊýÖÐÉèÖõÄÄÚ´æ´óССÓÚ³ÌÐòʵ¼ÊÐèÒªµÄÄÚ´æ´óС£¬¾Í»á³öÏÖÄÚ´æÒç³ö¡£
×ÜÖ®£¬´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öÎÊÌâÊÇÒ»¸ö±È½Ï¸´ÔÓµÄÎÊÌ⣬ÐèÒª×ۺϿ¼ÂǸ÷ÖÖÒòËØ£¬²ÉÈ¡¶àÖÖ·½·¨½øÐнâ¾ö¡£
´«Ææ hero ÒýÇæÔö¼ÓÄÚ´æ½â¾öÄÚ´æÒç³ö
´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öÎÊÌâʱ£¬Ôö¼ÓÄÚ´æÊÇÒ»ÖÖÓÐЧµÄ½â¾ö·½·¨¡£¿ÉÒÔÖ±½ÓÐÞ¸Ä JVM Æô¶¯²ÎÊý£¬Ôö¼ÓÄÚ´æ¡£¾ßÌå²Ù×÷ÊÇÔÚÆô¶¯²ÎÊýÖмÓÈë(-Xms£¬-Xmx ²ÎÊý)£¬ÕâÁ½¸ö²ÎÊý·Ö±ðÓÃÓÚÉèÖöÑÄÚ´æµÄ³õʼ´óСºÍ×î´ó¿ÉÓÃÖµ¡£ÀýÈ磬Èç¹ûµ±Ç°ÄÚ´æÒç³öÊÇÒòΪӦÓÃϵͳÖмÓÔØµÄÊý¾ÝÁ¿¹ýÓÚÅÓ´ó£¬ÈçÒ»´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ý£¬µ¼ÖÂÄÚ´æ²»¹»Óã¬ÄÇôͨ¹ýÔö¼Ó¶ÑÄÚ´æµÄ´óС£¬¿ÉÒÔΪ³ÌÐòÌṩ¸ü¶àµÄ¿ÉÓÃÄÚ´æ¿Õ¼ä¡£
ÔÚʵ¼Ê²Ù×÷ÖУ¬Òª¸ù¾Ý¾ßÌåÇé¿öºÏÀíµ÷ÕûÄÚ´æ´óС¡£Èç¹ûÔö¼ÓµÄÄÚ´æ¹ý´ó£¬¿ÉÄܻᵼÖÂϵͳ×ÊÔ´ÀË·Ñ£¬Í¬Ê±Ò²¿ÉÄÜ»áÓ°ÏìÆäËû³ÌÐòµÄÔËÐС£Èç¹ûÔö¼ÓµÄÄÚ´æ¹ýС£¬¿ÉÄÜÈÔÈ»ÎÞ·¨½â¾öÄÚ´æÒç³öÎÊÌâ¡£Òò´Ë£¬ÐèҪͨ¹ý²»¶ÏµÄ²âÊԺ͵÷Õû£¬ÕÒµ½Ò»¸öºÏÊʵÄÄÚ´æ´óС¡£
ÁíÍ⣬Ôö¼ÓÄÚ´æÖ»ÊÇÒ»ÖÖÁÙʱµÄ½â¾ö·½·¨£¬Èç¹û³ÌÐòÖдæÔÚÄÚ´æÐ¹Â©µÈÎÊÌ⣬¼´Ê¹Ôö¼ÓÁËÄڴ棬Ҳ¿ÉÄÜÔÚδÀ´ÔٴγöÏÖÄÚ´æÒç³öÎÊÌâ¡£ËùÒÔ£¬ÔÚÔö¼ÓÄÚ´æµÄͬʱ£¬»¹ÐèÒª¶Ô³ÌÐò½øÐÐÈ«ÃæµÄ¼ì²éºÍÓÅ»¯£¬ÕÒ³ö¿ÉÄܵ¼ÖÂÄÚ´æÒç³öµÄÔÒò£¬²¢½øÐÐÏàÓ¦µÄ´¦Àí¡£
´«Ææ hero ÒýÇæÓÅ»¯´úÂë½â¾öÄÚ´æÒç³ö
ÓÅ»¯´úÂëÊǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÖØÒªÊֶΡ£Ê×ÏÈ£¬Òª¼ì²é´úÂëÖÐÊÇ·ñ´æÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌå¡£Èç¹ûÓÐËÀÑ»·£¬»áµ¼Ö³ÌÐò²»¶ÏµØÕ¼ÓÃÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬ÐèÒª×Ðϸ¼ì²é´úÂëÂß¼£¬ÕÒ³öËÀÑ»·µÄλÖ㬲¢½øÐÐÐÞ¸´¡£
Æä´Î£¬Òª¼ì²é¼¯ºÏÀàÖÐÊÇ·ñÓжԶÔÏóµÄÒýÓã¬Ê¹ÓÃÍêºóδÇå¿Õ£¬Ê¹µÃ JVM ²»ÄÜ»ØÊÕ¡£ÀýÈ磬ÔÚʹÓþ²Ì¬¼¯ºÏÀàʱ£¬Èç¹ûÕâЩÈÝÆ÷Ϊ¾²Ì¬µÄ£¬ÄÇôËüÃǵÄÉúÃüÖÜÆÚÓë³ÌÐòÒ»Ö£¬ÔòÈÝÆ÷ÖеĶÔÏóÔÚ³ÌÐò½áÊøÖ®Ç°½«²»Äܱ»ÊÍ·Å£¬´Ó¶øÔì³ÉÄÚ´æÐ¹Â©£¬×îÖÕ¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬ÐèÒªÔÚʹÓÃÍ꼯ºÏÀàºó£¬¼°Ê±Çå¿ÕÆäÖеĶÔÏóÒýÓã¬ÒÔ±ã JVM Äܹ»»ØÊÕÄÚ´æ¡£
´ËÍ⣬»¹Òª¼ì²é´úÂëÖÐÊÇ·ñ´æÔÚÒ»´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾ÝµÄÇé¿ö¡£Èç¹ûÒ»´ÎȡʮÍòÌõ¼Ç¼µ½Äڴ棬¾Í¿ÉÄÜÒýÆðÄÚ´æÒç³ö¡£¶ÔÓÚÕâÖÖÇé¿ö£¬¿ÉÒÔ²ÉÓ÷ÖÒ³µÄ·½Ê½²éѯÊý¾Ý¿â£¬±ÜÃâÒ»´ÎÐÔ½«´óÁ¿Êý¾Ý¼ÓÔØµ½ÄÚ´æÖС£
ÓÅ»¯´úÂëÐèÒª¶Ô³ÌÐòÓÐÉîÈëµÄÀí½â£¬²¢ÇÒÐèÒª¾ß±¸Ò»¶¨µÄ±à³Ì¾Ñé¡£ÔÚÓÅ»¯´úÂëµÄ¹ý³ÌÖУ¬¿ÉÒÔʹÓÃһЩ¹¤¾ßÀ´¸¨Öú·ÖÎö£¬ÈçÄÚ´æ·ÖÎö¹¤¾ß MAT¡¢LeakCanary µÈ£¬ÕâЩ¹¤¾ß¿ÉÒÔ°ïÖú¿ª·¢Õß¼ì²â³ÌÐòÖÐÊÇ·ñ´æÔÚÄÚ´æÐ¹Â©µÈÎÊÌ⣬´Ó¶ø¸üºÃµØ½øÐдúÂëÓÅ»¯¡£
´«Ææ hero ÒýÇæµ÷Õû JVM ²ÎÊý½â¾öÄÚ´æÒç³ö
µ÷Õû JVM ²ÎÊýÒ²Êǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÒ»ÖÖÓÐЧ·½·¨¡£µ±·¢ÉúÄÚ´æÒç³öµÄʱºò£¬¿ÉÒÔ¸ø JVM ´«µÝһЩ²ÎÊý£¬ÒÔ±ãÔÚ·¢ÉúÄÚ´æÒç³öʱ×Ô¶¯Éú³ÉHeap Dump£¬»òÕßµ÷ÓÃÈÎÒ»¸ö shell ½Å±¾½øÐд¦Àí£¬ÉõÖÁ¿ÉÒÔÈà JVM ÔÚ·¢ÉúÄÚ´æÒç³öʱ×Ô¶¯±ÀÀ££¬ÒÔ±ã½øÐйÊÕÏÅŲ顣
ÀýÈ磬¿ÉÒÔʹÓÃ-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof ÕâÁ½¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »á×Ô¶¯ÔÚÖ¸¶¨Ä¿Â¼ÏÂÉú³ÉÄÚ´æÓ³ÏñÎļþ¡£Ö»ÒªÄõ½ÁËÄÚ´æÓ³ÏñÎļþ£¬¾Í¿ÉÒÔʹÓÃÖîÈç MAT¡¢HeapHero Ö®ÀàµÄ¹¤¾ßÀ´½øÐзÖÎöÎÊÌâ¡£
ÁíÍ⣬»¹¿ÉÒÔʹÓÃ-XX:OnOutOfMemoryError=/scripts/restart-myapp.sh Õâ¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »áµ÷ÓÃ/scripts/restart-myapp.sh Õâ¸ö½Å±¾£¬ÔÚÕâ¸ö½Å±¾ÖпÉÒÔÓÃÓÅÑŵİ취À´ÖØÆôÓ¦Óá£
Èç¹û¸ø JVM ´«µÝ-XX:+CrashOnOutOfMemoryError Õâ¸ö²ÎÊý£¬µ±·¢ÉúÄÚ´æÒç³öʱ£¬JVM »á×Ô¶¯±ÀÀ££¬ÒÔ±ã½øÐйÊÕÏÅŲ顣
µ÷Õû JVM ²ÎÊýÐèÒª¶Ô JVM ÓÐÉîÈëµÄÁ˽⣬²¢ÇÒÐèÒª¸ù¾Ý¾ßÌåÇé¿ö½øÐкÏÀíµÄµ÷Õû¡£²»Í¬µÄÓ¦Óó¡¾°¿ÉÄÜÐèÒª²»Í¬µÄ JVM ²ÎÊýÉèÖã¬Òò´ËÐèÒª½øÐв»¶ÏµÄ²âÊԺ͵÷Õû£¬ÕÒµ½Ò»¸ö×îÊʺϵIJÎÊýÉèÖá£
´«Ææ hero ÒýÇæ¼ì²é´íÎóÈÕÖ¾½â¾öÄÚ´æÒç³ö
¼ì²é´íÎóÈÕÖ¾Êǽâ¾ö´«Ææ hero ÒýÇæÄÚ´æÒç³öÎÊÌâµÄÖØÒª²½Öè¡£µ±³öÏÖÄÚ´æÒç³ö´íÎóʱ£¬Ê×ÏÈÒª¼ì²é´íÎóÈÕÖ¾£¬²é¿´“OutOfMemory”´íÎóǰÊÇ·ñÓÐÆäËüÒì³£»ò´íÎó¡£´íÎóÈÕÖ¾¿ÉÒÔÌṩºÜ¶àÓÐÓõÄÐÅÏ¢£¬°ïÖú¿ª·¢ÕßÕÒ³öÄÚ´æÒç³öµÄÔÒò¡£
ÀýÈ磬Èç¹û´íÎóÈÕÖ¾ÖÐÏÔʾÓдóÁ¿µÄÊý¾Ý¿â²éѯ²Ù×÷£¬¿ÉÄÜÊÇÒòΪһ´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ýµ¼ÖÂÄÚ´æÒç³ö¡£Èç¹û´íÎóÈÕÖ¾ÖÐÏÔʾÓдóÁ¿µÄ¶ÔÏó´´½¨²Ù×÷£¬¿ÉÄÜÊÇÒòΪ´úÂëÖдæÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌåµ¼ÖÂÄÚ´æÒç³ö¡£
ÔÚ¼ì²é´íÎóÈÕ־ʱ£¬Òª×Ðϸ·ÖÎöÿһÌõ´íÎóÐÅÏ¢£¬ÕÒ³ö¿ÉÄܵ¼ÖÂÄÚ´æÒç³öµÄÏßË÷¡£Í¬Ê±£¬»¹Òª½áºÏ´úÂë½øÐзÖÎö£¬ÕÒ³ö¿ÉÄÜ´æÔÚÎÊÌâµÄ´úÂëλÖ㬲¢½øÐÐÏàÓ¦µÄ´¦Àí¡£
¼ì²é´íÎóÈÕÖ¾ÐèÒªÓÐÄÍÐĺÍϸÐÄ£¬²¢ÇÒÐèÒª¶Ô´íÎóÈÕÖ¾µÄ¸ñʽºÍÄÚÈÝÓÐÒ»¶¨µÄÁ˽⡣ֻÓÐͨ¹ý×Ðϸ·ÖÎö´íÎóÈÕÖ¾£¬²ÅÄÜÕÒ³öÄÚ´æÒç³öµÄÕæÕýÔÒò£¬²¢½øÐÐÓÐЧµÄ½â¾ö¡£
´«Ææ hero ÒýÇæÄÚ´æÒç³öµÄ³£¼ûÔÒò
´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öµÄÔÒòÓкܶࡣÆäÖУ¬ÄÚ´æÖмÓÔØµÄÊý¾ÝÁ¿¹ýÓÚÅÓ´óÊÇÒ»¸ö³£¼ûµÄÔÒò¡£ÀýÈ磬һ´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ý£¬»òÕß¼ÓÔØÁË´óÁ¿µÄͼƬ¡¢ÒôƵµÈ×ÊÔ´£¬¶¼¿ÉÄܵ¼ÖÂÄÚ´æ²»¹»Ó㬴Ӷø³öÏÖÄÚ´æÒç³ö¡£
¼¯ºÏÀàÖÐÓжԶÔÏóµÄÒýÓã¬Ê¹ÓÃÍêºóδÇå¿Õ£¬Ò²Êǵ¼ÖÂÄÚ´æÒç³öµÄÒ»¸ö³£¼ûÔÒò¡£ÀýÈ磬ÔÚʹÓà HashMap¡¢LinkedList µÈ¾²Ì¬¼¯ºÏÀàʱ£¬Èç¹ûÕâЩÈÝÆ÷Ϊ¾²Ì¬µÄ£¬ÄÇôËüÃǵÄÉúÃüÖÜÆÚÓë³ÌÐòÒ»Ö£¬ÔòÈÝÆ÷ÖеĶÔÏóÔÚ³ÌÐò½áÊøÖ®Ç°½«²»Äܱ»ÊÍ·Å£¬´Ó¶øÔì³ÉÄÚ´æÐ¹Â©£¬×îÖÕ¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£
´úÂëÖдæÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌ壬Ҳ»áµ¼ÖÂÄÚ´æÒç³ö¡£ÀýÈ磬ÔÚʹÓõݹéË㷨ʱ£¬Èç¹ûûÓÐÕýÈ·µÄÖÕÖ¹Ìõ¼þ£¬¾Í»áµ¼ÖÂËÀÑ»·£¬´Ó¶ø²»¶ÏµØÕ¼ÓÃÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£
ʹÓõĵÚÈý·½Èí¼þÖÐµÄ BUG£¬Ò²¿ÉÄܵ¼ÖÂÄÚ´æÒç³ö¡£ÀýÈ磬ÔÚʹÓÃijЩÊý¾Ý¿âÇý¶¯³ÌÐòʱ£¬Èç¹û´æÔÚ BUG£¬¾Í¿ÉÄܵ¼ÖÂÊý¾Ý¿â²éѯ²Ù×÷³öÏÖÒì³££¬´Ó¶øÕ¼ÓôóÁ¿µÄÄڴ棬×îÖÕµ¼ÖÂÄÚ´æÒç³ö¡£
Æô¶¯²ÎÊýÄÚ´æÖµÉ趨µÄ¹ýС£¬Ò²Êǵ¼ÖÂÄÚ´æÒç³öµÄÒ»¸öÔÒò¡£Èç¹ûÆô¶¯²ÎÊýÖÐÉèÖõÄÄÚ´æ´óССÓÚ³ÌÐòʵ¼ÊÐèÒªµÄÄÚ´æ´óС£¬¾Í»á³öÏÖÄÚ´æÒç³ö¡£
×ÜÖ®£¬´«Ææ hero ÒýÇæ³öÏÖÄÚ´æÒç³öÎÊÌâÊÇÒ»¸ö±È½Ï¸´ÔÓµÄÎÊÌ⣬ÐèÒª×ۺϿ¼ÂǸ÷ÖÖÒòËØ£¬²ÉÈ¡¶àÖÖ·½·¨½øÐнâ¾ö¡£

