Socket導致cpu消耗10 以上

2021-10-01 20:26:34 字數 511 閱讀 9452

1.接手的專案apk中基於jt808協議用socket上傳位置等訊息,用命令top -m 10 -s cpu

先把gps停了,重新執行還是會很耗cpu

2.定位

用android profiler查了下點record

最終定位到

執行緒裡socketchannel裡的read方法

while (true) {

try {

int len = 0;

len = channel.read(readbuffer);

"channel.read len == " + len);

if ( len > 0 && handler != null) {

發現是死迴圈裡不斷read

於是在read讀不到也就是返回-1裡,做了短暫延時,問題解決.

獲得消耗cpu較高的topsql

一 select a.snap id,a.dbid,a.instance number,db time,to char trunc db time lag db time,1,db time over partition by stat name,instance number order by s...

造成高CPU消耗的原因

1.索引的缺失 根據執行計畫以及追蹤,確定缺少的索引,新增索引 2.統計資訊過時 統計資訊過時,執行計畫就會不是最優的,可能產生大量的表掃瞄,需要更新統計資訊 update statistics table or indexed view name 3.where子句中使用函式 where 子句中使...

JStack分析cpu消耗過高問題

mark一下,今天確實用這個方法找到了問題 1.top找到目標程序,記下pid 2.top p pid,並用shift h開啟執行緒模式 這樣可以看到這個程序中,到底哪個執行緒占用大量cpu 記下threadid,tid 3.jstack檢視該執行緒實時的stack情況 jstack pid gre...