2020-08-12 16:09:51 +08:00
|
|
|
|
# Linux 性能分析工具
|
|
|
|
|
|
|
|
|
|
## 1.CPU and Memory
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
top
|
|
|
|
|
htop
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# vmstat 命令输出分成六个部分
|
2020-08-12 16:09:51 +08:00
|
|
|
|
# [procs]
|
|
|
|
|
# r:在运行队列中等待的进程数
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# b:在等待 io 的进程数
|
2020-08-12 16:09:51 +08:00
|
|
|
|
# [memoy]
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# swpd:现时可用的交换内存(单位 KB)
|
|
|
|
|
# free:空闲的内存(单位 KB)
|
2020-08-12 16:09:51 +08:00
|
|
|
|
# buff: 缓冲去中的内存数(单位:KB)
|
|
|
|
|
# cache:被用来做为高速缓存的内存数(单位:KB)
|
|
|
|
|
# [swap]
|
|
|
|
|
# si: 从磁盘交换到内存的交换页数量,单位:KB/秒
|
|
|
|
|
# so: 从内存交换到磁盘的交换页数量,单位:KB/秒
|
|
|
|
|
# [io block]
|
|
|
|
|
# bi: 发送到块设备的块数,单位:块/秒
|
|
|
|
|
# bo: 从块设备接收到的块数,单位:块/秒
|
|
|
|
|
# [system]
|
|
|
|
|
# in: 每秒的中断数,包括时钟中断
|
|
|
|
|
# cs: 每秒的环境(上下文)切换次数
|
|
|
|
|
# [cpu]
|
|
|
|
|
# cs:用户进程使用的时间 。以百分比表示
|
|
|
|
|
# sy:系统进程使用的时间。 以百分比表示
|
|
|
|
|
# id:中央处理器的空闲时间 。以百分比表示
|
|
|
|
|
vmstat
|
|
|
|
|
vmstat -s
|
|
|
|
|
free
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# 每 2 秒钟更新一次
|
2020-08-12 16:09:51 +08:00
|
|
|
|
free -s2
|
|
|
|
|
# (2)
|
|
|
|
|
cat /proc/meminfo
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 2.IO
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
iotop
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 3.Net
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
netstat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 4.Mult
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
nmon
|
|
|
|
|
# sysstat
|
|
|
|
|
pidstat
|
|
|
|
|
iostat
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# System Activity Reporter 系统活动情况报告
|
2020-08-12 16:09:51 +08:00
|
|
|
|
sar
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-10 10:48:38 +08:00
|
|
|
|
## 5.Glances
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-10-28 11:55:40 +08:00
|
|
|
|
sudo pacman -S glances
|
2020-12-10 10:48:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.1.Standalone Mode
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
glances
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.2.Client/Server Mode
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Server
|
|
|
|
|
glances -s [-B <address>] [-p <port>]
|
|
|
|
|
# Client
|
|
|
|
|
glances -c <server ip or hostname> [-p <port>]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.3.Web Server Mode
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-10-28 11:55:40 +08:00
|
|
|
|
sudo pacman -S python-bottle
|
2020-12-10 10:59:42 +08:00
|
|
|
|
glances -w [-B <address>] [-p <port>] [--username] [--password]
|
2020-12-10 10:48:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To change the refresh rate of the page, just add the period in seconds at the end of the URL. For example, to refresh the page every 10 seconds:
|
|
|
|
|
|
|
|
|
|
```blk
|
|
|
|
|
http://@server:61208/10
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-10 10:59:42 +08:00
|
|
|
|
## 6.nethogs
|
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
是一个开源的命令行工具(类似于 Linux 的 top 命令),用来按进程或程序实时统计网络带宽使用率。
|
2020-12-10 10:59:42 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
2021-10-28 11:55:40 +08:00
|
|
|
|
sudo pacman -S nethogs
|
2020-12-10 10:59:42 +08:00
|
|
|
|
nethogs
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-10 11:08:41 +08:00
|
|
|
|
## 7.Dstat
|
|
|
|
|
|
|
|
|
|
Dstat is a versatile replacement for vmstat.
|
|
|
|
|
|
|
|
|
|
```bash
|
2021-10-28 11:55:40 +08:00
|
|
|
|
sudo pacman -S dstat
|
2020-12-10 11:08:41 +08:00
|
|
|
|
dstat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```blk
|
2021-10-28 14:04:48 +08:00
|
|
|
|
-c:显示 CPU 系统占用,用户占用,空闲,等待,中断,软件中断等信息。
|
|
|
|
|
-C:当有多个 CPU 时候,此参数可按需分别显示 cpu 状态,例:-C 0,1 是显示 cpu0 和 cpu1 的信息。
|
2020-12-10 11:08:41 +08:00
|
|
|
|
-d:显示磁盘读写数据大小。
|
|
|
|
|
-D hda,total:include hda and total。
|
|
|
|
|
-n:显示网络状态。
|
|
|
|
|
-N eth1,total:有多块网卡时,指定要显示的网卡。
|
|
|
|
|
-l:显示系统负载情况。
|
|
|
|
|
-m:显示内存使用情况。
|
|
|
|
|
-g:显示页面使用情况。
|
|
|
|
|
-p:显示进程状态。
|
|
|
|
|
-s:显示交换分区使用情况。
|
2021-10-28 14:04:48 +08:00
|
|
|
|
-S:类似 D/N。
|
|
|
|
|
-r:I/O 请求情况。
|
2020-12-10 11:08:41 +08:00
|
|
|
|
-y:系统状态。
|
2021-10-28 14:04:48 +08:00
|
|
|
|
--ipc:显示 ipc 消息队列,信号等信息。
|
|
|
|
|
--socket:用来显示 tcp udp 端口状态。
|
2020-12-10 11:08:41 +08:00
|
|
|
|
-a:此为默认选项,等同于-cdngy。
|
|
|
|
|
-v:等同于 -pmgdsc -D total。
|
2021-10-28 14:04:48 +08:00
|
|
|
|
--output 文件:此选项也比较有用,可以把状态信息以 csv 的格式重定向到指定的文件中,以便日后查看。例:dstat --output /root/dstat.csv & 此时让程序默默的在后台运行并把结果输出到 /root/dstat.csv 文件中。
|
2020-12-10 11:08:41 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 8.Others
|
2020-08-12 16:09:51 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况
|
|
|
|
|
strace
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# lsof(list open files) 是一个列出当前系统打开文件的工具
|
2020-08-12 16:09:51 +08:00
|
|
|
|
lsof
|
2021-10-28 14:04:48 +08:00
|
|
|
|
# 是 Linux kernel 自带的系统性能优化工具。优势在于与 Linux Kernel 的紧密结合,它可以最先应用到加入 Kernel 的 new feature,用于查看热点函数,查看 cashe miss 的比率,从而帮助开发者来优化程序性能
|
2020-08-12 16:09:51 +08:00
|
|
|
|
perf
|
|
|
|
|
uptime
|
|
|
|
|
mpstat
|
|
|
|
|
isstat
|
|
|
|
|
vmstat
|
|
|
|
|
nicstat
|
|
|
|
|
tcpdump
|
|
|
|
|
blktrace
|
|
|
|
|
slabtop
|
|
|
|
|
sysctl
|
|
|
|
|
```
|
|
|
|
|
|
2020-12-10 11:08:41 +08:00
|
|
|
|
## 9.常见参数解读
|
2020-08-12 16:09:51 +08:00
|
|
|
|
|
2020-12-10 11:08:41 +08:00
|
|
|
|
## 9.1.内存参数
|
2020-08-12 16:09:51 +08:00
|
|
|
|
|
2021-10-28 14:04:48 +08:00
|
|
|
|
* Buffer Cache:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。对应磁盘上一个块(block),块通常为 1K。在 linux 下,为了更有效的使用物理内存,操作系统自动使用所有空闲内存作为 Buffer/Cache 使用。当程序需要更多内存时,操作系统会自动减小 Cache 的大小。
|
2020-08-12 16:09:51 +08:00
|
|
|
|
* Page Cache:作为 Page Cache 的内存, 文件系统的 Cache。
|
2021-10-28 14:04:48 +08:00
|
|
|
|
* Shared memory:主要用于在 UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存。
|
2020-08-12 16:09:51 +08:00
|
|
|
|
|
2020-12-10 10:59:42 +08:00
|
|
|
|
## 9.内部参考关键字
|
2020-08-12 16:09:51 +08:00
|
|
|
|
|
2020-09-28 16:48:24 +08:00
|
|
|
|
1. Meminfo
|
|
|
|
|
2. Sysstat
|