µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡ÈÈѪ´«Ææ¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

´«ÆæGEE·þÎñ¶ËExternalException C000001DÖÕ¼«ÅŲéÊֲ᣺´ÓÈÕÖ¾µ½Ó²¼þµÄÈ«Á´Â··ÖÎö

Èȶȣº
Ò»¡¢ÎªÊ²Ã´Õâ¸ö´íÎóÈÃÔËάץ¿ñ£¿

´«ÆæGEE·þÎñ¶ËµÄ ExternalException C000001D ±»Íæ¼ÒÃdzÆÎª“ÓÄÁé´íÎó”——Ëü¿ÉÄÜÔÚÁ賿3µãͻȻ³öÏÖ£¬Ò²¿ÉÄÜÔÚÍæ¼Ò¸ß·åÆÚºÁÎÞÕ÷Õ׵رÀÀ£·þÎñ¶Ë¡£¸üÍ·ÌÛµÄÊÇ£¬ËüµÄ´¥·¢Ìõ¼þ¸´ÔÓ£¬ÉõÖÁͬһÌ×ÅäÖÃÔÚ²»Í¬·þÎñÆ÷ÉϱíÏÖ¿ÉÄÜÍêÈ«²»Í¬¡£±¾ÎĽ«Í¨¹ýÕæÊµ°¸Àý²ð½â£¬´øÄãÓÓÍâ¿ÆÊÖÊõ¼¶”·½·¨¶¨Î»ÎÊÌâ¸ùÔ´¡£

¶þ¡¢×îм¼Êõ¶¯Ì¬£ºÎ¢Èí2025ÄêQ2²¹¶¡µÄÓ°Ïì

2025Äê6Ô£¬Î¢Èí·¢²¼µÄ.NET Framework 4.8.1²¹¶¡ÒýÈëÁËÄÚ´æ¹ÜÀí»úÖÆÉý¼¶£¬µ«²¿·ÖµÚÈý·½²å¼þ¿ª·¢Õßδ¼°Ê±ÊÊÅ䣬µ¼ÖÂÓëGEE·þÎñ¶ËµÄ¼æÈÝÐÔ³åÍ»¼¤Ôö¡£
• ÊÜÓ°Ïì²å¼þÌØÕ÷£º

• »ùÓÚ.NET 4.0¿ª·¢µÄ¾É°æ²å¼þ£¨ÈçÀϰ汾·À×÷±×Ä£¿é£©

• δ¾­·â×°Ö±½Óµ÷ÓÃWin32 APIµÄC++À©Õ¹×é¼þ

• ¹Ù·½ÁÙʱ½â¾ö·½°¸£º

»Ø¹öÖÁ.NET 4.8.0²¢½ûÓòå¼þ×Ô¶¯¸üУº
# ÐÞ¸Ä×¢²á±íÇ¿ÖÆËø¶¨.NET°æ±¾
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" -Name Release -Value 528040


Èý¡¢ÕæÊµ°¸Àý£ºÄ³Íø°ÉÁ¬ÐøÈýÌì±ÀÀ£µÄ½Ìѵ

¹ÊÕÏÏÖÏó£º
• ·þÎñ¶ËÿÌìÔËÐÐ6Сʱºó±Ø±ÀÀ££¬ÈÕÖ¾ÏÔʾ 0x80004005£¨Í¨ÓÃȨÏÞ´íÎó£©Óë C000001D ½»Ìæ³öÏÖ¡£

• ¿Í»§¶ËƵ·±Ìáʾ“Êý¾Ý¿âÁ¬½Ó³¬Ê±”¡£

ÅŲé¹ý³Ì£º
1. ÈÕÖ¾½»²æ·ÖÎö£º
• ·þÎñ¶ËÈÕÖ¾£º·¢ÏÖ MySql.Data.dll ÔÚ QueryPlayerLogin ·½·¨ÖÐÅ׳öÒì³£¡£

• Windowsʼþ²é¿´Æ÷£º¶¨Î»µ½ EventID 1000£¨Ó¦ÓóÌÐò±ÀÀ££©£¬¹ØÁªÄ£¿éΪ vcruntime140.dll¡£

• ½áÂÛ£ºMySQLÁ¬½ÓÆ÷ÓëVC++ÔËÐÐʱ¿â°æ±¾³åÍ»¡£

2. ÄÚ´æÈ¡Ö¤£º
ʹÓÃWinDbg·ÖÎö GEE_crash.dmp Îļþ£¬·¢ÏÖ£º
*** Stack trace for last set context - .thread /r
teb ffff8801a1a1f000 VAD 0 ffff8801a1a1e000 ...
ntdll!ZwWaitForSingleObject+0x14 (00007ffd`a3b3d420)
KERNELBASE!WaitForSingleObjectEx+0x98 (00007ffd`9f8d88b4)
> MySql.Data.MySqlClient.MySqlConnection.Open() +0x1d5

¹Ø¼üÏßË÷£ºÊý¾Ý¿âÁ¬½Ó³ØÎ´ÕýÈ·ÊÍ·Å£¬µ¼Ö·ÇÍйÜÄÚ´æÐ¹Â©¡£

3. Ó²¼þÑéÖ¤£º
• MemTest86¼ì²â£º·¢ÏÖµÚ3¸ùÄÚ´æÌõ´æÔÚ4´¦ECC´íÎó£¨Ðè¸ü»»Ó²¼þ£©¡£

• ´ÅÅÌSMART״̬£ºÏµÍ³ÅÌÊ£ÓàÊÙÃü½ö12%£¬I/OÑÓ³ÙÍ»Ôöµ¼ÖÂÏß³Ì×èÈû¡£

