Óû§·´À¡£º×¢²áÕ˺ųɹ¦£¬µ«µÇ¼ʱÌáʾ“²»¿ªÃÅ”»ò¿¨¼ÓÔØ½çÃæ¡£Êý¾Ý¿âÒÑ´æ´¢Õ˺ÅÐÅÏ¢£¬IPÅäÖÃÎÞÎ󣬵«·þÎñ¶ËÓë¿Í»§¶ËÖ®¼äʼÖÕÎÞ·¨½¨Á¢Îȶ¨Á¬½Ó¡£±¾ÎĽ«¾Û½¹½Å±¾Âß¼³åÍ»¡¢ÄÚ´æÐ¹Â©¡¢½Å±¾Ð£Ñé©¶´µÈÒþ±ÎÎÊÌ⣬ÌṩһÌ×´Ó»ù´¡µ½¸ß½×µÄÖÕ¼«½â¾ö·½°¸¡£
Ò»¡¢½Å±¾ÅäÖÃÏÝÚ壺90%Íæ¼ÒºöÂÔµÄÖÂÃüϸ½Ú
1. ½Å±¾ÒýÇæ°æ±¾´íÂÒ
• ÏÖÏ󣺿ͻ§¶ËÓë·þÎñ¶Ë½Å±¾°æ±¾²»Æ¥Å䣨Èç·þÎñ¶ËΪMir200£¬¿Í»§¶Ë¼ÓÔØMir200ex½Å±¾£©¡£
• ÅŲ鷽·¨£º
1. ¼ì²é·þÎñ¶ËĿ¼ÏµÄScript.iniÎļþ£¬È·ÈϽű¾°æ±¾ºÅ£¨Èç[General] Ver=200£©¡£
2 ¶Ô±È¿Í»§¶Ëmir.exeµÄMD5Öµ£¬Óë¹Ù·½Mir200°æ±¾ÊÇ·ñÒ»Ö¡£
• ½â¾ö·½°¸£º
◦ ´Ó·þÎñ¶Ë´ò°üÍêÕûµÄ½Å±¾Îļþ£¨ScriptÎļþ¼Ð£©£¬¸²¸Çµ½¿Í»§¶ËDataĿ¼¡£
◦ ʹÓýű¾¼ÓÃܹ¤¾ß£¨ÈçScriptEnc£©ÖØÐ±àÒë½Å±¾£¬È·±£ÎÞ±àÒë´íÎó¡£
2. ½Å±¾Ð£ÑéÂß¼³åÍ»
• Òþ²ØÎÊÌ⣺·þÎñ¶Ë½Å±¾ÖÐÉèÖÃÁ˶¯Ì¬Ð£ÑéÂ루ÈçCheckCode£©£¬µ«¿Í»§¶Ëδͬ²½¸üС£
• ¹Ø¼ü´úÂ붨λ£º
ÔÚ·þÎñ¶Ë½Å±¾LoginSrv.dbsÖÐËÑË÷ÒÔÏÂ×ֶΣº
if GetCode() ~= "123456" then
SendClient("LoginFailed");
return;
end
• ÐÞ¸´·½°¸£º
1. Çå³ý·þÎñ¶Ë¶¯Ì¬Ð£ÑéÂ루½«CheckCodeÉèΪ¿Õ»ò¹Ì¶¨Öµ£©¡£
2. ÔÚ¿Í»§¶Ëmir.iniÖÐÌí¼ÓÇ¿ÖÆÌø¹ýУÑé²ÎÊý£º
[SYSTEM]
SkipCheckCode=1
¶þ¡¢ÄÚ´æÐ¹Â©Óë×ÊÔ´Õ¼ÓãºÎÞÉùµÄ±ÀÀ£ÔªÐ×
1. ·þÎñ¶ËÄÚ´æÒç³ö
• ÏÖÏ󣺵Ǽʱ·þÎñ¶ËÉÁÍË£¬ÈÕÖ¾ÏÔʾOutOfMemoryException¡£
• Õï¶Ï¹¤¾ß£º
ʹÓÃProcess Explorer¼à¿ØLoginSrv.exeµÄÄÚ´æÕ¼Óã¬Èô³ÖÐøÔö³¤ÖÁÊýGB£¬Ôò´æÔÚÄÚ´æÐ¹Â©¡£
• ÐÞ¸´²½Ö裺
1. ¸üзþÎñ¶Ë²¹¶¡£¨ÈçMir200SP3£©£¬ÐÞ¸´ÒÑÖªÄÚ´æ¹ÜÀíȱÏÝ¡£
2. µ÷ÕûÊý¾Ý¿âÁ¬½Ó³Ø²ÎÊý£¨dbcfg.iniÖÐÉèÖÃMaxConnections=50£©¡£
2. ¿Í»§¶Ë×ÊÔ´³åÍ»
• µäÐͳ¡¾°£º¶à¿ªÓÎÏ·µ¼ÖÂmir200.exe½ø³Ì²ÐÁô£¬Õ¼Óö˿ڻòÄÚ´æ¡£
• Ç¿ÖÆÇåÀí½Å±¾£º
±àдÅú´¦ÀíÎļþ×Ô¶¯ÖÕÖ¹²ÐÁô½ø³Ì£º
taskkill /f /im mir200.exe
taskkill /f /im LoginSrv.exe
del /q GameCenter.log
start Mir200.exe
Èý¡¢Êý¾Ý¿âÉî²ã´ÎÎÊÌ⣺´Ó×ֶγåÍ»µ½ËÀËø
1. ×Ö¶ÎÀàÐͲ»Æ¥Åä
• °¸Àý£ºÊý¾Ý¿âuser±íÖÐpassword×Ö¶ÎΪvarchar(10)£¬µ«¿Í»§¶Ë¼ÓÃܺóÃÜÂ볤¶È³¬¹ý10λ¡£
• ÑéÖ¤·½·¨£º
ÊÖ¶¯²åÈë¶ÌÃÜÂëÕ˺ţ¨Èçuser='admin', password='12345'£©£¬²âÊÔÊÇ·ñÄܵǼ¡£
• ÐÞ¸´·½°¸£º
ÐÞ¸ÄÊý¾Ý¿â±í½á¹¹£¬½«password×ֶθÄΪvarchar(50)£¬²¢Öؽ¨Ë÷Òý¡£
2. ËÀËøÓëÊÂÎñ³¬Ê±
• ÏÖÏ󣺸߲¢·¢µÇ¼ʱÊý¾Ý¿â±¨´íDeadlock Trace ID=1234¡£
• ÓÅ»¯ÅäÖãº
ÔÚÊý¾Ý¿âÅäÖÃÎļþ£¨my.ini£©Öе÷Õû²ÎÊý£º
[mysqld]
innodb_lock_wait_timeout=50
max_connections=200
ËÄ¡¢¸ß¼¶ÍøÂçµ÷ÊÔ£º´ÓTCPÎÕÊÖµ½Êý¾Ý°üÖØ×é
1. TCP°ëÁ¬½Ó¹¥»÷·ÀÓù
• Òì³£Á÷Á¿ÌØÕ÷£º·þÎñ¶ËÈÕ־Ƶ·±³öÏÖSYN_RECEIVED״̬Á¬½Ó¡£
• ·ÀÓù·½°¸£º
1. ÔÚ·ÓÉÆ÷ÆôÓÃSYN Cookie·À»¤£¨sysctl -w net.ipv4.tcp_syncookies=1£©¡£
2. ʹÓÃiptables¹ýÂËÒì³£IP£º
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
2. Êý¾Ý°ü·ÖƬÓëMTUÎÊÌâ
• Õï¶ÏÃüÁ
ping -f -l 1472 61.128.162.163 # ²âÊÔ×î´ó´«Êäµ¥Ôª£¨MTU£©
• ½â¾ö·½°¸£º
Èô¶ª°ü£¬½«MTU´ÓĬÈÏ1500½µÖÁ1400£¨ÐÞ¸Ä×¢²á±í»ò·ÓÉÆ÷ÉèÖã©¡£
Îå¡¢ÖÕ¼«½â¾ö·½°¸£º×Ô¶¯»¯²¿ÊðÓë¼à¿Ø
1. DockerÈÝÆ÷»¯²¿Êð
ʹÓÃDocker¿ìËÙ²¿ÊðÎÞ³åÍ»»·¾³£º
FROM ubuntu:20.04
COPY Mir200 /server
RUN apt-get update && apt-get install -y libmysqlclient-dev
EXPOSE 7000
CMD ["/server/LoginSrv.exe"]
2. Prometheus¼à¿Ø¿´°å
ÅäÖ÷þÎñ¶Ë×ÊÔ´¼à¿Ø£º
- job_name: 'mir200'
static_configs:
- targets: ['localhost:9100']
metrics_path: /metrics
ʵʱ׷×ÙCPU¡¢ÄÚ´æ¡¢ÍøÂçÁ÷Á¿Òì³£²¨¶¯¡£
×ܽ᣺´ÓÇà͵½ÍõÕߵıܿÓ·Ïßͼ
1. ÐÂÊÖ±Ø×ö£º¼ì²é½Å±¾°æ±¾¡¢ÇåÀíÄÚ´æ²ÐÁô¡¢¹Ø±Õ·À»ðǽ¡£
2. ½ø½×Íæ¼Ò£ºÓÅ»¯Êý¾Ý¿âË÷Òý¡¢ÅäÖÃSYN Cookie¡¢µ÷ÕûMTU¡£
3. ר¼Ò¼¶²Ù×÷£ºDockerÈÝÆ÷»¯²¿Êð¡¢ELKÈÕÖ¾·ÖÎö¡¢×Ô¶¯»¯½Å±¾ÐÞ¸´¡£
Ò»¡¢½Å±¾ÅäÖÃÏÝÚ壺90%Íæ¼ÒºöÂÔµÄÖÂÃüϸ½Ú
1. ½Å±¾ÒýÇæ°æ±¾´íÂÒ
• ÏÖÏ󣺿ͻ§¶ËÓë·þÎñ¶Ë½Å±¾°æ±¾²»Æ¥Å䣨Èç·þÎñ¶ËΪMir200£¬¿Í»§¶Ë¼ÓÔØMir200ex½Å±¾£©¡£
• ÅŲ鷽·¨£º
1. ¼ì²é·þÎñ¶ËĿ¼ÏµÄScript.iniÎļþ£¬È·ÈϽű¾°æ±¾ºÅ£¨Èç[General] Ver=200£©¡£
2 ¶Ô±È¿Í»§¶Ëmir.exeµÄMD5Öµ£¬Óë¹Ù·½Mir200°æ±¾ÊÇ·ñÒ»Ö¡£
• ½â¾ö·½°¸£º
◦ ´Ó·þÎñ¶Ë´ò°üÍêÕûµÄ½Å±¾Îļþ£¨ScriptÎļþ¼Ð£©£¬¸²¸Çµ½¿Í»§¶ËDataĿ¼¡£
◦ ʹÓýű¾¼ÓÃܹ¤¾ß£¨ÈçScriptEnc£©ÖØÐ±àÒë½Å±¾£¬È·±£ÎÞ±àÒë´íÎó¡£
2. ½Å±¾Ð£ÑéÂß¼³åÍ»
• Òþ²ØÎÊÌ⣺·þÎñ¶Ë½Å±¾ÖÐÉèÖÃÁ˶¯Ì¬Ð£ÑéÂ루ÈçCheckCode£©£¬µ«¿Í»§¶Ëδͬ²½¸üС£
• ¹Ø¼ü´úÂ붨λ£º
ÔÚ·þÎñ¶Ë½Å±¾LoginSrv.dbsÖÐËÑË÷ÒÔÏÂ×ֶΣº
if GetCode() ~= "123456" then
SendClient("LoginFailed");
return;
end
• ÐÞ¸´·½°¸£º
1. Çå³ý·þÎñ¶Ë¶¯Ì¬Ð£ÑéÂ루½«CheckCodeÉèΪ¿Õ»ò¹Ì¶¨Öµ£©¡£
2. ÔÚ¿Í»§¶Ëmir.iniÖÐÌí¼ÓÇ¿ÖÆÌø¹ýУÑé²ÎÊý£º
[SYSTEM]
SkipCheckCode=1
¶þ¡¢ÄÚ´æÐ¹Â©Óë×ÊÔ´Õ¼ÓãºÎÞÉùµÄ±ÀÀ£ÔªÐ×
1. ·þÎñ¶ËÄÚ´æÒç³ö
• ÏÖÏ󣺵Ǽʱ·þÎñ¶ËÉÁÍË£¬ÈÕÖ¾ÏÔʾOutOfMemoryException¡£
• Õï¶Ï¹¤¾ß£º
ʹÓÃProcess Explorer¼à¿ØLoginSrv.exeµÄÄÚ´æÕ¼Óã¬Èô³ÖÐøÔö³¤ÖÁÊýGB£¬Ôò´æÔÚÄÚ´æÐ¹Â©¡£
• ÐÞ¸´²½Ö裺
1. ¸üзþÎñ¶Ë²¹¶¡£¨ÈçMir200SP3£©£¬ÐÞ¸´ÒÑÖªÄÚ´æ¹ÜÀíȱÏÝ¡£
2. µ÷ÕûÊý¾Ý¿âÁ¬½Ó³Ø²ÎÊý£¨dbcfg.iniÖÐÉèÖÃMaxConnections=50£©¡£
2. ¿Í»§¶Ë×ÊÔ´³åÍ»
• µäÐͳ¡¾°£º¶à¿ªÓÎÏ·µ¼ÖÂmir200.exe½ø³Ì²ÐÁô£¬Õ¼Óö˿ڻòÄÚ´æ¡£
• Ç¿ÖÆÇåÀí½Å±¾£º
±àдÅú´¦ÀíÎļþ×Ô¶¯ÖÕÖ¹²ÐÁô½ø³Ì£º
taskkill /f /im mir200.exe
taskkill /f /im LoginSrv.exe
del /q GameCenter.log
start Mir200.exe
Èý¡¢Êý¾Ý¿âÉî²ã´ÎÎÊÌ⣺´Ó×ֶγåÍ»µ½ËÀËø
1. ×Ö¶ÎÀàÐͲ»Æ¥Åä
• °¸Àý£ºÊý¾Ý¿âuser±íÖÐpassword×Ö¶ÎΪvarchar(10)£¬µ«¿Í»§¶Ë¼ÓÃܺóÃÜÂ볤¶È³¬¹ý10λ¡£
• ÑéÖ¤·½·¨£º
ÊÖ¶¯²åÈë¶ÌÃÜÂëÕ˺ţ¨Èçuser='admin', password='12345'£©£¬²âÊÔÊÇ·ñÄܵǼ¡£
• ÐÞ¸´·½°¸£º
ÐÞ¸ÄÊý¾Ý¿â±í½á¹¹£¬½«password×ֶθÄΪvarchar(50)£¬²¢Öؽ¨Ë÷Òý¡£
2. ËÀËøÓëÊÂÎñ³¬Ê±
• ÏÖÏ󣺸߲¢·¢µÇ¼ʱÊý¾Ý¿â±¨´íDeadlock Trace ID=1234¡£
• ÓÅ»¯ÅäÖãº
ÔÚÊý¾Ý¿âÅäÖÃÎļþ£¨my.ini£©Öе÷Õû²ÎÊý£º
[mysqld]
innodb_lock_wait_timeout=50
max_connections=200
ËÄ¡¢¸ß¼¶ÍøÂçµ÷ÊÔ£º´ÓTCPÎÕÊÖµ½Êý¾Ý°üÖØ×é
1. TCP°ëÁ¬½Ó¹¥»÷·ÀÓù
• Òì³£Á÷Á¿ÌØÕ÷£º·þÎñ¶ËÈÕ־Ƶ·±³öÏÖSYN_RECEIVED״̬Á¬½Ó¡£
• ·ÀÓù·½°¸£º
1. ÔÚ·ÓÉÆ÷ÆôÓÃSYN Cookie·À»¤£¨sysctl -w net.ipv4.tcp_syncookies=1£©¡£
2. ʹÓÃiptables¹ýÂËÒì³£IP£º
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
2. Êý¾Ý°ü·ÖƬÓëMTUÎÊÌâ
• Õï¶ÏÃüÁ
ping -f -l 1472 61.128.162.163 # ²âÊÔ×î´ó´«Êäµ¥Ôª£¨MTU£©
• ½â¾ö·½°¸£º
Èô¶ª°ü£¬½«MTU´ÓĬÈÏ1500½µÖÁ1400£¨ÐÞ¸Ä×¢²á±í»ò·ÓÉÆ÷ÉèÖã©¡£
Îå¡¢ÖÕ¼«½â¾ö·½°¸£º×Ô¶¯»¯²¿ÊðÓë¼à¿Ø
1. DockerÈÝÆ÷»¯²¿Êð
ʹÓÃDocker¿ìËÙ²¿ÊðÎÞ³åÍ»»·¾³£º
FROM ubuntu:20.04
COPY Mir200 /server
RUN apt-get update && apt-get install -y libmysqlclient-dev
EXPOSE 7000
CMD ["/server/LoginSrv.exe"]
2. Prometheus¼à¿Ø¿´°å
ÅäÖ÷þÎñ¶Ë×ÊÔ´¼à¿Ø£º
- job_name: 'mir200'
static_configs:
- targets: ['localhost:9100']
metrics_path: /metrics
ʵʱ׷×ÙCPU¡¢ÄÚ´æ¡¢ÍøÂçÁ÷Á¿Òì³£²¨¶¯¡£
×ܽ᣺´ÓÇà͵½ÍõÕߵıܿÓ·Ïßͼ
1. ÐÂÊÖ±Ø×ö£º¼ì²é½Å±¾°æ±¾¡¢ÇåÀíÄÚ´æ²ÐÁô¡¢¹Ø±Õ·À»ðǽ¡£
2. ½ø½×Íæ¼Ò£ºÓÅ»¯Êý¾Ý¿âË÷Òý¡¢ÅäÖÃSYN Cookie¡¢µ÷ÕûMTU¡£
3. ר¼Ò¼¶²Ù×÷£ºDockerÈÝÆ÷»¯²¿Êð¡¢ELKÈÕÖ¾·ÖÎö¡¢×Ô¶¯»¯½Å±¾ÐÞ¸´¡£

