找出占用内存资源最多的前 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主从复制
- 对于工作的认识与思考