From dc2e1d8ea4862f21cec5b6a100b6324609f677bb Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 4 Dec 2025 15:32:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ src/server/game/LogMgr.go | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index e65e11c5..a6745817 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ src/server/unit_test.go src/server/teLog/* src/server/teLog/log.2024-11-28 src/server/logs/ga_log/*.log +src/server/goroutine.prof +src/server/heap_after.pb.gz diff --git a/src/server/game/LogMgr.go b/src/server/game/LogMgr.go index beab8867..0cf459ad 100644 --- a/src/server/game/LogMgr.go +++ b/src/server/game/LogMgr.go @@ -2,6 +2,7 @@ package game import ( "encoding/json" + "runtime" kafkaMiddleware "server/middleware/kafka" "server/pkg/github.com/name5566/leaf/log" "sync" @@ -15,8 +16,9 @@ const ( ) const ( PLAYROOM_LOST = "playroom_lost" - LOG_LENGTH = 10000 - WORKER_COUNT = 8 + // 增大缓冲:针对 ~1000 条/s,保留足够秒数的缓冲(可按需调整) + LOG_LENGTH = 100000 + WORKER_COUNT = 16 ) type LogMgr struct { @@ -41,14 +43,17 @@ func (L *LogMgr) InitManager() { // 初始化通道与启动 worker 循环写入 kafka L.L = make(chan *Log, LOG_LENGTH) - // 启动 worker + // 启动 worker(允许基于 CPU 动态扩展) workerCount := WORKER_COUNT + if cpuWorkers := runtime.NumCPU() * 2; cpuWorkers > workerCount { + workerCount = cpuWorkers + } for i := 0; i < workerCount; i++ { L.wg.Add(1) go func() { defer L.wg.Done() for v := range L.L { - // 如果 kafka 未就绪,尝试重入队列并等待一小段时间 + // 如果 kafka 未就绪,尝试重入队列并等待一小段时间(缩短等待) if kafkaMiddleware.KafkaMod == nil { // 尝试非阻塞重入,否则丢弃最旧再试一次 select { @@ -63,7 +68,7 @@ func (L *LogMgr) InitManager() { default: } } - time.Sleep(100 * time.Millisecond) + time.Sleep(10 * time.Millisecond) continue } @@ -85,8 +90,8 @@ func (L *LogMgr) InitManager() { // 放不下则丢弃 } } - // 轻微退避,避免快速循环 - time.Sleep(50 * time.Millisecond) + // 缩短退避,避免快速循环阻塞 + time.Sleep(10 * time.Millisecond) } } }()