1.簡介
乙個程式,完成它預設的功能,並不能說明它是乙個優良的程式。好的程式,應該是對資源的合理利用,亦或是
用更少的資源(使用合理的演算法),實現更多有效的產出。
影響程式的資源一般而言分為4個:cpu、記憶體、io、網路。本文著重講解一下在linux系統下,如何檢視高cpu佔用率的程序,執行緒。
2.python**
為了模擬真實場景,我們用python程式模擬乙個高cpu占用的情景,即開大量的執行緒,執行緒內部也使用無限迴圈(空跑),以下為python**cpu.py:
在linux系統中,使用 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()
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...