linuxcpu線程佔用
『壹』 linux下一個線程佔用多少內存
Linux中線程本身是有自己的棧的,這個空間默認是10240,單位是K,所以默認佔用10M的內存,但是這是最少的,如果線程中,程序員也是用了內存,那就是大於10M,所以線程最低佔用的內存通過ulimit -s查看。
『貳』 linux 多線程cpu運行時間
這個月時間比較長的,因為這個度現成的CPU使用起來非常的好
『叄』 CPU佔用過高問題的排查及解決
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
第一行,任務隊列信息,同uptime 命令的執行結果
第二行,Tasks — 任務(進程)
總進程:150 total, 運行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵屍進程: 0 zombie
第三行,cpu狀態信息
第四行,內存狀態
1003020k total, 234464k used, 777824k free, 24084k buffers【緩存的內存量】
第五行,swap交換分區信息
2031612k total, 536k used, 2031076k free, 505864k cached【緩沖的交換區總量】
更多Linux內核視頻資料免費·領取後台私信【 內核 】自行獲取。
第六行,空行
第七行以下:各進程(任務)的狀態監控
詳解
top使用方法:
此時發現如果是Java的進程佔用過高,並且一直下不來,則排查是什麼線程導致佔比過高。以圖中進程舉例,假如發現PID為31357的Java進程佔CPU比一直很高,則記錄下它的PID
2.查看Java進程裡面的線程的佔用情況
top -H -p 31357 然後按shift+p按照CPU排序
說明:-H 指顯示線程,-p 是指定進程
可以看到CPU佔用較高的線程,記下他們的PID,假設這里31357的CPU佔比一直是50%
將查找到的 線程佔用最高的 tid 上圖中 29108 轉成16進制 --- 71b4
jstack 31357 > jstack.31357.log
以上能看到指定線程的堆棧信息。如果想看到關於線程中的 鎖的附加信息 ,可以加一個-l參數
4.上面方法用於進程正常情況下的堆棧列印
用jstack -l命令沒有響應,估計是CPU一直站著不能執行正常的命令,根據提示[The -F option can be used when the target process is not responding]只能放大招了。
jstack -F 「PID」 > jstack.「PID」.txt
吐出的實際日誌結果如下:
發現一大坨線程阻塞了,有用的結果在這里:
顯然一直在跑的是19576這個線程,一直在執行EXCEL導出的相關方法,問題就出在這里,下面的任務就是排查這個地方的代碼邏輯了。
jstack命令格式:
jstack [ option ] pid
參數說明:
命令格式
jps [ options ] [ hostid ]
參數說明:
三個參數加在一起顯示更詳細的信息:
發現這些Java進程的啟動參數中開放了JMX的遠程埠,正常情況下可以通過jconsole遠程連接過去看到JVM的日常參數。比如本地訪問上圖中的pay.war進程:
『肆』 Linux裡面cpu佔用太高排查思路是什麼
思路就是top查看是什麼進程佔用高,一般是應用或者資料庫,應用方面可以看看運行吐出日誌是否有報錯信息,查netstat連接應用埠的會話是不是有異常,資料庫進程高,可以使用自帶的檢查命令後台看是否有執行很久的sql事務,鎖等待頻繁,報錯日誌等,找到問題針對性的優化,一步一步解決。
『伍』 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
顯示結果如下:
化主動為被動的方式,一方面減輕了運維工程師的工作,另一方面也減小了運維漏看或者忽略告警的情況發生。
『陸』 linux查看線程佔用cpu
top命令是最方便的,想看CPU列的話直接按字母 c 就會以cpu的使用高低來排列。 其實就每一列的第一個字母,如果想按cpu排列就按c ,按內存排列就按m。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND top [-] [d delay] [q] [c] [s] [S] [i] d 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。 q 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶許可權,那麼top將以盡可能高的優先順序運行。 S 指定累計模式。 s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。 i 使top不顯示任何閑置或者僵死進程。 c 顯示整個命令行而不只是顯示命令名但是無法顯示每個線程的 cpu 利用率情況, 這時就可能出現這種情況,總的 cpu 利用率中 user 或 system 很高,但是用進程的 cpu 佔用率進行排序時,沒有進程的 user 或 system 與之對應。 可以用下面的命令將 cpu 佔用率高的線程找出來: 這個命令首先指定參數'H',顯示線程相關的信息,格式輸出中包含:user,pid,ppid,tid,time,%cpu,cmd,然後再用%cpu欄位進行排序。這樣就可以找到佔用處理器的線程了。
『柒』 linux如何查看進程中各個線程的資源佔用情況
直接打開資源管理器,再進積欄目中就可以看到各個線程的資源佔用情況