ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何避免游戏服务器日志写满磁盘:Skynet 日志轮转完整指南

如何避免游戏服务器日志写满磁盘:Skynet 日志轮转完整指南 如何避免游戏服务器日志写满磁盘Skynet 日志轮转完整指南【免费下载链接】skynetA lightweight online game framework项目地址: https://gitcode.com/GitHub_Trending/sk/skynet游戏服务器跑了三天日志目录一夜涨到 8GB——磁盘写满服务挂掉事后连是哪些服务在写都说不清。本文讲怎么在真实环境里把 Skynet 日志轮转跑起来日志文件过大之前自动切割、高峰时不拖累业务、出问题时按服务单独追查游戏服务器日志。上线前不停服务怎么把日志轮转配置好先说清楚机制Skynet 没有内置按大小切割的轮转但留了一个钩子——logger 收到 SIGHUP 信号后会重新打开日志文件。注册 SIGHUP 在 skynet_start.c重开文件这个动作在 service-src/service_logger.c。所以切割这件事交给系统的 logrotate 做进程只负责 mv 之后重新握笔。默认 logger 是个 C 服务自带行为就够线上用每行游戏服务器日志都带时间戳.百分秒 来源服务地址[:%08x]前缀混在一起也能看出是谁打的每行写完立即 flush进程崩溃不会丢最后一段日志不指定文件logger nil时打到 stdout守护进程部署一定要指向文件主配置参考 examples/config加三行logger ./skynet.log # 写文件nil 则打到 stdout daemon ./skynet.pid # 记下 pidpostrotate 里直接发 HUP logpath ./logs # 单服务日志目录logon 开关会用再给 logrotate 加一条规则单文件封顶 100MB、保留 7 份./skynet.log { size 100M # 到 100MB 就切低流量服可改 daily rotate 7 # 留 7 份上限约 700MB postrotate kill -HUP $(cat ./skynet.pid) endscript }100MB 对高并发的战斗服通常是几十分钟的量10GB 数据盘上留 700MB 日志是个安全线。日志文件过大最常见的形态就是只追加、不切割这条规则专治它。 上线前务必演练一次起服务手动kill -HUP $(cat skynet.pid)确认 logger 开了新文件、时间戳连续不断档。这一步不通过上线后磁盘迟早写满。日志量突然暴涨时怎么压 好消息先说业务里skynet.error只是给 logger 服务发一条消息落盘发生在 logger 自己的事件循环里业务协程不等 IO。高峰时日志量大一般不会反过来卡住游戏逻辑真正的压力点在磁盘容量和 IO 带宽。压源头生产环境把高频 debug 打印删掉只留错误和关键流程登录、充值、结算。想要分级保留——ERROR 单独一个文件、留更久INFO 切得更快——C logger 做不了它没有级别概念得换 Lua logger配置改logger userloglogservice snlua参考 examples/userlog.lua。它是最小骨架text 协议的 dispatch 就是你的写入点按内容分流写不同文件、采样、转投都可以。Lua 服务里想怎么分级就怎么分级成本是一个文件的代码。充值、战斗结果这类重要事件建议别混在系统日志里examples/globallog.lua 注册了.log这个名字业务侧skynet.send(.log, ...)就能把事件投给统一日志服务备份和归档策略单独做。出问题时怎么给单个服务单独开日志现象线上某个服务行为异常但共享日志里几百个服务的消息混在一起大海捞针。 Skynet 有个开关专门治这个单服务消息日志。前提是配置里设了logpath并起了 service/debug_console.luaexamples 默认 8000 端口$ telnet 127.0.0.1 8000 list # 找到问题服务的地址list 输出里的 :4 这种 logon :4 # 它的全部消息落到 ./logs/00000004.log logoff :4 # 定位完立刻关掉打开后该服务的每条消息含 socket 收发逐行写进自己的文件来源、类型、session、时间戳、消息内容。复现一次logoff然后 grep 这个文件。开关不动代码、不重启服务是生产排查里最直接的日志监控手段。容量层面logrotate 本身就是监控不超限就不会切再配一个定时du -sh脚本看日志目录增速——一小时翻倍就说明有服务在打疯先查源头别等日志磁盘写满。第一步行动把上面三行配置和 logrotate 规则抄进你的部署脚本做一次 HUP 演练放进发布检查单。之后游戏服务器日志只负责什么时候切、留几份你只管游戏本身。【免费下载链接】skynetA lightweight online game framework项目地址: https://gitcode.com/GitHub_Trending/sk/skynet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表