① Java如何定位佔用CPU比較高的問題
一、確定消耗CPU的Java進程
備註:
1、jstack 輸出的堆棧信息,線程id對應的16進制為小寫,查找時要統一按照小寫方式查找
2、jstack輸出為當前瞬間的堆棧信息,如果遇到間斷性出現CPU高的問題時,需要多輸出幾次
從上面方式定位到代碼Test.main(Test.java:4)處導致了CPU偏高的問題,那我們查看下代碼具體如何實現的?
代碼實現:
public class Test {
public static void main(String[] args) {
while(true) {
}
}
}
從代碼層面看該處實現了一個死循環,所以導致了線程佔用CPU偏高的問題。
② windows資源管理器耗電嚴重怎麼辦
Windows10資源管理器佔用CPU過高該怎麼辦?因為Windows7系統結束了支持,所以現在很多朋友都升級更新了Windows10系統。在使用Win10系統的過程中,發現Windows資源管理器佔用很多CPU資源,導致系統變慢、變卡等問題。那麼我們該如何解決問題?接下來小編就來教大家Win10資源管理器佔用CPU過高的解決方法,希望大家會喜歡。
Win10資源管理器佔用CPU過高的解決方法:
一、重啟Windows資源管理器
1.這個方法治標不治本,只能緩解,可能過一會就又會CPU佔用過高,具體方法:同時按住Ctrl+shift+ESC打開任務管理器
2.因為我的問題已經解決,所以可以看到CPU佔用很少,原來佔用80%多,現在選中Windows資源管理器,重啟Windows資源管理器如下:
3.重啟以後會重新載入資源管理器,我們可以看到CPU使用率已經慢慢降下來,上面也說這只是暫時一個解決辦法。
.png
4.重要提示:我們可以在CPU這一欄中看到每個軟體佔用的CPU,如果哪個軟體佔用較大,選中軟體然後結束任務或者直接卸載軟體即可,卸載之後重啟系統,如果這個解決了那麼接下來的步驟可以適當參考,沒有解決則繼續操作
二、禁用cotana(小娜) + 禁用問題收集服務
1、禁用cotana(小娜) + 禁用問題收集服務基本上可以解決問題,不會出現反復,但是也不絕對,只能說如果這個都解決不了,那麼只有看後面的終極解決方案
2、首先win + R打開運行框並輸出如下打開本地組策略:
3、依次展開
4、在Windows組件下找到搜索,單擊,可以看到右邊有三個cotana選擇,我們需要將這三個禁用
.png
5、在右邊的選項上雙擊,彈出選項框,選擇禁用,再點擊確認。
接下來就是禁用問題收集服務
1、win + R打開運行框並輸出services.msc,然後點擊確定打開服務
2、然後在本地服務中找到以下三個服務按照下列方法依次禁用
.png
.png
以上介紹的內容就是關於Win10資源管理器佔用CPU過高的解決方法
自動系統掃描:
右鍵點擊任務欄上的Windows圖標,選擇【Microsoft Powershell(管理員)】
逐一輸入以下指令:
重啟電腦
如果出現」有一些文件無法修復「的回報,重復步驟1-3幾次
③ 電腦cpu佔用過高怎麼處理
電腦cpu佔用過高的處理方法:
1. 打開windows任務管理器,ctrl+alt+del然後點任務管理器,點應用程序,將不使用的程序關掉。
2. 打開任務管理器後點進程,會看到cpu的佔用情況,將cpu佔用比較高的進程結束掉。
3. win+R或者開始-運行,輸入msconfig,打開系統配置,關閉不必要的啟動項,重啟。
4. 如果電腦cpu佔用仍然過高,可能是病毒、木馬造成。打開殺毒軟體進行全盤殺毒。
5. 電腦系統用的時間長了以後會越來越慢,以上方法都不能解決的話我們只好重裝系統了。
④ JVM調優jstack怎麼找出最耗cpu的線程並定位代碼
第一步:先找出java的進程Id(PID) 假設java應用名稱是zcg_commodity
ps -ef|grep zcg_commodity
得到進程Id為32464
第二步:找出該進程內最消耗CPU的線程
top -Hp pid
輸入top -Hp 32464
TIME列就是各個java線程耗費的CPU的時間,比如圖中是線程ID的為2012的線程,
通過 printf 「%x\n」 2012
得到2012的十六進制為 7dc
第三步:
一般會進到jdk的bin目錄下,root許可權執行
jstack 32464|grep 7dc
⑤ Linux裡面cpu佔用太高排查思路是什麼
思路就是top查看是什麼進程佔用高,一般是應用或者資料庫,應用方面可以看看運行吐出日誌是否有報錯信息,查netstat連接應用埠的會話是不是有異常,資料庫進程高,可以使用自帶的檢查命令後台看是否有執行很久的sql事務,鎖等待頻繁,報錯日誌等,找到問題針對性的優化,一步一步解決。
⑥ 怎麼找到找出哪個SQL語句導致cpu佔用如此高
一般我們可以使用sql server自帶的性能分析追蹤工具sql profiler分析資料庫設計所產生問題的來源,進行有針對性的處理。但我們也可以通過自己寫SQL語句來有針對性的進行性能方面的查詢。通常會用到如下三個系統視圖:sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests
--一、查看當前的資料庫用戶連接有多少
USE master
GO
SELECT *
FROM sys.[sysprocesses]
WHERE [spid] > 50
--AND DB_NAME([dbid])='gposdb'
SELECT COUNT(*)
FROM [sys].[dm_exec_sessions]
WHERE [session_id] > 50
--二、選取前10個最耗CPU時間的會話
SELECT TOP 10
[session_id] ,
[request_id] ,
[start_time] AS '開始時間' ,
[status] AS '狀態' ,
[command] AS '命令' ,
dest.[text] AS 'sql語句' ,
DB_NAME([database_id]) AS '資料庫名' ,
[blocking_session_id] AS '正在阻塞其他會話的會話ID' ,
[wait_type] AS '等待資源類型' ,
[wait_time] AS '等待時間' ,
[wait_resource] AS '等待的資源' ,
[reads] AS '物理讀次數' ,
[writes] AS '寫次數' ,
[logical_reads] AS '邏輯讀次數' ,
[row_count] AS '返回結果行數'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
AND DB_NAME(der.[database_id]) = 'gposdb'
ORDER BY [cpu_time] DESC
--三、查詢前10個最耗CPU時間的SQL語句
SELECT TOP 10
dest.[text] AS 'sql語句'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
ORDER BY [cpu_time] DESC
--四、查詢會話中有多少個worker在等待
SELECT TOP 10
[session_id] ,
[request_id] ,
[start_time] AS '開始時間' ,
[status] AS '狀態' ,
[command] AS '命令' ,
dest.[text] AS 'sql語句' ,
DB_NAME([database_id]) AS '資料庫名' ,
[blocking_session_id] AS '正在阻塞其他會話的會話ID' ,
der.[wait_type] AS '等待資源類型' ,
[wait_time] AS '等待時間' ,
[wait_resource] AS '等待的資源' ,
[dows].[waiting_tasks_count] AS '當前正在進行等待的任務數' ,
[reads] AS '物理讀次數' ,
[writes] AS '寫次數' ,
[logical_reads] AS '邏輯讀次數' ,
[row_count] AS '返回結果行數'
FROM sys.[dm_exec_requests] AS der
INNER JOIN [sys].[dm_os_wait_stats] AS dows ON der.[wait_type] = [dows].[wait_type]
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
ORDER BY [cpu_time] DESC
--五、查詢CPU佔用高的語句
SELECT TOP 10
total_worker_time / execution_count AS avg_cpu_cost ,
plan_handle ,
execution_count ,
( SELECT SUBSTRING(text, statement_start_offset / 2 + 1,
( CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), text))
* 2
ELSE statement_end_offset
END - statement_start_offset ) / 2)
FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC
⑦ 如何找CPU佔用率過高的語句
可以通過topas等一些命令,找到耗CPU很高的進程pid
然後通過pid找到CPU佔用率過高的SQL語句。
這個是我常用的抓耗CPU很高的sql,10G的:
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE a.HASH_VALUE =
(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value)
FROM v$session b, v$process c
WHERE b.paddr = c.addr
and c.spid = '&pid');
⑧ 電腦cpu佔用過高怎麼辦
腦cpu佔用過高是因為電腦所開的進程太多,可以通過關閉一些不必要的進程來解決這個問題,具體方法如下:
1、通過shift+ctrl+esc直接進入Windows10的任務管理器,如下圖所示:
⑨ 能盡快耗盡及其內存,佔光及其cpu有哪些方法
1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。(進程池越多越佔用內存,由於訪問網站之後往往不會立即釋放內存資源。)
2、設置應用程序池的回收時間,默認為1720小時,可以根據情況修改。同時,設置同時運行的w3wp進程數目為1。再設置當內存或者cpu佔用超過多少,就自動回收內存 。
3、設置固定時間加收進程,比如在凌晨1:00至9:00之前訪問人數都比較少,影響很少小,可以設定每天在這個時間段內進行內存回收,以減少伺服器因 為內存不足帶來的影響。設定固定的時間在IIS6中沒有限制次數,可以根據實際情況來設定時間比如:晚上12:00,8:00,12:30,6:30等時 間段時間有效的進程池資源回收。
一般來說,這樣就可以解決了。但仍然會出現個別網站因為程序問題,不能正確釋放。
那麼,怎麼樣才能找到是哪一個網站的?
1、在任務管理器中增加顯示pid欄位。就可以看到佔用內存或者cpu最高的進程pid
2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池
3、到iis中察看該應用程序池對應的網站,就ok了。
⑩ linux cpu使用率過高排查
方法一
第一步:使用
top命令,然後按shift+p按照CPU排序
找到佔用CPU過高的進程的pid
第二步:使用
top -H -p [進程id]
找到進程中消耗資源最高的線程的id
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x
" [線程id]
將線程id轉換為16進制(字母要小寫)
bc是linux的計算器命令
第四步:執行
jstack [進程id] |grep -A 10 [線程id的16進制]」
查看線程狀態信息
方法二
第一步:使用
top命令,然後按shift+p按照CPU排序
找到佔用CPU過高的進程
第二步:使用
ps -mp pid -o THREAD,tid,time | sort -rn
獲取線程信息,並找到佔用CPU高的線程
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x
" [線程id]
將需要的線程ID轉換為16進制格式
第四步:使用
jstack pid |grep tid -A 30 [線程id的16進制]
列印線程的堆棧信息
案例分析
場景描述
生產環境下JAVA進程高CPU佔用故障排查
解決過程
1、根據top命令,發現PID為2633的Java進程佔用CPU高達300%,出現故障。
2、找到該進程後,如何定位具體線程或代碼呢,首先顯示線程列表,並按照CPU佔用高的線程排序:
1[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn
顯示結果如下:
化主動為被動的方式,一方面減輕了運維工程師的工作,另一方面也減小了運維漏看或者忽略告警的情況發生。