服务端排查线上问题(skynet,Java)

1.机器层面.

(1)查看机器cpu占用.

命令:top
在这里插入图片描述
us 用户空间占用CPU百分比:  7.3%
sy 内核空间占用CPU百分比:  2.0%
ni 用户进程空间内改变过优先级的进程占用CPU百分比:  0.0%
id 空闲CPU百分比:  90.4%
wa 等待输入输出的CPU时间百分比;  0.3%

load average :当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程

(2).查看机器内存使用:

命令:free -h
在这里插入图片描述
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。

(3)查看机器硬盘使用:

命令:df -h
在这里插入图片描述

(4)查看机器网络IO情况:

命令:iostat
在这里插入图片描述
在这里插入图片描述

2.进程层面(整体情况).

(1)首先获取进程ID.

命令: ps -ef | grep 应用名
在这里插入图片描述

(2)查看进程所占用cpu和内存

命令:ps -aux | grep 进程ID
在这里插入图片描述

USER : 用户
PID : 进程号
%CPU : 执行命令时候进程占用的CPU百分比
%MEM : 执行命令时候进程占用的内存百分比
VSZ : 进程占用虚拟内存(一般不用关注)
RSS : 进程占用物理内存(实际占用内存,单位KB)
TTY : 终端号

3.1线程层面和进程内部内存使用分析.(Java)

(1).查看线程正在干什么,也就是线程快照.

命令:jstack 进程ID
在这里插入图片描述

(2)JVM老年代,新生代使用情况.

命令:jmap -heap 进程ID.
该命令会打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息
在这里插入图片描述
在这里插入图片描述

(3)查看哪个类使用内存最多

命令:jmap -histo:live 进程ID
在这里插入图片描述

(4)查看详细GC情况.

命令:jstat -gcutil 进程ID
在这里插入图片描述

S0,S1 表示Survivor区
E表示Eden(新生代),
O表示Old(老年代),
M表示Metaspace(元空间),
YGC(Minor GC次数),
YGCT( Minor GC耗时,单位:秒),
FGC(Full GC次数),
FGCT(Full GC耗时,单位:秒),
GCT(GC耗时)

注意:上面两个YGCT,FGCT是新生代和老年代各自执行的gc的总的时间,如果需要算Full GC平均时间,则需要用FGCT/FGC,如果平均时间大于1s,则需要考虑优化了.

经过以上步骤基本能定位到问题,如果在过程中定位到比如说CPU占用过高OOM或者是内存溢出,可以在该文章查看详细步骤:OOM与CPU占用过高分析

3.2线程层面和进程内部内存使用分析.(skynet)

1.性能监控和统计: Skynet内置了一些性能监控功能,可以通过skynet.stat模块获取统计信息。关注消息队列、内存使用、CPU占用等指标,检查是否出现异常情况。

2.定位消息处理瓶颈: Skynet框架基于消息驱动的架构,可能会出现消息处理瓶颈。使用skynet.monitor模块分析消息处理队列的情况,查看是否有消息积压或处理较慢的情况。

3.协程调度和负载均衡: Skynet框架使用协程来处理任务,您可以通过skynet.queue模块查看协程队列情况,检查是否有某些协程负载过重,影响了整体性能。

4.内存泄漏检测: 使用工具如skynet.memprofiler模块来检测内存泄漏,确保内存使用稳定,不会出现不断增长的情况

常用监控命令

list:列出所有服务

mem:显示所有 lua 服务占用的内存

stat:stat指令用于列出所有Lua服务的CPU时间、处理的消息总数 、消息队列长度、被挂起的请求数量 (等。如图2-29所示,每个服务都含有消息队列,向服务发消息,就是将消息插入消息队列的过程,如果某个服务处理消息的速度太慢,它的消息队列就会很长。stat指令可以查看各个服务消息队列的长度,得知哪些服务负载高

netstat:列出网络连接的概况

4.网络层面

netstat(或ss:大量套接字连接时性能更好)网络状态
netstat -a 查看所有socket连接
netstat -tnpa 命令可以查看所有 tcp 连接的信息,包括进程号。
得到要查看的进程号,ps -ef 命令,查看相关进程信息
输入 iftop -P 会得到这样的一个实时数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Skynet Debug是指对Skynet系统进行调试和排错的过程。Skynet是一个开源的高性能分布式游戏服务器框架,为开发者提供了一套简单易用、高效稳定的游戏服务器解决方案。 在进行Skynet Debug时,首先需要通过查看系统日志来定位问题Skynet系统会记录各个模块的运行情况和错误信息,开发者可以通过这些日志信息来判断是否有错误发生,并定位出错的位置。 其次,开发者可以使用调试工具来进行线上调试。Skynet提供了丰富的调试工具,比如skynet.abort函数可以在运行时终止服务,并打印出完整的调用栈信息,帮助开发者快速定位错误。此外,还可以使用skynet.trace函数跟踪消息的传递流程,观察各个模块之间的交互情况,以找出可能存在的问题。 另外,对于一些复杂的问题,开发者还可以使用代码注入的方式进行调试。Skynet提供了插件机制,可以动态加载自定义的模块,并在运行时注入代码,以修改或监控系统运行过程中的一些关键点,帮助开发者检测潜在的问题。 在调试过程中,需要注意一些常见的问题。比如,可能因为不同模块间的消息传递顺序不一致而导致问题;还可能出现资源泄露或内存溢出等问题;另外,网络通信的稳定性和数据传输的正确性也需要关注。 总之,Skynet Debug是开发者对Skynet系统进行调试和排错的重要过程,通过使用系统日志、调试工具以及代码注入等方法,可以帮助开发者定位问题并解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值