线上问题,故障,bug排查技巧

1、磁盘空间不足问题

先用 df -h 从总体查看磁盘状态,看挂载点为根目录的 / 的容量咯,这里我只用了 25%,显然还没有达到瓶颈,但如果这里太大了,还要进一步看看是哪个目录大了。
此时用 du -sh *(ls -lh) 命令,查看 / 路径下的各个文件和目录的大小。

2、CPU 与内存使用率过高问题

用top命令查看
在这里插入图片描述

图上表示不同进程(PID)所占用的资源情况,没错,不仅仅是 CPU 情况。

top命令列表解析:
VIRT 表示使用的虚拟内存数量,RES 表示使用的物理内存数量,SHR 表示使用的共享内存数量,这三者可以从内存角度看该进程的资源占用情况。
S 表示进程的状态,下面的值 S 表示睡眠,D 表示不可中断睡眠,R 表示运行,基本知道这三个就够了。
后面两个值是百分比,%CPU 自然就是 CPU 使用率,%MEM 自然就是内存使用率,看这俩值可以一目了然看谁占用的资源过高了。
TIME 表示累计 cpu 使用时长,感觉没什么用。
COMMAND 表示启动进程使用的命令行,Java 程序的话,可以看看 JVM 启动参数,看是否配置的合理。
如果专门看 Java 进程的情况,可以先 jps 命令找到它的 PID。
然后再 top -p 19063 专门看这个 Java 进程的情况。
如果再细化到线程,可以加个 -H 参数,top -p 19063 -H
当然,top 命令已经可以分析内存了,如果想单独分析下内存,可以用小而美的命令,free -h

3、网络延时

netstat -a 查看所有连接中的 socket。
用 netstat -tnpa 命令可以查看所有 tcp 连接的信息,包括进程号。
当然这些是从机器上的,如果是一个接口响应耗时过长,一方面可能是由于机器本身所在的网络有问题。
一般这种问题也就是运维同学去解决,或者我们单节点重启一下,换台机器,就搞定了。
还有可能是服务提供方业务耗时严重,这个就需要去排查服务提供方的日志,机器负载,连接池占用情况等,分析问题,这也是我们平时开发碰到的主要问题。

4、Java 程序的问题分析

用 jmap -dump 分析堆内存中的快照,看是否有大对象问题
用 jmap -heap 查看堆内存设置与当前使用情况。
用 jstack 查看 jvm 线程运行信息,上传到 fastthread.io 这个网站,直观地看一下,一看线程有点多。

参考文章:http://www.ysxbohui.com/article/35

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YT博烩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值