linux問題排查 高cpu佔用率的程序和執行緒

2021-07-11 20:35:43 字數 2081 閱讀 8023

1.簡介

乙個程式,完成它預設的功能,並不能說明它是乙個優良的程式。好的程式,應該是對資源的合理利用,亦或是

用更少的資源(使用合理的演算法),實現更多有效的產出。

影響程式的資源一般而言分為4個:cpu、記憶體、io、網路。本文著重講解一下在linux系統下,如何檢視高cpu佔用率的程序,執行緒。

2.python**

為了模擬真實場景,我們用python程式模擬乙個高cpu占用的情景,即開大量的執行緒,執行緒內部也使用無限迴圈(空跑),以下為python**cpu.py:

#-*- coding:utf-8 -*-

import time, threading

#測試執行緒的個數

num = 500

def loop():

print 'thread %s is running...' % threading.current_thread().name

k = 0

while k < 500:

k += 1

time.sleep(1)

def special():

print 'thread %s is running...' % threading.current_thread().name

while true:

pass

#啟動一些普通執行緒

for i in range(num):

t = threading.thread(target=loop, name='normal-' + str(i))

t.start()

t = threading.thread(target=special, name='special')

t.start()

在linux系統中,使用 python cpu.py 執行該程式。

3.問題排查時使用的命令

如何確定高cpu消耗的程序:

方法1 用top簡單看一下:

標紅的部分,很明顯能發現較高的cpu占用情況。

方法2  用ps -eo pid,pcpu | sort -n -k 2 (當然,可以tail一下)

如何確定高cpu消耗的執行緒:

方法1 用top -h

標紅的部分就是高cpu消耗的執行緒資訊。

方法2 用ps h -eo pid,tid,pcpu | sort -n -k 3

假如我知道高cpu消耗的程序號是多少了,檢視它的執行緒資訊的方法為:

方法 1: pstree -p pid

方法 2: 檢視執行緒的詳細資訊:cat /proc/程序號/task/執行緒號/status

方法 3: 實時顯示 top -h -p pid

方法 4: htop,通過htop檢視單個程序的執行緒,然後按來進入htop的設定選單。選擇「設定」欄下

面的「顯示選項」,然後開啟「樹狀檢視」和「顯示自定義執行緒名」選項。按退出設定。

方法 5: 檢視該程序下所有的執行緒  ps -efl | grep pid

排查Java高CPU占用原因

top命令發現某個程序占用了100 的cpu 通過ps命令,進一步確定哪個程序出了問題 再檢視執行緒占用cpu的列表 找到占用cpu最高的執行緒,檢視tid,將其轉換為16進製制格式 printf x n tid 而後檢視堆疊資訊 jstack pid grep 16進製制tid a 60這裡報錯是...

Java while迴圈cpu占用高排查和優化

放幾個阿里雲的優惠鏈結 代金券 高效能伺服器2折起 高效能伺服器5折 命令列工具的功能都很強大,像jmap jstat jstack jps這些,功能和一些收費軟體差不多,但是沒有gui看起來就有些費勁。由於使用windows分析就使用自帶的jmc來用了,只要在命令列輸入jmc就可以啟動。由於已經知...

CPU飆高問題排查

1 查詢哪個程序占用cpu 2 程序哪個執行緒占用cpu 3 查詢執行緒的堆疊資訊 cpu飆高時,基本就是三板斧就可以找到具體占用cpu的執行緒資訊,這樣,你就看到cpu這麼高,是什麼執行緒在搗亂了!可以使用top 或者top grep 使用者名稱 比如這裡我們可以使用 top grep deplo...