磁盘相关信息
1. 磁盘文件的检查
df — 主要是用于检查文件系统磁盘占用情况 du — 检查磁盘空间占用情况,统计目录或者文件大小 —max-depth=1 fdisk — 用来磁盘分区,检查分区情况 lsblk — 用来列出所有可用块设备,还能显示他们的依赖关系。
# 1. 查看磁盘的使用情况
df -h
# 2. 统计目录或者文件大小
du -h
du bin -h
# 3. 查看块设备
lsblk
lsblk -o +SERIAL # 带出磁盘序列,非磁盘的UUID (ll /dev/disk/by-uuid)
# 4.fdisk 创建和维护分区表
fdisk -l # 查看磁盘分区
fdisk /dev/sda # 对磁盘进行分区
# 磁盘格式化,并进行挂载
mkfs.ext4 /dev/sdb # 格式化新的磁盘
mkdir /data
mount /dev/sdb /data
# 自动挂载
ll /dev/disk/by-uuid
vim /etc/fstab
UUID=e0c1ef52-61b6-4f40-95f7-5160cc100288 /data1 ext4 defaults 0 0
top
#命令
top
# 参数:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。
p:通过指定监控进程 ID 来仅仅监控某个进程的状态。
q:该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使 top 不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名。
top -c -d 2 # 每隔2秒刷新下信息,并带出命令
# 结果参数:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NI:进程Nice值,代表这个进程的优先值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。D表示不可中断的睡眠态,S表示休眠,R表示正在运行,Z表示僵死状态
%CPU:进程占用CPU的使用
%MEM:进程使用的物理内存和总内存的百分
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值
COMMAND:启动该进程的命令名称
sar & mpstat
# sar(System ActivityReporter 系统活动情况报告);文件读写情况、系统调用、磁盘IO、CPU效率、内存、进程及IPC
# 需要安装sysstat包
【主要参数】:
-o: 将监控的的信息以二进制方式保存到文件中
-f: 从指定的文件读取报告
-u:报告每个CPU的状态
-P:报告某个CPU的状态
-b:显示I/O和传递速率的统计信息
-R: 显示内存状态
-w: 显示交换分区的状态
-q: 查看平均负载
-d: 磁盘使用统计信息
# 1. 查看CPU的使用率
sar -u 1 5 # 每隔1秒,共收集5次
# 2. 查看指定内核的使用情况
sar -P 0 -u 1 5 # 查看0号CPU的每秒情况,共收集5次
# 3. 查看进程的情况
sar -q 1 5 # 查看进程的情况,每秒一次,共五次
# mpstat(Multiprocessor Statistics 实时监控工具);报告CPU的统计
# mpstat 跟 star -u 功能类似
mpstat -P ALL 1 5 # 统计CPU的情况,每秒1次,共5次
sar -u 1 5 # 统计CPU的情况,每秒1次,共5次
vmstat
# vmstat可以展现指定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
## vmstat
vmstat 1 3 # 每隔3秒执行一次采集
## 结果参数
r :表示运行队列(就是说多少个进程真的分配到 CPU),我测试的服务器目前 CPU 比较空闲,没什么程序在跑,当这个值超过了 CPU 数目,就会出现 CPU 瓶颈了。这个也和 top 的负载有关系,一般负载超过了 3 就比较高,超过了 5 就高,超过了 10 就不正常了,服务器的状态很危险。top 的负载类似每秒的运行队列。如果运行队列过大,表示你的 CPU 很繁忙,一般会造成 CPU 使用率很高。
b:表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swap:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free:空闲的物理内存的大小,我的机器内存总共 8G,剩余 3415M。
buff:Linux/Unix 系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache:cache 直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si:每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so:每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同上。
bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte,我本机上没什么 IO 操作,所以一直是 0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo:块设备每秒发送的块数量,例如我们读取文件,bo 就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in:每秒 CPU 的中断次数,包括时间中断
cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在 apache 和 nginx 这种 web 服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择 web 服务器的进程可以由进程或者线程的峰值一直下调,压测,直到 cs 到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的 CPU 大部分浪费在上下文切换,导致 CPU 干正经事的时间少了,CPU没有充分利用,是不可取的。
us:用户 CPU 时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy:系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁。
id:空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy是系统 CPU 使用率。
wa:等待 IO CPU 时间。注意:wa 的值高时,说明 IO等 待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
iostat
# iostat 主要用于监控系统设备的io负载
【主要参数】:
-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况
iostat -dmx
# 使用间隔检索,每隔2秒显示一次,共5次
iostat -d 2 5
# 查看分区上的统计信息
iostat -p sda 2 6
# 显示指定硬盘信息
iostat -d sda
#查看TPS和吞吐量
iostat -d -x -k 1 1
内存
# 参数 -h :Gb单位; -m :Mb单位; 默认Kb单位
free -h
# 参数说明:
total : 总计物理内存的大小
used : 已使用内存的大小
free : 空闲内存的大小
shared : 多个进程共享的内存总大小
buff/cache : 磁盘缓存大小(当内存不足时此部分内存会自动释放,内存足够时不会释放)
available : 可用内存大小 , 从应用程序的角度来说:available = free + buff/cache
##如果cached过大接近total数就需要清除缓存了
##缓存清除命令:如图
echo 1 > /proc/sys/vm/drop_caches --释放网页缓存
echo 2 > /proc/sys/vm/drop_caches --释放目录项和索引
echo 3 > /proc/sys/vm/drop_caches --释放网页缓存,目录项和索引
# 查看进程
PS -e -o "%C : %p : %z : %a"|sort -k5 -nr # 按内存从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -nr # 按CPU利用率从大到小排列
网络
# netstat 监控TCP/IP网络的工具,可以显示路由表、网络接口设备的状态信息
【主要参数】:
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
netstat -tunlp # 列出所有处理监听状态的Tcp、Udp端口,加上程序名
netstat -tanlp # 列出所有处理监听状态的TCP端口,加上程序名
pmap
# pmap用于报告进程的内存映射关系
【主要参数】:
-x:显示扩展格式;
-d:显示设备格式;
-q:不显示头尾行;
-V:显示指定版本。