首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
混部之殇-论云原生资源隔离技术之CPU隔离(一)
2
腾讯TencentOS 十年云原生的迭代演进之路
5
一次内核hung task分析
7
NFSv4客户端hung住的BUG,您解决了吗?
8
nfs不同版本的挂载与解析
9
(好文重发)朴英敏:用crash工具分析Linux内核死锁的一次实战
10
内核问题解决方法记录
11
blocked for more than 120 seconds
12
记一次Linux主机内存脏数据引发的NameNode故障
13
​[linux][memory]cgroup回收内存对虚拟机的影响分析
14
docker cgroup 技术之memory(首篇)
15
[linux][memory] 内存回收
16
Linux内核理解 Memory barrier(内存屏障)
17
Linux内核27-优化和内存屏障
18
谢宝友:深入理解 Linux RCU 从硬件说起之内存屏障
19
谢宝友:深入理解 RCU 之概念
20
聊聊 Linux 上软件实现的“交换机” - Bridge!
21
谈谈 Linux 假死现象
22
宋宝华: 数据库为什么有可能喜欢Linux AIO(异步I/O)?
23
深入理解Linux内核之脏页跟踪
24
Iowait的成因、对系统影响及对策
25
打通IO栈:一次编译服务器性能优化实战
26
浅谈Linux dirty data配置
27
write文件一个字节后何时发起写磁盘IO?
28
深入理解 Linux的 I/O 系统
29
深入理解Linux 的Page Cache
30
深入理解Linux文件系统之文件系统挂载(上)
31
深入理解Linux文件系统之文件系统挂载(下)
32
【线上故障】通过系统日志分析和定位
33
实战案例分享:根据 JVM crash 日志定位和分析问题
34
Linux系统安全 | Linux日志分析和管理
35
如何快速处理线上故障
36
面试-线上故障如何排查
37
Linux内核Crash分析
38
内核timer crash debug思路
39
一次解决Linux内核内存泄漏实战全过程
40
Linux Kernel模块内存泄露的一种查找思路
41
linux系统奔溃之vmcore:kdump 的亲密战友 crash
42
crash浅析tasklist_lock与进程释放
43
Linux OOM机制分析
44
cgroup oom引发Pod重建问题分析
45
workqueue相关数据结构在内核crash分析中的实战应用
46
Linux设备驱动workqueue(工作队列)案例实现
47
Linux内核中的软中断、tasklet和工作队列具体解释
48
扒开 Linux 中断的底裤之 workqueue
49
Linux系统驱动之GIC驱动程序对中断的处理流程
50
Linux系统驱动之链式中断控制器驱动程序编写

面试-线上故障如何排查

面试经常会被问到java应用出现了问题,如何排查,主要使用下面几个命令基本都能解决

  1. 执行top命令,查看所有进程占用cpu的排序
  2. 执行top -Hp pid,查看java进程下的所有线程占用cpu的情况
  3. 执行printf '%x\n' pid,把pid转成16进制
  4. jstack pid|grep 线程id(即上一步的16进制),查看此线程的堆栈信息
  5. jmap -dump:format=b,file=filename pid,导出此进程的内存heap输出文件
  6. jstat -gcutil pid 统计间隔毫秒 统计次数

比如我们要查看cpu飙升的问题

我们再看看我运行的代码

代码语言:javascript
复制
public class test {
    public static void start() {
        ExecutorService pool = Executors.newFixedThreadPool();

        while (true) {
            pool.execute(() -> {
                double a = Math.random();
                double b = Math.random();
                int result = (int) (a + b);
            });
        }
    }
    public static void main(String[] args) {
        start();
    }
}

我们直接使用我们开头的几个命令

代码语言:javascript
复制
第一步执行top,找到占用内存高的进程id
代码语言:javascript
复制
第二打印进程的所有线程 top -Hp 2467
代码语言:javascript
复制
第三把对应占用高的线程转成16进制 printf '%x\n' 2469
代码语言:javascript
复制
第四打印对应线程的堆栈情况 jstack 2467| grep 915

以上基本就可以找到对应代码的问题,上面举例比较简单,实际可能比较复杂,但是基本上这几个命令都可以解决

导致CPU飙升常见的原因如下

  • 死循环或者超大循环,如我们的例子
  • 频繁创建对象发生 YGC,导致CPU占用飙升
  • 超多线程,线程调度的开销极大
  • 超大的运算
下一篇
举报
领券