日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

云时代架构阅读笔记二——一次CPU负载超高的分析

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 云时代架构阅读笔记二——一次CPU负载超高的分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?本文為轉載,博客原地址:http://www.jianshu.com/p/4a6fe6c82311

上線發號器,發現該進程的cpu占用率很高,接近100% 。

top結果如下:

?查詢具體的線程cpu占用率,如下:

可以看到 15505號線程基本占用了全部的cpu資源 。繼續查看該線程的具體執行情況。如下:

FileInputStream.java中關于readBytes的代碼,如下:

從代碼中可知, 該方法調用的是?native readBytes 。本地方法如下:

繼續跟代碼:

通過代碼可以看到 ,readBytes 是通過調用IO_Read來實現文件讀取。

在io_util_md.h 可以找到?IO_Read的宏定義:

在 jvm.h 找到JVM_Read的申明:

在往下無法找到JVM_Read的實現 ,故只能猜測其調用了系統的read 或fread實現讀取。為證明猜測選用windows的實現做旁證 。前面都一樣 ,從 io_util_md.h 開始有變化

\openjdk\jdk\src\windows\native\java\io\io_util_md.h 發現 IO_Read的宏定義如下:

\openjdk\jdk\src\windows\native\java\io\io_util_md.c 找到 handleRead的實現:

可以看到windows提供的ReadFile是最終讀取數據的地方。

? ? ? ?相同的代碼在本地windows上運行 ,cpu利用率一直極低,可見IO的阻塞效果很好 ;而在服務器上cpu利用高,則懷疑是因為Linux在操作系統read上與windows優化不一致。此外還需要繼續分析不同版本linux系統才能得出這是單獨某個版本的問題亦或是系列問題。

本次分析所用系統相關信息如下:

linux相關版本信息

windows相關版本信息

回到應用層看發號器服務化版本實現,發號器簡單的輪訓等待控制臺實現,修改為每一分鐘輪訓一次控制臺,因為發號器的主線程僅僅用于啟動服務線程,并不做任何有用的事情,保持運行狀態即可,修改后的代碼如下:

 ?
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while (!"exit".equals(br.readLine()))try {Thread.sleep(60000);} catch (InterruptedException e) {// If error, print it to console
            e.printStackTrace();};

?

轉載于:https://www.cnblogs.com/DaisyYuanyq/p/11014811.html

總結

以上是生活随笔為你收集整理的云时代架构阅读笔记二——一次CPU负载超高的分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。