linux内存和网络命令详解

iostat查看cpu和硬盘负载

[TOC]
原文链接:https://blog.csdn.net/lqx0405/article/details/44777463

1 硬盘使用方法

iostat -d -k -x vdb 2

参数

  • -d 表示,显示设备(磁盘)使用状态;

  • -k某些使用block为单位的列强制使用Kilobytes为单位;

  • -x ,该选项将用于显示和io相关的扩展数据。

  • 2表示,数据显示每隔2秒刷新一次。

  • vdb是我的数据盘名称

输出如下

iostat.png

参数

解释

rrqm/s

每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)

wrqm/s

每秒这个设备相关的写入请求有多少被Merge了

rsec/s

每秒读取的扇区数;

wsec

每秒写入的扇区数。

rKB/s

每秒向设备发出的读取请求数

wKB/s

每秒向设备发出的写入请求数

avgrq-sz

平均请求扇区的大小

avgqu-sz

是平均请求队列的长度。毫无疑问,队列长度越短越好。计算方式: 两次读取的rq_ticks(加权毫秒数)的差值除以两次读取的时间间隔时间毫秒数。说明:rq_ticks 加权毫秒数,例如:在超市买东西,后面10个人等待第一个人付钱。第一个人花了1分钟付钱,那么这10个人花费的时间就是1*10分钟。也就是说它计算的是时间与当前等待的个数的乘积。

await

每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

r_await

每个读操作平均所需的时间(单位ms), r_await + w_await 就是磁盘对请求响应时间“注意: 不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间”

w_await

每个写操作平均所需的时间(单位ms)注意: 不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间

svctm

表示平均每次设备I/O操作的服务时间(以毫秒为单位)说明: 如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。

%util

在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

1.3 通过 pidstat 命令

1 # 命令的含义:展示I/O统计,每秒更新一次

pidstat -d 1

pidstat.png
可见其中 grep 命令占用了大量的读IO,之后可根据 PID 查看相关进程信息。

参数

翻译

PID

进程id

kB_rd/s

每秒从磁盘读取的KB

kB_wr/s

每秒写入磁盘KB

kB_ccwr/s

任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。

COMMAND

task的命令名

进程上下文切换

2 cpu使用方法

-c 参数

iostat还可以用来获取cpu部分状态值:

[oracle@rh6 ~]$ iostat -c 1 1
Linux 2.6.32-71.el6.i686 (rh6.cuug.net)         09/03/2014      _i686_  (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.34    0.00    0.78   13.60    0.00   85.28

常见用法

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await) 
iostat -c 1 10            #查看cpu状态

二 cryptsetup加密磁盘

参考地址:https://blog.csdn.net/imliuqun123/article/details/81672193

参考地址2:https://blog.csdn.net/weixin_42101155/article/details/109694714

参考地址3:https://blog.csdn.net/weixin_39726697/article/details/116639435?utm_term=cryptsetuplinux%E5%AE%89%E8%A3%85&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-1-116639435&spm=3001.4430

1 示例

##密码复杂度最少8位 大小写 特殊字符
##示例密码: MtVg7zKgl5j0bPPa


## 安装
yum install cryptsetup

## 1 分区加密
### 1.1 先格式化分区创建一个分区2
在加密分区添加密码
fdisk -l
mkfs.ext4 /dev/vdb
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (1,3,4,默认 1):2
Partition 2 is already defined.  Delete it before re-adding it.

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。



### 1.2 在加密分区添加密码
cryptsetup luksFormat /dev/vdb2
##这将覆盖 /dev/vdb 上的数据,该动作不可取消。
Are you sure? (Type uppercase yes): YES ##这里必须大写
输入 /dev/vdb 的口令:
确认密码:

### 1.3 先挂载到默认路径/dev/mapper/ test2=挂载名字(提示输入密码)。然后在通过test2挂载到实际自定义目录
cryptsetup luksOpen /dev/vdb2  test2
输入 /dev/vdb2 的口令:

ls /dev/mapper/test2 
mkfs.ext4 /dev/mapper/test2 
mount /dev/mapper/test2 /test2

三 iperf和iftop带宽峰值

3.1 linux查看带宽

第一种iperf3测试带宽

1安装

cd /opt/
wget https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm
rpm iperf3-3.1.3-1.fc24.x86_64.rpm

