一、背景
在一次测试中发现服务器非常卡顿,刚开始任务是网络问题导致,可是别人的服务却可以正常运行,于是进行了一些列排查。
二、排查步骤
2.1 查看内存使用情况
free -g
2.2 查看磁盘使用情况
df -h
查看磁盘的 已用 情况是否过高。
2.3 查看磁盘IO使用情况
iostat -x 1
lsblk
查看磁盘的io情况是否使用过高。
2.4 查看cpu使用情况,类似于Windows的任务管理器
top [-] [d] [p] [q] [c] [C] [S] [s] [n] 参数说明: d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p:★通过指定监控进程ID来仅仅监控某个进程的状态。 q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S:指定累计模式。 s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i:使top不显示任何闲置或者僵死进程。 c:★显示整个命令行而不只是显示命令名。
top -c
top -p XXXX
2.4.1 第一行:系统运行时间和平均负载
top - 08:43:13 up 8 days, 19:11, 7 users, load average: 1.55, 1.41, 1.25
系统时间:08:43:13
运行时间:up 8 days,
当前登录用户: 7 user
负载均衡(uptime) load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
2.4.2 第二行:任务(进程)统计信息
Tasks: 661 total, 1 running, 660 sleeping, 0 stopped, 0 zombie
总进程:661 total, 运行:1 running, 休眠:660 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie
2.4.3 第三行:cpu状态信息
这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示: %Cpu(s): 1.9 us, 1.2 sy, 0.0 ni, 96.6 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
1.9 us【user space】— 用户空间占用CPU的百分比。
1.2 sy【sysctl】— 内核空间占用CPU的百分比。
0.0 ni【niced】— 改变过优先级的进程占用CPU的百分比
96.6 id【idolt】— 空闲CPU百分比
0.2 wa【wait】— IO等待占用CPU的百分比
0.0 hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0 st【Software Interrupts】— 软中断占用CPU的百分比
2.4.4 第四行:内存状态
1003020k total【物理内存】, 234464k used【使用中的内存】, 777824k free【空闲内存】, 24084k buffers【缓存的内存量】
2.4.5 第五行:swap交换分区
2031612k total【交换区总量】, 536k used【使用的交换区总量】, 2031076k free【空闲交换区总量】, 505864k cached【缓冲的交换区总量】
备注: 可用内存=free + buffer + cached 对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了 。 第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数, 第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。 纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心
2.4.6 空行
2.4.7 各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — `上次更新到现在的CPU时间占用百分比`
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
详解 VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来
DATA 1、数据占用的内存。如果top没有显示,按f键可以显示出来。 2、真正的该程序要求的数据空间,是真正在运行中要使用的。
2.4.8 top内部命令如下:
f/F – ★添加或删除top中的显示字段
n – ★设置在进程列表所显示进程的数量
s – ★改变画面更新周期,单位时秒
P – ★以 CPU 占用率大小的顺序排列进程列表
K – ★终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
c – ★切换显示命令名称和完整命令行。
o或者O:改变显示项目的顺序
l – 关闭或开启第一部分第一行 切换显示平均负载和启动时间信息。
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示切换显示进程和CPU状态信息。
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示切换显示内存信息。
N – 排序【PID】以PID的大小的顺序排列表示进程列表
M – 排序【内存占用率】以大小的顺序排列进程列表
T – 排序【根据时间/累计时间进行】
i:忽略闲置和僵死进程。这是一个开关式命令。
S:切换到累计模式。
h – 显示帮助
q – 退出 top
W:将当前设置写入~/.toprc文件中。
1 – 数字1 按数字“1”可监控每个逻辑CPU的状况
b – 打开/关闭运行线程【R状态】的加亮效果
x – 打开/关闭运行线程【R状态】排序列的加亮效果
”shift + >”或”shift + < :★可以向右或左改变排序列
2.4.9 其他与cup相关的命令
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
cat /proc/cpuinfo| grep "cpu cores"| uniq
cat /proc/cpuinfo| grep "processor"| wc -l
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/meminfo
ps -eLf | grep java | wc -l
netstat -n | grep tcp | grep 侦听端口 | wc -l
2.5 查看网络情况 iftop
2.5.1 安装iftop
官方网站:http://www.ex-parrot.com/~pdw/iftop/ 下载与安装:
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install
2.5.2 监听效果
iftop
2.5.3 iftop参数说明
1》iftop 界面相关说明 界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
2》★ iftop 命令的相关参数 最佳实战命令:iftop -nPm 20M 显示ip,端口,最大刻度20M
-i ★设定监测的网卡,如:
-n ★使host信息默认直接都显示IP,如:
-P ★显示端口;
-m ★设置界面最上边的刻度的最大值,刻度分五个大段显示【指定为带有“K”、“M”或“G”后缀的数字。】,例:
-F ★显示特定网段的进出流量,如
-B 以bytes为单位显示流量(默认是bits),如:
-h(display this message),帮助,显示参数信息
-p 以混杂模式运行,因此不直接通过指定接口的通信量也被计算在内
-b 使流量图形条默认就显示;
-f 滤波器代码,使用筛选代码选择要计数的数据包。只对IP数据包进行计数,因此指定的代码计算为(筛选代码)和IP;
-l 显示和统计发送到链路本地IPv6地址或来自链路本地IPv6地址的数据报。默认情况下,不显示该地址类别。
-G net6/mask6指定用于流量分析的IPv6网络。mask6的值可以作为前缀长度或数字地址字符串给出,用于更复杂的位掩码。
-c 配置文件指定备用配置文件。如果未指定,iftop将使用~/.IFTOPC(如果存在)。有关配置文件的说明
-t 文本输出模式
3》进入iftop画面后的一些操作命令(注意大小写)
按h ★切换是否显示帮助;
按P ★切换暂停/继续显示;
按n ★切换显示本机的IP或主机名;
按B ★切换计算2秒或10秒或40秒内的平均流量;
按T ★切换是否显示每个连接的总流量;
按l ★L打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t ★切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N ★切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按b切换是否显示平均流量图形条;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k ★可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。
|