欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java面試應(yīng)用上線后Cpu使用率飆升如何排查

 更新時(shí)間:2022年07月18日 16:07:09   作者:縹緲Jam  
這篇文章主要為大家介紹了java面試中應(yīng)用上線后Cpu使用率飆升如何排查的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

上次面試官問了個(gè)問題:應(yīng)用上線后Cpu使用率飆升如何排查?

其實(shí)這是個(gè)很常見的問題,也非常簡(jiǎn)單,那既然如此我為什么還要寫呢?因?yàn)樯洗位卮鸬臅r(shí)候我忘記將線程PID轉(zhuǎn)換成16進(jìn)制的命令了。

所以我決定再重溫一遍這個(gè)問題,當(dāng)然貼心的我還給大家準(zhǔn)備好了測(cè)試代碼,大家可以實(shí)際操作一下,這樣下次就不會(huì)忘記了。

模擬一個(gè)高CPU場(chǎng)景

public class HighCpuTest {
    public static void main(String[] args) {
        List<HignCpu> cpus = new ArrayList<>();

        Thread highCpuThread = new Thread(()->{
            int i = 0;
            while (true){
                HignCpu cpu = new HignCpu("Java日知錄",i);

                cpus.add(cpu);
                System.out.println("high cpu size:" + cpus.size());
                i ++;
            }
        });
        highCpuThread.setName("HignCpu");
        highCpuThread.start();
    }
}

在main方法中開啟了一個(gè)線程,無限構(gòu)建HighCpu對(duì)象。

@Data
@AllArgsConstructor
public class HignCpu {
    private String name;
    private int age;
}

準(zhǔn)備好上面的代碼,運(yùn)行HighCpuTest,然后就可以開始一些列的操作來發(fā)現(xiàn)問題原因了。

排查步驟

第一步,使用 top 找到占用 CPU 最高的 Java 進(jìn)程

1. 監(jiān)控cpu運(yùn)行狀,顯示進(jìn)程運(yùn)行信息列表

top -c

2. 按CPU使用率排序,鍵入大寫的P

P

第二步,用 top -Hp 命令查看占用 CPU 最高的線程

上一步用 top命令找到了那個(gè) Java 進(jìn)程。那一個(gè)進(jìn)程中有那么多線程,不可能所有線程都一直占著 CPU 不放,這一步要做的就是揪出這個(gè)罪魁禍?zhǔn)?,?dāng)然有可能不止一個(gè)。

執(zhí)行top -Hp pid命令,pid 就是前面的 Java 進(jìn)程,我這個(gè)例子中就是 16738 ,完整命令為:

top -Hp 16738,然后鍵入P (大寫p),線程按照CPU使用率排序

執(zhí)行之后的效果如下

查到占用CPU最高的那個(gè)線程 PID 為 16756

第三步,查看堆棧信息,定位對(duì)應(yīng)代碼

通過printf命令將其轉(zhuǎn)化成16進(jìn)制,之所以需要轉(zhuǎn)化為16進(jìn)制,是因?yàn)槎褩@?,線程id是用16進(jìn)制表示的。(我當(dāng)時(shí)就是忘記這個(gè)命令了~)

[root@review-dev ~]# printf "%x\n" 16756
4174

得到16進(jìn)制的線程ID為4174。

通過jstack命令查看堆棧信息

jstack 16738 | grep '0x4174' -C10 --color

如上圖,找到了耗CPU高的線程對(duì)應(yīng)的線程名稱“HighCpu”,以及看到了該線程正在執(zhí)行代碼的堆棧。

最后,根據(jù)堆棧里的信息,定位到對(duì)應(yīng)死循環(huán)代碼,搞定。

小結(jié)

cpu使用率飆升后如何排查這個(gè)問題不僅面試中經(jīng)常會(huì)問,而且在實(shí)際工作中也非常有用,大家最好根據(jù)上述步驟實(shí)際操作一下,這樣才能記得住記得牢。

以上就是java面試應(yīng)用上線后Cpu使用率飆升如何排查的詳細(xì)內(nèi)容,更多關(guān)于java Cpu使用率飆升排查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論