找出占用內存資源最多的前 10 個進程
~~~
ps -auxf | sort -nr -k 4 | head -10 -n數字大小 r反序 k行數
~~~
找出占用 CPU 資源最多的前 10 個進程
~~~
ps -auxf | sort -nr -k 3 | head -10
~~~
查看系統平均負載
~~~
uptime
~~~
平均負載表示所有CPU的活躍進程數,除以CPU核心數得到每個CPU的平均活躍進程數,數值越大表示每個CPU上運行的進程越多,系統壓力越大,當平均值大于0.7時表示系統較為繁忙。<br>
CPU核心數可以通過以下命令查看
~~~
grep 'model name' /proc/cpuinfo |wc -l
~~~
CPU節拍率
* Process Time in Linux is measured in Jiffies. Jiffies are measured in\*“HZ”\*.
* Jiffies value can be fetched via`sysconf(_SC_CLK_TCK)`system call)
~~~
grep 'CONFIG_HZ=' /boot/config-$(uname -r)
~~~
找出是CPU使用率高還是iowait高usr: 用戶態CPU使用百分比sys: 內核態CPU使用百分比iowait高表示CPU在等硬盤<br>
查看所有CPU的統計信息,每2秒刷新一次
~~~
mpstat -P ALL 2
~~~
## **cpu 使用率常見指標**
```
* user(通常縮寫為 us),代表用戶態 CPU 時間。注意,它不包括下面的 nice 時間,但包括了 guest 時間。
* nice(通常縮寫為 ni),代表低優先級用戶態 CPU 時間,也就是進程的 nice 值被調整 為 1-19 之間時的 CPU 時間。這里注意,nice 可取值范圍是 -20 到 19,數值越大,優 先級反而越低。
* system(通常縮寫為 sys),代表內核態 CPU 時間。
* idle(通常縮寫為 id),代表空閑時間。注意,它不包括等待 I/O 的時間(iowait)。
* iowait(通常縮寫為 wa),代表等待 I/O 的 CPU 時間。
* irq(通常縮寫為 hi),代表處理硬中斷的 CPU 時間。
* softirq(通常縮寫為 si),代表處理軟中斷的 CPU 時間。
* steal(通常縮寫為 st),代表當系統運行在虛擬機中的時候,被其他虛擬機占用的 CPU 時間。
* guest(通常縮寫為 guest),代表通過虛擬化運行其他操作系統的時間,也就是運行虛 擬機的 CPU 時間。
* guest\_nice(通常縮寫為 gnice),代表以低優先級運行虛擬機的時間。
```
系統中處于 R 狀態的進程數增加引發的 - 系統中處于 D 狀態的進程數增加引發的 - Loadavg 數值大于某個值就一定有問題。
其基本思路就是,根據引起 Load 變化的根源是 R 狀態任務增多,還是 D 狀態任務增多,來進入到不同的流程。
在 Linux 系統里,讀取 /proc/stat 文件,即可獲取系統中 R 狀態的進程數;但 D 狀態的任務數恐怕最直接的方式還是使用 ps 命令比較方便。而/proc/stat 文件里 procs\_blocked 則給出的是處于等待磁盤 IO 的進程數:
在 Linux 系統里,讀取 /proc/stat 文件,即可獲取系統中 R 狀態的進程數;
但 D 狀態的任務數恐怕最直接的方式還是使用 ps 命令比較方便。而/proc/stat 文件里 procs\_blocked 則給出的是處于等待磁盤 IO 的進程數:
因此 iowait 成為 D 狀態分類里定位是否 Load 高是由 IO 引發的一個重要參考。
iowait 高的時候,CPU 正處于空閑狀態,
使用pidstat -w 查看進程上下文切換次數 ;
~~~
03:02:18 PM UID PID cswch/s nvcswch/s Command
03:02:18 PM 0 1 2.82 0.48 systemd
03:02:18 PM 0 2 0.00 0.00 kthreadd
03:02:18 PM 0 4 0.00 0.00 kworker
~~~
cs: 自愿上下文切換,代表內存,I/O資源不足
nvcs: 非自愿上下文切換,CPU時間片已到被系統強制調度,代表CPU競爭激烈<br>
查看硬中斷(硬中斷是由硬件產生的),軟中斷(軟中斷是一些對I/O的請求)。
~~~
cat /proc/interrupts
~~~
~~~
cat /proc/softirqs
~~~
<br>
pidstat
下面的 pidstat 命令,間隔 1 秒展示了進程的 5 組 CPU 使用率,包括:
* 用戶態 CPU 使用率 (%usr);
* 內核態 CPU 使用率(%system);
* 運行虛擬機 CPU 使用率(%guest);
* 等待 CPU 使用率(%wait);
* 以及總的 CPU 使用率(%CPU)。
最后的 Average 部分,還計算了 5 組數據的平均值。
#### perf top
perf top ,類似于 top,它能夠實時顯示占用 CPU 時鐘最多的函數或者指令,可以用來查找熱點函數,使用界面如下所示:
~~~bash
$ perf top
Samples: 583K of event 'cycles:ppp', Event count (approx.): 32449180472
Overhead Shared Object Symbol
4.71% [kernel] [k] update_blocked_averages
2.89% [kernel] [k] do_syscall_64
1.14% [kernel] [k] __entry_trampoline_start
1.13% perf [.] hpp__sort_overhead
1.07% [kernel] [k] syscall_return_via_sysret
1.04% [kernel] [k] cleanup_module
1.00% [kernel] [k] update_load_avg
0.83% perf [.] __hists__insert_output_entry
~~~
Load的增加大致分為兩種,系統中處于 R 狀態的進程數增加引發的 - 系統中處于 D 狀態的進程數增加引發的。
基本思路就是,根據引起 Load 變化的根源是 R 狀態任務增多,還是 D 狀態任務增多,來進入到不同的流程。
在 Linux 系統里,讀取 /proc/stat 文件,即可獲取系統中 R 狀態的進程數;使用 ps 命令獲取D狀態的進程數。而/proc/stat 文件里 procs\_blocked 則給出的是處于等待磁盤 IO 的進程數:iowait 高的時候,CPU 正處于空閑狀態,
**io**
### 查找IO占用情況
查看進程的I/O情況
~~~
pidstat -d 1 20
~~~
### 查看網絡數據包發送情況
sar
命令查看每秒接收發送的網絡幀數和千字節大小 千字節大小\*1024除以幀數得出平均每個數據包字節數
* rxpck/s txpck/s 每秒接收發送的網絡幀數
* rxKB/s txKB/s 每秒接收發送的千字節數
~~~
[root@host231 ssl]#sar -n DEV 1
~~~
### 查找占用CPU時鐘最多的函數或指令
使用perf命令查看 -p 指定進程id
實時查看
~~~
perf top -g
~~~
統計之后離線查看
~~~
perf record -g -F 100 --sleep 15
perf report
~~~
### 工具總結
在分析 CPU、內存、磁盤等的性能指標時,有幾種工具是高頻出現的,如?top、vmstat、pidstat,總結一下如下:
1. CPU:top、vmstat、pidstat、sar、perf、jstack、jstat;
2. 內存:top、free、vmstat、cachetop、cachestat、sar、jmap;
3. 磁盤:top、iostat、vmstat、pidstat、du/df;
4. 網絡:netstat、sar、dstat、tcpdump;
5. 應用:profiler、dump。
- 文章翻譯
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的過去,未來與現在
- Demystifying Istio Circuit Breaking
- 知識圖譜
- skill level up graph
- 一、運維常用技能
- 1.0 Vim (編輯器)
- 1.1 Nginx & Tengine(Web服務)
- 基礎
- 1.2 zabbix
- 定義
- 登錄和配置用戶
- 1.3 RabbitMQ(消息隊列)
- 原理
- RabbitMQ(安裝)
- 1.4虛擬化技術
- KVM
- 1.5 Tomcat(Web中間件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(負載均衡高可用)
- 1.9 Memcache(分布式緩存)
- 1.10 Zookeeper(分布式協調系統)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(運維自動化)
- 1.13 WAF(Web防火墻)
- 1.14 HAproxy負載均衡
- 1.15 NFS(文件傳輸)
- 1.16 Vim(編輯器)
- 1.17 Cobbler(自動化部署)
- 二、常用數據庫
- 2.1 MySQL(關系型數據庫)
- mysql主從復制
- 2.2 Mongodb(數據分析)
- 2.3 Redis(非關系數據庫)
- 三、自動化運維工具
- 3.1 Cobbler(系統自動化部署)
- 3.2 Ansible(自動化部署)
- 3.3 Puppet(自動化部署)
- 3.4 SaltStack(自動化運維)
- 四、存儲
- 4.1 GFS(文件型存儲)
- 4.2 Ceph(后端存儲)
- 五、運維監控工具
- 5.1 云鏡
- 5.2 ELK
- 六、運維云平臺
- 6.1 Kubernetes
- 6.2 OpenStack
- 介紹
- 安裝
- 七、Devops運維
- 7.1 理念
- 7.2 Devops運維實戰
- 八、編程語言
- 8.1 Shell
- 書籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法與數據結構
- 九、雜記
- 高優先級技能
- 知識點
- JD搜集
- 明顯的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遺漏知識點
- 1.18.3 GCP、azure、aliyun
- Azure文檔
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源碼學習
- Scheduler源碼
- 調度器入口
- 調度器框架
- Node篩選算法
- Node優先級算法
- pod搶占調度
- 入口
- 主要代碼結構
- new
- 文章翻譯
- Flannel
- 從二進制集群搭建
- 信息收集
- docker優化
- 1.2 shell
- 面試題
- grep awk sed 常見用法
- shell實踐
- 1.3 Data structure(數據結構)
- Calico
- Aliyun文檔以及重點模塊
- git
- 大數據組件
- 前端,后端,web框架
- cgroup,namespace
- 內核
- Linux搜集
- crontab
- centos7常用優化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能問題排查與分析
- 性能分析搜集
- 性能分析常用10條
- 網絡性能優化
- 文本處理命令
- sql
- Iptables
- python面試題
- iptables
- iptables詳細
- zabbix面試題,proj
- prometheus
- web中間件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平臺
- 書籍Linux應用技巧
- kafka
- kafka面試題
- ETCD
- Jenkins
- 3天補充的點
- K8s源碼
- K8s
- k8s實操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow問答精選
- 問題
- 我對于學習思考
- 修改ssh超時時間
- 課程目錄
- 運維與運維開發
- The Person
- 個人雜談
- mysql主從復制
- 對于工作的認識與思考