整理一下:遇到的Java服务故障问题及排查方案

这篇博客列举了Java服务中常见的问题,包括CPU使用过高、Load过高、FullGC等问题及其原因。针对CPU高,可能是由于频繁的GC或代码消耗。Load高可能源于CPU利用率、IO等待或内核态锁。FullGC问题涉及对象生命周期、内存区域、垃圾回收算法等。解决方案包括调整线程池、优化SQL、识别和解决死锁等。
摘要由CSDN通过智能技术生成

常见问题 1:CPU 利用率高问题

CPU 使用率是衡量系统繁忙程度的重要指标,一般情况下单纯的 CPU 高并没有问题,它代表系统正在不断的处理我们的任务,但是如果 CPU 过高,导致任务处理不过来,这个是非常危险需要关注的。

CPU 使用率的安全值没有一个标准值,取决于你的系统是计算密集型还是 IO 密集型,一般计算密集型应用 CPU 使用率偏高 load 偏低,IO 密集型相反。

问题原因:

1、频繁 FullGC/YongGC

如何排查:

  • 查看 gc 日志;
  • jstat -gcutil pid 查看内存使用和 gc 情况。

2 、代码消耗,如死循环,md5 等内存态操作

如何排查:

(1)arthas (已开源)
thread -n 5 查看 CPU 使用率最高的前 5 个线程进行分析

(2)jstack 查找

  • ps -ef | grep java 找到 Java 进程 id;
  • top -Hp pid 找到使用 CPU 最高的线程;
  • printf ‘0x%x’ tid 将线程 id 转化 16 进制;
  • jstack pid | grep tid 找到线程堆栈;
  • 备注:输入 “1” 可查看每个 CPU 的情况,之前有团队遇到单个 CPU 被中间件绑定导致 CPU 飚高的情况。

常见问题 2:load高问题

load 指单位时间内活跃进程数,包含:

  • 运行态线程:执行Thread.start 进入 runnable 等待 CPU 调度,如果 CPU 很忙会导致 runnable 进程数增加;
  • 不可中断态线程:不可中断态主要包含网络 IO磁盘 IO 以及内核态的锁(如 synchronized)等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值