×îÖÕÐÞ¸´·½°¸£º
• Éý¼¶ MySql.Data.dll ÖÁ8.0.33°æ±¾

• ½ûÓÃSQLÁ¬½Ó³Ø£¨ÐÞ¸Ä DatabaseConfig.ini£©£º
[Database]
ConnectionPooling=false
MaxPoolSize=100

• ¸ü»»¹ÊÕÏÄÚ´æÌõ²¢Ç¨ÒÆÖÁRAID 1ÕóÁÐ

ËÄ¡¢½ø½×ÅŲ鹤¾ß°ü

1. ProcDumpʵʱ²¶»ñ±ÀÀ£Ë²¼ä
procdump -ma -e 1 -f "" GameServer.exe

Éú³ÉÍêÕûÄÚ´æ×ª´¢Îļþ¹©ÄæÏò·ÖÎö¡£

2. WinHexÊÖ¶¯ÐÞ¸´Ë𻵵ÄDLL
Èô¹Ø¼üÎļþ²¿·ÖË𻵣¨Èç GameLogic.dll£©£¬¿ÉÓÃWinHex¶Ô±È¹Ù·½Îļþ£¬ÊÖ¶¯ÐÞ¸´Í·²¿Ð£ÑéÖµ¡£

3. Wireshark×¥°ü·ÖÎöÍøÂçÒì³£
¹ýÂË tcp.port == 3306 ¹Û²ìÊý¾Ý¿â½»»¥ÊÇ·ñ¶ª°ü£¬Õë¶ÔÐÔÓÅ»¯·À»ðǽ¹æÔò¡£

Îå¡¢ÔËάÈËÔ±±ØÐëÖªµÀµÄÐÐÒµÃØ¼®

• ²å¼þ¼æÈÝÐÔ¾ØÕ󣺽¨Á¢²å¼þÓëGEE°æ±¾µÄÊÊÅä±í£¨Ê¾Àý£©£º

²å¼þÃû³Æ ¼æÈÝGEE 8.5 Ðè.NET°æ±¾
·ÀÍâ¹ÒProPlus ❌ 4.7.2
¾­¼ÃϵͳÀ©Õ¹°ü ✅ 4.8.0


• ·þÎñ¶Ë»·¾³“Èý¸ôÀë”Ô­Ôò£º

1. ÓÎÏ·Âß¼­½ø³ÌÓëÊý¾Ý¿â½ø³Ì¸ôÀë
2. ²å¼þÔËÐÐÔÚɳÏä»·¾³ÖÐ
3. ÈÕÖ¾Îļþ´æ´¢¶ÀÁ¢·ÖÇø

• ×Ô¶¯»¯Ñ²¼ì½Å±¾£º

ÿÈÕÁ賿ִÐÐÄÚ´æ/CPU/´ÅÅ̽¡¿µ¼ì²é£º
$log = Get-WinEvent -LogName Application -MaxEvents 100 | Where-Object {$_.ProviderName -eq "Application Error"}
if ($log.Message -match "C000001D") {
Send-MailMessage -To "admin@xxx.com" -Subject "GEE·þÎñ¶ËÒì³£¾¯±¨"
}


Áù¡¢ÖÕ¼«Ô¤·À²ßÂÔ£º´Ó¸ùÔ´¶óɱ´íÎó

1. ÈÝÆ÷»¯²¿Êð
ʹÓÃDocker·â×°GEE·þÎñ¶Ë£¬ÊµÏÖ»·¾³Ò»ÖÂÐÔ£º
FROM mcr.microsoft.com/dotnet/runtime:4.8-windowsservercore-ltsc2019
COPY GEE_Service /app
WORKDIR /app
ENTRYPOINT ["GameServer.exe"]


2. Ó²¼þ¼¶·À»¤
• ²¿ÊðiDRAC/IPMIÔ¶³Ì¹ÜÀí¿¨£¬ÊµÊ±¼à¿Ø·þÎñÆ÷½¡¿µ×´Ì¬

• ÆôÓÃEDACÄÚ´æ¾À´í¹¦ÄÜ£¨ÐèÖ÷°åÖ§³Ö£©

3. ÉçÇøÐ­×÷»úÖÆ
¼ÓÈëGEE¿ª·¢ÕßSlackƵµÀ£¬»ñÈ¡ÆäËûÔËάÍŶӵÄʵʱ¹ÊÕϱ¨¸æ£¨Èç½üÆÚ¶àÆð°¸ÀýÖ¸ÏòÄ³ÔÆ·þÎñÉ̵ÄÐéÄ⻯²ãBUG£©¡£

Æß¡¢¼¼Êõ²Êµ°£ºÄæÏò¹¤³Ì½ÒʾÒþ²ØÂ©¶´

ͨ¹ýIDA Pro·´±àÒë GameCore.dll£¬·¢ÏÖij¶Î»ã±à´úÂë´æÔÚ¾ºÕùÌõ¼þ©¶´£º
mov eax, [ebp+var_4] ; δ¼ì²éÖ¸ÕëÓÐЧÐÔ
cmp eax, 0
jne short loc_10001234
call eax ; ¿ÉÄÜ´¥·¢NullÖ¸Õë½âÒýÓÃ

ÁÙʱ»º½â·½°¸£ºÍ¨¹ýµ÷ÊÔÆ÷Ç¿ÖÆÐÞ¸ÄÄÚ´æ±£»¤ÊôÐÔ£¬Ìø¹ý·çÏÕ´úÂë¶Î£¨½öÏÞ½ô¼±Çé¿ö£©¡£