序
之前有寫到過modbus的協議空調面板控制,經歷了去年冬天的考驗,還算勉強合格。這次客戶反饋CPU佔用高,線程數比較大。
一、現象說明
這邊前置機在局域網跑modbus項目,通過與控制局域網內網關通訊,走modbus協議控制空調面板。用的時tomcat9跑項目,然後加到了服務裏。這裏使用系統自帶的資源管理器查看線程數情況。
看到沒,進程數1510,有點大啊。
二、使用JDK自帶工具分析原因
不得不說JAVA真的是牛啊,縱然JDK收費,我也愛它。我這裏使用的是免費的最高版本1.8。
首先說明cmd命令框需要以管理員身份運行,否則報錯,如圖:
這裏的1848是pid進程號。
以管理員身份運行cmd框後,因爲不想在黑框框裏看,想保存爲文件查看,所以使用
jstack -F -l 1848 >> 路徑\文件名,
我這裏保存爲txt,即文件名1111.txt。如圖:
文件名出來後,可以看到好多線程阻塞,BLOCKED就是阻塞的意思。
然後,還會打印出阻塞的代碼行。到此原因就定位到了。馬上要下大雨了,老婆在催回家,明天來分析代碼。這個代碼大致看了下是老外寫的,modbus的相關:
分析記過是指向這一行的。明天繼續。