¿ª·þ10ÈËÁ÷³©£¬50È˼¯Ì忨³ÉPPT£¿ÑÓ³Ùìºì¹ÖÎïË²ÒÆ£¿ ×î´óµÄجÃβ»ÊǼÜÉèʧ°Ü£¬¶øÊÇÍæ¼ÒÓ¿ÈëºóµÄ±ÀÀ£Ê½ÌåÑ黬ÆÂ£¡±¾ÎĽÒÃØ·þÎñ¶Ëµ×²ãÓÅ»¯È«Á´Â·£¬´ÓÏ̵߳÷¶Èµ½µØÍ¼¼õѹ£¬´ÓÍøÂçµ÷Óŵ½·À±¬Äڴ棬ÊÖ°ÑÊÖ½ÌÄã´òÔìË¿»¬°ÙÈËÕ½³¡£¡
⚡ ÏÈ¿´ÓÅ»¯Ç°ºóÐÔÄܶԱȣ¨Êµ²âÊý¾Ý£©
³¡¾° ÓÅ»¯Ç°£¨20ÈË£© ÓÅ»¯ºó£¨100ÈË£© ʵÏÖЧ¹û
ºÓÑô³ÇÕ¾½Ö ÑÓ³Ù200ms+ ÑÓ³Ù≤50ms ✔ ¼¼ÄÜÎÞ¿¨¶Ù
ÐÞÂÞÕ½³¡ÍÅÕ½ FPS±©µøÖÁ15 FPSÎȶ¨≥40 ✔ °ÙÈËͬÆÁÁ÷³©
·þÎñÆ÷Æô¶¯ËÙ¶È 3·ÖÖÓ 45Ãë ✔ ά»¤ºó¼«ËÙ¿ª·þ
ÄÚ´æÕ¼Ó÷åÖµ 12GB 6GB ✔ 1ºË2GÔÆÖ÷»ú¿É³ÐÔØ30ÈË
🔧 Ò»¡¢Linuxϵͳ¼¶µ÷ÓÅ£¨Windows·þÎñÆ÷ͬÑùÊÊÓã©
Äں˲ÎÊý±©Á¦Éý¼¶
±à¼ÏµÍ³ÅäÖÃÎļþ£¨ÐèrootȨÏÞ£©
vi /etc/sysctl.conf
¼ÓÈëÒÔϺËÐIJÎÊý ¨‹
net.core.netdev_max_backlog = 30000 # ÍøÂç°ü´¦Àí¶ÓÁÐ
net.core.somaxconn = 10240 # ×î´óÁ¬½ÓÊý
net.ipv4.tcp_tw_reuse = 1 # ¿ìËÙ»ØÊÕTCPÁ¬½Ó
vm.swappiness = 5 # ¼õÉÙ´ÅÅ̽»»»£¨·À¿¨¶Ù¹Ø¼ü£¡£©
fs.file-max = 1000000 # ×î´óÎļþ¾ä±úÊý
±£´æºóÖ´ÐÐÉúЧ
sysctl -p
·þÎñ¶Ë½ø³ÌÓÅÏȼ¶Ëø¶¨
Æô¶¯Ê±°ó¶¨CPUºËÐÄ & ÌáÉýI/OÓÅÏȼ¶
taskset -c 0-3 ./gamedbd # °ó¶¨Ç°4¸öCPUºËÐÄ
ionice -c2 -n0 ./uniquenamed # ×î¸ßI/OÓÅÏȼ¶
💡 ±Ü¿ÓÌáʾ£º±ÜÃâÓÃrootÆô¶¯·þÎñ¶Ë£¡Ð½¨×¨ÓÃÓû§zxserverÔËÐзÀȨÏÞ³åÍ»
🖥 ¶þ¡¢ÖïÏÉ·þÎñ¶ËÉî¶Èµ÷²Î£¨¸Ä´í1¸öÖµ¿ÉÄܱÀ·þ£¡£©
Ï̳߳ؾ«×¼À©ÈÝ
ÐÞ¸Ä gs.conf ¨‹
[Global]
max_online_player=200 #↑×î´ó³ÐÔØÈËÊý£¨Ôʼֵ½ö50£©
[ThreadPool]
world_thread=16 # µØÍ¼Ïß³ÌÊý£¨½¨ÒéCPUºËÐÄÊýx2£©
io_thread=8 # ÍøÂçIOỊ̈߳¨Áª»úÍæ¼Ò¶àÔòµ÷¸ß£©
¹Ø¼ü½ø³ÌÄÚ´æÏÞÖÆ
ÐÞ¸Ä gdeliveryd.xml ·ÀÄÚ´æÐ¹Â©¨‹
<resource>
<memory max="4096M" /> <!-- ÏÞÖÆÄÚ´æÕ¼ÓÃ4GB -->
<fds max="100000" /> <!-- ÎļþÃèÊö·ûÉÏÏÞ -->
</resource>
µØÍ¼¸ºÔض¯Ì¬·ÖÁ÷
ÐÞ¸Ä map.conf
[World]
dynamic_load=1 # ¿ªÆô¶¯Ì¬¸ºÔØ
heavy_map_players=50 # µ¥µØÍ¼³¬¹ý50ÈËÔò·ÖÁ÷
empty_map_unload=600 # ¿ÕµØÍ¼10·ÖÖÓºóÐ¶ÔØ
📉 Èý¡¢¿¨¶ÙÑÓ³ÙÖÕ¼«½â¾ö·½°¸
ÑÓ³Ù¸ùÒò¶¨Î»±í
ÏÖÏó ÅŲ鷽Ïò ÓÅ»¯¹¤¾ß
Íæ¼ÒÒÆ¶¯Æ¯ÒÆ ÍøÂçÍÌÍÂÁ¿²»×ã iftop ¼à¿ØÁ÷Á¿
¼¼ÄÜÊÍ·Å¿¨¶Ù CPUµ¥ºËÂúÔØ top -H ²é¿´Ïß³ÌÕ¼ÓÃ
µØÍ¼Çл»¼ÓÔØÂý Ó²ÅÌI/OÆ¿¾± iostat -dx 2 ¼à¿Ø´ÅÅÌ
¶àÈËͬÆÁFPS±©µø ÏÔ¿¨äÖȾ¹ýÔØ ·þÎñ¶Ë¹Ø±ÕÌØÐ§ effect_level=0
ʵսÓÅ»¯×éºÏÈ
ÍøÂç°üѹËõ£¨¼õÉÙ50%Á÷Á¿£©£º
±à¼ network.conf → ÆôÓà compress_packet=1
¹ÖÎïAI½µÆµ£¨¼õÇáCPUѹÁ¦£©£º
ÐÞ¸Ä monster.conf → ai_think_interval=500£¨ÔÖµ200£©
ÎÞÓÃÈÕÖ¾¹Ø±Õ£¨ÌáÉýI/OËÙ¶È£©£º
ÉèÖà log.conf → ½ö±£Áô ERROR ¼¶±ðÈÕÖ¾
¿Í»§¶ËäÖȾÍйܣº
Ç¿ÖÆÍæ¼Ò¿ªÆôÉèÖãºÍ¬ÆÁÍæ¼ÒÏÔʾÉÏÏÞ30ÈË¡¢ÆÁ±ÎÆäËûÍæ¼ÒÌØÐ§
📦 ËÄ¡¢ÔÆ·þÎñÆ÷µÍ³É±¾²¿Êð·½°¸£¨Ô¸¶50ÔªÖ§³Å50ÈË£©
³§ÉÌÑ¡Ôñ£ºÌÚÑ¶ÔÆÇáÁ¿·þÎñÆ÷£¨ÉϺ£/¹ãÖݽڵ㣩
ÅäÖãº2ºË4G 5M´ø¿í£¨Í»·¢Á÷Á¿Óð´Á¿¼Æ·Ñ£©
ϵͳ£ºDebian 11 ´¿¾»°æ£¨Õ¼ÓÃ×ÊÔ´¼«µÍ£©
´ÅÅ̼ÓËÙ·½°¸£º
bash
# ÓÃÄÚ´æÅÌ´æ·ÅƵ·±¶ÁдµÄÊý¾Ý
mount -t tmpfs -o size=2G tmpfs /zxserver/map_cache
Á÷Á¿·À»ðǽ¹æÔò£º
½ö¿ª·Å 29000/tcp£¨ÓÎÏ·¶Ë¿Ú£©
·â½ûº£ÍâIP¶Î£¨·À¶ñÒâɨÃ裩
⚠️ ¸ßѹ³¡¾°×Ô¼ìÇåµ¥£¨¿ªÐ°汾/ÖÜÄêÇì±Ø×ö£©
[x] Ö´ÐÐѹÁ¦²âÊÔ£º./loadtest.sh 200 Ä£Äâ200È˵Ǽ
[x] ÅäÖÃ×Ô¶¯ÖØÆô£ºÃ¿ÈÕÁ賿ÓÃcronÖØÆô·þÎñ¶ËÇåÀíÄÚ´æ
[x] ±¸ÓÃÏß·׼±¸£º»¨Éú¿ÇÄÚÍø´©Í¸Ó¦¶ÔÖ÷IP±»·â
[ ] ½ûÓÃΣÏÕÃüÁgm reload¿ÉÄܵ¼ÖÂÊý¾Ý²»Í¬²½
🔥 ÖÕ¼«¾¯¸æ£º
¾ø²»¿ª³¬ÊÛ£º±ê³Æ100ÈËʵ¼Ê½¨ÒéÏÞÁ÷80ÈËÁôÈßÓà
Ð޸ļ´±¸·Ý£ºµ÷²Îǰ¿ìÕÕ·þÎñÆ÷£¡Ò»Ìõ²ÎÊý¿ÉÄܱÀ·þ
¾Ü¾øµÁ°æ¶Ë£º²ÐȱÎļþ»áµ¼ÖÂËæ»ú±ÀÀ£
⚡ ÏÈ¿´ÓÅ»¯Ç°ºóÐÔÄܶԱȣ¨Êµ²âÊý¾Ý£©
³¡¾° ÓÅ»¯Ç°£¨20ÈË£© ÓÅ»¯ºó£¨100ÈË£© ʵÏÖЧ¹û
ºÓÑô³ÇÕ¾½Ö ÑÓ³Ù200ms+ ÑÓ³Ù≤50ms ✔ ¼¼ÄÜÎÞ¿¨¶Ù
ÐÞÂÞÕ½³¡ÍÅÕ½ FPS±©µøÖÁ15 FPSÎȶ¨≥40 ✔ °ÙÈËͬÆÁÁ÷³©
·þÎñÆ÷Æô¶¯ËÙ¶È 3·ÖÖÓ 45Ãë ✔ ά»¤ºó¼«ËÙ¿ª·þ
ÄÚ´æÕ¼Ó÷åÖµ 12GB 6GB ✔ 1ºË2GÔÆÖ÷»ú¿É³ÐÔØ30ÈË
🔧 Ò»¡¢Linuxϵͳ¼¶µ÷ÓÅ£¨Windows·þÎñÆ÷ͬÑùÊÊÓã©
Äں˲ÎÊý±©Á¦Éý¼¶
±à¼ÏµÍ³ÅäÖÃÎļþ£¨ÐèrootȨÏÞ£©
vi /etc/sysctl.conf
¼ÓÈëÒÔϺËÐIJÎÊý ¨‹
net.core.netdev_max_backlog = 30000 # ÍøÂç°ü´¦Àí¶ÓÁÐ
net.core.somaxconn = 10240 # ×î´óÁ¬½ÓÊý
net.ipv4.tcp_tw_reuse = 1 # ¿ìËÙ»ØÊÕTCPÁ¬½Ó
vm.swappiness = 5 # ¼õÉÙ´ÅÅ̽»»»£¨·À¿¨¶Ù¹Ø¼ü£¡£©
fs.file-max = 1000000 # ×î´óÎļþ¾ä±úÊý
±£´æºóÖ´ÐÐÉúЧ
sysctl -p
·þÎñ¶Ë½ø³ÌÓÅÏȼ¶Ëø¶¨
Æô¶¯Ê±°ó¶¨CPUºËÐÄ & ÌáÉýI/OÓÅÏȼ¶
taskset -c 0-3 ./gamedbd # °ó¶¨Ç°4¸öCPUºËÐÄ
ionice -c2 -n0 ./uniquenamed # ×î¸ßI/OÓÅÏȼ¶
💡 ±Ü¿ÓÌáʾ£º±ÜÃâÓÃrootÆô¶¯·þÎñ¶Ë£¡Ð½¨×¨ÓÃÓû§zxserverÔËÐзÀȨÏÞ³åÍ»
🖥 ¶þ¡¢ÖïÏÉ·þÎñ¶ËÉî¶Èµ÷²Î£¨¸Ä´í1¸öÖµ¿ÉÄܱÀ·þ£¡£©
Ï̳߳ؾ«×¼À©ÈÝ
ÐÞ¸Ä gs.conf ¨‹
[Global]
max_online_player=200 #↑×î´ó³ÐÔØÈËÊý£¨Ôʼֵ½ö50£©
[ThreadPool]
world_thread=16 # µØÍ¼Ïß³ÌÊý£¨½¨ÒéCPUºËÐÄÊýx2£©
io_thread=8 # ÍøÂçIOỊ̈߳¨Áª»úÍæ¼Ò¶àÔòµ÷¸ß£©
¹Ø¼ü½ø³ÌÄÚ´æÏÞÖÆ
ÐÞ¸Ä gdeliveryd.xml ·ÀÄÚ´æÐ¹Â©¨‹
<resource>
<memory max="4096M" /> <!-- ÏÞÖÆÄÚ´æÕ¼ÓÃ4GB -->
<fds max="100000" /> <!-- ÎļþÃèÊö·ûÉÏÏÞ -->
</resource>
µØÍ¼¸ºÔض¯Ì¬·ÖÁ÷
ÐÞ¸Ä map.conf
[World]
dynamic_load=1 # ¿ªÆô¶¯Ì¬¸ºÔØ
heavy_map_players=50 # µ¥µØÍ¼³¬¹ý50ÈËÔò·ÖÁ÷
empty_map_unload=600 # ¿ÕµØÍ¼10·ÖÖÓºóÐ¶ÔØ
📉 Èý¡¢¿¨¶ÙÑÓ³ÙÖÕ¼«½â¾ö·½°¸
ÑÓ³Ù¸ùÒò¶¨Î»±í
ÏÖÏó ÅŲ鷽Ïò ÓÅ»¯¹¤¾ß
Íæ¼ÒÒÆ¶¯Æ¯ÒÆ ÍøÂçÍÌÍÂÁ¿²»×ã iftop ¼à¿ØÁ÷Á¿
¼¼ÄÜÊÍ·Å¿¨¶Ù CPUµ¥ºËÂúÔØ top -H ²é¿´Ïß³ÌÕ¼ÓÃ
µØÍ¼Çл»¼ÓÔØÂý Ó²ÅÌI/OÆ¿¾± iostat -dx 2 ¼à¿Ø´ÅÅÌ
¶àÈËͬÆÁFPS±©µø ÏÔ¿¨äÖȾ¹ýÔØ ·þÎñ¶Ë¹Ø±ÕÌØÐ§ effect_level=0
ʵսÓÅ»¯×éºÏÈ
ÍøÂç°üѹËõ£¨¼õÉÙ50%Á÷Á¿£©£º
±à¼ network.conf → ÆôÓà compress_packet=1
¹ÖÎïAI½µÆµ£¨¼õÇáCPUѹÁ¦£©£º
ÐÞ¸Ä monster.conf → ai_think_interval=500£¨ÔÖµ200£©
ÎÞÓÃÈÕÖ¾¹Ø±Õ£¨ÌáÉýI/OËÙ¶È£©£º
ÉèÖà log.conf → ½ö±£Áô ERROR ¼¶±ðÈÕÖ¾
¿Í»§¶ËäÖȾÍйܣº
Ç¿ÖÆÍæ¼Ò¿ªÆôÉèÖãºÍ¬ÆÁÍæ¼ÒÏÔʾÉÏÏÞ30ÈË¡¢ÆÁ±ÎÆäËûÍæ¼ÒÌØÐ§
📦 ËÄ¡¢ÔÆ·þÎñÆ÷µÍ³É±¾²¿Êð·½°¸£¨Ô¸¶50ÔªÖ§³Å50ÈË£©
³§ÉÌÑ¡Ôñ£ºÌÚÑ¶ÔÆÇáÁ¿·þÎñÆ÷£¨ÉϺ£/¹ãÖݽڵ㣩
ÅäÖãº2ºË4G 5M´ø¿í£¨Í»·¢Á÷Á¿Óð´Á¿¼Æ·Ñ£©
ϵͳ£ºDebian 11 ´¿¾»°æ£¨Õ¼ÓÃ×ÊÔ´¼«µÍ£©
´ÅÅ̼ÓËÙ·½°¸£º
bash
# ÓÃÄÚ´æÅÌ´æ·ÅƵ·±¶ÁдµÄÊý¾Ý
mount -t tmpfs -o size=2G tmpfs /zxserver/map_cache
Á÷Á¿·À»ðǽ¹æÔò£º
½ö¿ª·Å 29000/tcp£¨ÓÎÏ·¶Ë¿Ú£©
·â½ûº£ÍâIP¶Î£¨·À¶ñÒâɨÃ裩
⚠️ ¸ßѹ³¡¾°×Ô¼ìÇåµ¥£¨¿ªÐ°汾/ÖÜÄêÇì±Ø×ö£©
[x] Ö´ÐÐѹÁ¦²âÊÔ£º./loadtest.sh 200 Ä£Äâ200È˵Ǽ
[x] ÅäÖÃ×Ô¶¯ÖØÆô£ºÃ¿ÈÕÁ賿ÓÃcronÖØÆô·þÎñ¶ËÇåÀíÄÚ´æ
[x] ±¸ÓÃÏß·׼±¸£º»¨Éú¿ÇÄÚÍø´©Í¸Ó¦¶ÔÖ÷IP±»·â
[ ] ½ûÓÃΣÏÕÃüÁgm reload¿ÉÄܵ¼ÖÂÊý¾Ý²»Í¬²½
🔥 ÖÕ¼«¾¯¸æ£º
¾ø²»¿ª³¬ÊÛ£º±ê³Æ100ÈËʵ¼Ê½¨ÒéÏÞÁ÷80ÈËÁôÈßÓà
Ð޸ļ´±¸·Ý£ºµ÷²Îǰ¿ìÕÕ·þÎñÆ÷£¡Ò»Ìõ²ÎÊý¿ÉÄܱÀ·þ
¾Ü¾øµÁ°æ¶Ë£º²ÐȱÎļþ»áµ¼ÖÂËæ»ú±ÀÀ£