2使用方法

iperf3 -c 10.0.3.147 -b 5M -t 20

5M是宽带兆数 -t 20秒

可添加参数-t tcp协议
-u udp协议
-R 下载
-P 127 此处的-P是指启用多线程,127为线程数,范围为1-128,但是使用128则会引起windows端的iperf3程序崩溃,所以最多一台电脑可以模拟127个线程同时连接服务器。观察最后的统计结果,每个线程都有流量,且最后SUM为100M满速即可。

服务端:iperf3 -s
客户端:iperf3 -c 10.0.3.147 -n 1000000

第二种iftop 查看当前网络流量

1 安装

yum install iftop –y

2 命令说明

语法: iftop -h | [-npblNBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6]  
   -h                  显示本帮助(Help)信息  
   -n                  不进行主机名(hostName)查找  
   -N                  不将端口号(port Number)转换成对应的服务 to services  
   -p                  混合(Promiscuous)模式(显示网络相关的其他主机信息)  
   -b                  不显示流量图形条(Bar)  
   -B                  以字节(Byte)为单位,显示带宽(Bandwidth);默认以比特(bit)显示的  
   -i interface        监控的网卡接口(interface)  
   -f filter code      包统计时,使用过滤码;默认:无,只统计IP包  
   -F net/mask         显示特定IPv4网段的进出流量(Flow);如# iftop -F 10.10.1.0/24  
   -G net6/mask6       显示特定IPv6网段的进出流量(Flow)  
   -l                  显示并统计IPv6本地(Local)链接的流量(默认:关)  
   -P                  显示端口(Port)  
   -m limit            设置显示界面上侧的带宽刻度(liMit)  
   -c config file      指定配置(Config)文件  
   -t                  使用不带窗口菜单的文本(text)接口  

   排序:  
   -o 2s                Sort by first column (2s traffic average)  
   -o 10s               Sort by second column (10s traffic average) [default]  
   -o 40s               Sort by third column (40s traffic average)  
   -o source            Sort by source address  
   -o destination       Sort by destination address  

   The following options are only available in combination with -t  
   -s num              print one single text output afer num seconds, then quit  
   -L num              number of lines to print

3 用法

iftop -i eth0 -n -P -m

iftop.png
iftop界面相关说明

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的< = =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

四 iotop查看进程io

1 找到io占用高的进程

如果没有该命令,请通过 yum install iotop 进行安装。

iotop -oP


通过这个命令可以看见比较详细信息,如:进程号,磁盘读取量,磁盘写入量,IO百分比,涉及到的命令是什么「两个都是 grep 命令造成的IO读取量大」。

参数

详解

Total DISK READ

从磁盘中读取的总速率

Total DISK WRITE

往磁盘里写入的总速率

Actual DISK READ

从磁盘中读取的实际速率

Actual DISK WRITE

往磁盘里写入的实际速率

TID

线程ID,按p可转换成进程ID

PRIO

优先级

USER

线程所有者

DISK READ

从磁盘中读取的速率

DISK WRIT

往磁盘里写入的速率

SWAPIN

swap交换百分比

IO>

IO等待所占用的百分比

COMMAND

具体的进程命令

–version #显示版本号
-h, –help #显示帮助信息
-o, –only #显示进程或者线程实际上正在做的I/O,而不是全部的,可以随时切换按o
-b, –batch #运行在非交互式的模式
-n NUM, –iter=NUM #在非交互式模式下,设置显示的次数,
-d SEC, –delay=SEC #设置显示的间隔秒数,支持非整数值
-p PID, –pid=PID #只显示指定PID的信息
-u USER, –user=USER #显示指定的用户的进程的信息
-P, –processes #只显示进程,一般为显示所有的线程
-a, –accumulated #显示从iotop启动后每个线程完成了的IO总数
-k, –kilobytes #以千字节显示
-t, –time #在每一行前添加一个当前的时间
-q, –quiet #suppress some lines of header (implies –batch). This option can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration,
-qq column names are never printed,
-qqq the I/O summary is never printed.

2 通过 pidstat 命令

1 # 命令的含义:展示I/O统计,每秒更新一次

pidstat -d 1

pidstat查询io.png
可见其中 grep 命令占用了大量的读IO,之后可根据 PID 查看相关进程信息。