交流论坛首页 » 阅读帖子

[讨论] 在线送积分调度器的核心SQL脚本编写

在日常维护中,Java服务端的垃圾回收(GC)一直是性能瓶颈所在。当在线人数突破300人时,默认的ParallelGC会产生严重的Stop-the-world(停顿),引发封包超时断开。建议在服务器启动参数中强制指定G1垃圾回收器:

```bash
java -server -Xms8G -Xmx8G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=45 -XX:MaxGCPauseMillis=50 -jar L1JServer.jar
```
配合此配置,G1GC能将单次系统停顿控制在50毫秒以内,极大地减少了卡顿现象。

经常有站长问合服或者数据库发生突然崩塌时,部分表(比如 `character_warehouse` 或者 `char_items`)报错 'Table is marked as crashed' 或者主键冲突问题。可以使用底层的REPAIR命令进行热修复。对于主键冲突,可以使用下面的SQL语句合并冲突记录:

```sql
REPAIR TABLE character_warehouse USE_FRM;
-- 批量清理无主物品(删除没有对应角色ID的无效数据)
DELETE FROM char_items WHERE char_id NOT IN (SELECT objid FROM characters);
```

实现按在线时长自动发放积分。我们在服务端主循环初始化时注册一个单线程调度任务(ScheduledExecutorService),每隔1小时执行一次,扫描全局在线玩家 `L1World.getInstance().getAllPlayers()`,为每位在线玩家积分加5。这样可以有效增加服务器的在线率与活跃度,也可以避免前台网站轮询打库的性能开销。
💬 全部互动回帖 (3)
沙发 🛋️
楼主有测试过防外挂硬件指纹下发验证的性能开销吗?会不会占用主线程?
板凳 🪑
请教下楼主,在 7.6C 版本中,Packet的加密秘钥结构是不是有所变化?
地板 🧱
防刷金币这块,其实最重要还是要在服务端对 `sell_items` 的单价进行上限封顶校验。
🔒 社区需要注册用户才能发表回复或发帖
立即登录 免费注册