linux程序性能分析工具,linux 性能調優

 2023-10-21 阅读 22 评论 0

摘要:導致cpu負載增高的三個場景: 1.cpu密集型進程 2io密集型,等待io也會導致負載升高,但是cpu使用率不一定很高 3.大量等待cpu的進程調度 linux程序性能分析工具、cpu寄存器:是cpu內置的容量小,速度極快的內存【保存程序運行時的一些數據】 cp

導致cpu負載增高的三個場景:

1.cpu密集型進程

2io密集型,等待io也會導致負載升高,但是cpu使用率不一定很高

3.大量等待cpu的進程調度

linux程序性能分析工具、cpu寄存器:是cpu內置的容量小,速度極快的內存【保存程序運行時的一些數據】

cpu計數器:用來保存cpu正在執行的指令位置或者即將執行的下一條指令位置

cpu上下文切換就是保存當前運行的cpu寄存器和計數器中的數據然后跳轉到新的程序計數器位置執行其他進程

頻繁的上下文切換會提高cpu負載。

系統調用通常稱為特權模式的切換,從ring0切換到ring3,雖然系統調用也會發生上下文切換但是和進程的上下文切換是不一樣的,進程上下文切換是一個進程切換到另一個進程運行,而系統調用過程一直是同一個進程在運行

n卡性能調優怎么打開?stress 系統壓測工具

sysbench 多進程下數據庫性能測試工具,也可以用來多線程壓測linux系統。

sysstat 系統檢測工具軟件包:可以對cpu,內存,io等維度監控linux

? ?mpstat:多核cpu檢測工具,實時查看每個cpu性能指標

  mpstat -P ALL 5 ?#每5秒檢測一次cpu并輸出

NGINX負載均衡,? ?pidstat:進程性能分析工具,查看進程cpu,內存,io以及上下文切換等指標

  pidstat -u 5 1 ? ? ?#每5秒輸出一次cpu檢測數據

?

進程上下文切換分為資源切換和非自愿切換:

自愿切換:進程無法獲取所需資源,如io,內存等資源不足

ubuntu優化運行速度、非自愿切換:由于時間片已到被系統強制調度,大量進程爭奪cpu時容易發生非自愿切換

查看方式:

  ? ? ? ?pidstat -u -w 1 ? ?#-u ?輸出進程切換指標,

? ? ? ? ? ? ? cat?cat /proc/interrupts

cpu上下文切換數百到一萬以內都算正常,如果超過一萬或者成數量級增長就很可能出現了cpu性能瓶頸

docker 負載均衡?查看具體應用的哪個函數引起的cpu負載高:

perf top -g -p 21515 ? #-g 開啟調用關系分析,-p 指定 php-fpm 的進程號...

?

節拍率 HZ 是內核的可配選項,可以設置為 100、250、1000 等。不同的系統可能設置不同數值,你可以通過查詢 /boot/config 內核選項來查看它的配置值。比如在我的系統中,節拍率設置成了 250,也就是每秒鐘觸發 250 次時間中斷。

  $ grep 'CONFIG_HZ=' /boot/config-$(uname -r)

linux性能思路。cat /proc/stat | grep ^cpu ? ?#查看cpu使用統計信息

cat /proc/[pid]/stat | grep ^cpu ? ?#查看指定進程cpu使用統計信息

?

不同工具測出的cpu使用率可能不一致, 比如,對比一下 top 和 ps 這兩個工具報告的 CPU 使用率,默認的結果很可能不一樣,因為 top 默認使用 3 秒時間間隔,而 ps 使用的卻是進程的整個生命周期。

linux性能優化實戰pdf?碰到常規問題無法解釋的 CPU 使用率情況時,首先要想到有可能是短時應用導致的問題,比如有可能是下面這兩種情況:
1.應用里直接調用了其他二進制程序,這些程序通常運行時間比較短,通過 top 等工具也不容易發現
2.應用本身在不停地崩潰重啟,而啟動過程的資源初始化,很可能會占用相當多的 CPU
對于這類進程,我們可以用 pstree 或者 execsnoop 找到它們的父進程,再從父進程所在的應用入手,排查問題的根源。

################################

strace -p PID ? #實時跟蹤進程的系統調用

當iowait過多到只cpu負載過高時【dstat ?1 ? 4 ?#可以同時查看進程的io和cpu使用情況】:

1.用top找出cpu利用率高的進程

多線程調優?2.pidstat -d -p <PID> ?1 ? 4 ? ?#查看指定進程的磁盤io情況

iowait高不一定代表io有性能瓶頸,當系統中只有io進程運行時iowait也會高,但遠遠沒有達到io的性能瓶頸。

僵尸進程的問題相對容易排查,使用 pstree 找出父進程后,去查看父進程的代碼,檢查 wait() / waitpid() 的調用,檢查父進程是否遺漏了退出時子進程銷毀

################################

cpu中斷:

tomcat性能調優?為了解決中斷處理程序執行過長和中斷丟失的問題,Linux 將中斷處理過程分成了兩個階段,也就是上半部分和下半部分

?上半部用來快速處理中斷,它在中斷禁止模式下運行,主要處理跟硬件緊密相關的或時間敏感的工作。上半部直接處理硬件請求,也就是我們常說的硬中斷,特點是快速執行;

?下半部用來延遲處理上半部未完成的工作,通常以內核線程的方式運行,而下半部則是由內核觸發,也就是我們常說的軟中斷,特點是延遲執行。

上半部會打斷 CPU 正在執行的任務,然后立即執行中斷處理程序。而下半部以內核線程的方式執行,并且每個 CPU 都對應一個軟中斷內核線程,名字為 “ksoftirqd/CPU 編號”,比如說, 0 號 CPU 對應的軟中斷內核線程的名字就是 ksoftirqd/0。

/proc/softirqs 提供了軟中斷的運行情況;

linux網絡調優。/proc/interrupts 提供了硬中斷的運行情況。

一般來說,ps 的輸出中,名字括在中括號里的,一般都是內核線程。

軟中斷過導致cpu利用率高的解決思路:

從系統的軟中斷使用率高這個現象出發,通過觀察 /proc/softirqs 文件的變化情況,判斷出軟中斷類型是網絡接收中斷

# -n DEV 表示顯示網絡收發的報告,間隔 1 秒輸出一組數據
?sar -n DEV 1
tcpdump 抓包找出可疑發包ip

系統調優從哪幾個方面入手?防火墻禁用ip

##########

OOM(OUT OF MEMORY):

echo -16 > /proc/$(pidof sshd)/oom_adj

oom_adj 的范圍是 [-17, 15],數值越大,表示進程越容易被 OOM 殺死;數值越小,表示進程越不容易被 OOM 殺死,其中 -17 表示禁止 OOM。

?

cachetop? #查看進程緩存使用情況

cachestat #查看系統緩存使用情況

?/pro/zoneinfo? ? #查看內存情況(page_min? ?page_high? ?page_low)

?/proc/sys/vm/swappiness 選項,用來調整使用 Swap 的積極程度。swappiness 的范圍是 0-100,數值越大,越積極使用 Swap,也就是更傾向于回收匿名頁;數值越小,越消極使用 Swap,也就是更傾向于回收文件頁。

#創建基于文件的swap

# 創建 Swap 文件
$ fallocate -l 8G /mnt/swapfile
# 修改權限只有根用戶可以訪問
$ chmod 600 /mnt/swapfile
# 配置 Swap 文件
$ mkswap /mnt/swapfile
# 開啟 Swap
$ swapon /mnt/swapfile

轉載于:https://www.cnblogs.com/dufeixiang/p/10914402.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/154455.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息