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